如何在不导致停机的情况下部署 Node.js 应用程序

Posted

技术标签:

【中文标题】如何在不导致停机的情况下部署 Node.js 应用程序【英文标题】:How to deploy Node.js app without causing downtime 【发布时间】:2016-07-23 23:22:33 【问题描述】:

我的 Node.JS 应用程序通过 forever daemon 在生产服务器上运行:

forever start -w --watchDirectory=/path/to/app \
--watchIgnore=/path/to/app/node_modules/** /path/to/app/server.js

当我更改/path/to/app/ 目录中的文件内容时,该过程由forever 重新启动。虽然重新启动大约需要 2-3 秒,但该应用程序不可用,因此每次我部署新更改时都会发生停机。假设我对服务器具有完全访问权限,如何防止停机?

【问题讨论】:

【参考方案1】:

您可以使用 HTTP 负载平衡器手动执行此操作,因此您将创建两个或多个只能由负载平衡器访问的后端(负载平衡器只能通过公共地址访问)。下一步是只更新一个服务器,而负载均衡器控制到一个后端(可用的)的流量。更新成功后,您可以打开更新的,并将负载均衡器重定向到正确的后端(更新的),重复该过程,两者都应该在不停机的情况下更新。

【讨论】:

谢谢。能否提供实现示例? digitalocean.com/community/tutorials/… 谢谢。 HAProxy 似乎是一个完美的选择。我已经按照教程找到了一个指向这个相关教程的链接,我发现它更合适:digitalocean.com/community/tutorials/… 据我了解,HAProxy 甚至会自动检测不可用的后端并将流量重定向到可用的后端,所以我只需要要做的是确保后端不会并行更新,您认为这是正确的吗? 当然,很好。是基本思想,随着时间的推移你会发现更优雅的方式。

以上是关于如何在不导致停机的情况下部署 Node.js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在不停机的情况下重命名现有列

如何在不使用 node.js 的情况下添加标准反应应用程序 [关闭]

如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?

如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?

如何在 Ubuntu 上停止 Node.js 并在不停止的情况下注销 [重复]

Node.js 应用程序无法部署到 Heroku