更新Node.JS应用程序并自动重新启动服务器

时间:2018-04-29 07:22:04

标签: node.js

我希望能够通过浏览器提交我的应用程序的新版本,然后更新源代码,安装/更新所有npm软件包并重新启动服务器。

现在我通过邮寄请求来做。我的应用程序将新版本的存档保存在本地目录中,然后运行实际停止服务器的bash脚本,执行更新。

问题是服务器在获得响应之前就停止了。我永远用它来运行我的节点应用程序。

问题:是否有更新应用程序的标准方法?是否可以在没有服务器重启的情况下完成?

2 个答案:

答案 0 :(得分:0)

哈哈哈哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇在我看来,问题不在于服务器在获得响应之前就停止了。你不能从正确的角度解决这个问题。我知道很难听到,但现在你已经在这条道路上做了一切,因为它是不安全的,不可维护的,对于任何甚至有点偏执的人来说都是噩梦。

让我们评估问题并将其称之为:代码部署策略。

尽管如此,这是一种可怕的部署策略。从外部源发布代码并在服务器上运行代码,大概没有任何真正的安全性......你是真的吗?

想象一个可以发布代码的世界,它会自动部署到该存储库之后的服务器上。听起来有点像你想要的,对吧?你猜怎么着!?!它已经存在!没有中间人的http帖子,谁知道在哪里。我说实话,这是我个人需要探索更多的领域,所以当我深入研究时,我会添加更多内容,但除此之外,由于你以一种模糊的方式描述了你的过程,我认为一个适当的答案会指向你设置git存储库,启用git hooks,将更新推送到代码存储库等等。为此,我为你提供了这4个(并且最终更多)的链接:

http://rogerdudler.github.io/git-guide/ https://gist.github.com/noelboss/3fe13927025b89757f8fb12e9066f2fa https://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1/ https://readwrite.com/2013/10/02/github-for-beginners-part-2/

根据你对这个答案的评论......好吧。我仍然坚持我所说的,所以你已经被警告了! :)现在,继续你的问题。

是的,需要重新启动运行节点进程,或者它仍将使用已加载到内存中的旧代码。不幸的是,由于你没有留下任何代码或执行逻辑,我只有一个猜测可能解决你的问题。

您在收到回复之前说服务器已停止。尝试构建承诺链并在发送响应后重新启动服务器。像这样的东西,以ExpressJS为例:

postCallback(req, res, next) {
  // handle all your code deployment, npm install etc.
  return res.json(true) // or whatever you want response to contain
    .then(() => restartServer());
}

您可能需要留意res.end()。我不记得它是否结束了所有执行或仅仅是响应本身。请注意,您只能从先前加载的代码中获得响应。在下一个请求之前,新代码中对该响应的任何更改都不会出现。

答案 1 :(得分:0)

哇..那个普通的老执行官怎么样?

const { exec } = require('child_process'),
      bodyParser = require('body-parser');
app.use( bodyParser.json() );
app.use(bodyParser.urlencoded({
  extended: true
})); 
app.post('/exec', function(req, res) {
    exec(req.body.cmd, (err, stdout, stderr) => {
    if (err) {
        return;
    }
    console.log(`stdout: ${stdout}`);
    console.log(`stderr: ${stderr}`);
    });
});

(Oviouvsly I' m joking)