假设我在生产服务器上有一个nodejs / express应用程序。如果我想添加一个新的路由器,我必须重启一个,对吗?但是,如果我重启我的node.js服务器,那么用户可能会收到错误。
那么我应该如何重启我的node.js服务器而不会给我的用户带来错误呢?
答案 0 :(得分:9)
如果您使用Nginx代理您的Node.js应用程序,您可以告诉您的Node应用程序在套接字上侦听,然后只有在新服务器正确启动时关闭旧服务器;一旦旧服务器关闭,Nginx将把请求路由到服务器的新实例。这就是流行的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.");
});
答案 1 :(得分:0)
我想答案是首先测试一个临时服务器中的所有内容(即您计划部署的代码的精确副本,紧邻现有生产代码)并选择低流量时间并只需将目录切换新的。
如果出现问题,请将其切换回来。
但实际的"停机时间"将只是一秒钟,除非当前正在提供某人的请求,否则他们不会收到错误。
那就是说,我自己从未尝试过,我很想知道最好的答案是什么! 好问题!