重新启动一个node.js生产服务器

假设我在生产服务器上有一个nodejs / express应用程序。 如果我想添加一个新的路由器,我必须重新启动一个,对吧? 但是,如果我重新启动我的node.js服务器,则用户可能会得到一个错误。

那么我应该如何重新启动我的node.js服务器,而不会出错呢?

如果使用Nginx代理Node.js应用程序,则可以告诉Node应用程序在套接字上侦听,然后只有在新服务器正确启动时才closures旧服务器; 一旦旧的服务器closures,Nginx会将请求路由到服务器的新实例。 这就是stream行的Ruby服务器Unicorn的工作原理。

在Nginx中,你可以像这样指定你的上游:

upstream node_server { server unix:/path/to/socket.sock; } server { ... location / { ... proxy_pass http://node_server; } } 

而在节点中,你可以用一个套接字来监听

 server.listen('/path/to/socket.sock', function() { console.log("Listening on socket."); }); 

我想,答案是首先在暂存服务器上testing所有的东西(例如,你打算部署的代码的一个确切的副本,就在现有的生产代码的旁边),然后select一个低stream量的时间,然后把目录切换到新的一。

如果有问题,请将其切换回来。

但实际的“停机时间”只是一秒钟,除非有人提出要求,否则不会出错。

这就是说,我从来没有尝试过这个,我很想知道最好的答案是什么! 好问题!