3

我一直在使用Node.jsand开发一个实时应用程序Socket.io,我想将它从本地测试阶段带到我们的一些用户中进行测试。问题是,如果我关闭与服务器的 ssh 会话,它也会停止我开始使用的服务器node app.js

我考虑过使用nohup,,但我偶尔会遇到分段错误或其他导致服务器停机的随机错误。我需要 1) 知道我的服务器何时(希望是为什么)崩溃,这样我就可以努力改进它以减少崩溃并确保它重新启动。此外,我不能 24/7 醒来自己重新启动服务器,所以有一些东西daemon会很可爱。

我发现forever可以通过 npm 获得,但它与更新的 Node 版本不兼容,0.8.x并且我正在运行0.9.1,而且它似乎没有得到很好的维护。

我也偶然发现了distributionand up,但似乎缺乏使用它们构建一个像样的应用程序的文档和示例。

cluster然后是使用andos模块的答案。https://stackoverflow.com/a/10997753/1883464

但 Node 将集群列为实验性http://nodejs.org/api/cluster.html

由于缺乏关于在真实生产环境中保持 Node 服务器正常运行(以及更新其代码!)的答案、示例和讨论,我开始觉得我是第一个想要将他们的应用程序部署到部署的人;) 不知何故,我确信这个问题有一些我没有找到的常见答案。

4

1 回答 1

2

操作系统提供的 init 系统提供了许多优于任何 Node.js 模块的优势。连接到 init 系统是确保您的应用程序在重新启动后自动启动的唯一方法。

我们使用 Ubuntu 和 Upstart 取得了很大的成功。Upstart 将在崩溃时重新启动您的应用程序,并且可以在运行您的进程之前设置用户 ID/组。不要以 Root 身份运行

编写 Upstart 文件有点痛苦,我们使用Node Foreman从我们的应用程序中自动生成和导出一组 upstart 文件Procfile

npm i -g foreman
cd MY_APP
nf export -o /etc/init

这会将一组新贵文件放入/etc/init其中,可以使用sudo start foreman和启动和停止sudo stop foreman

Upstart 不是这里唯一的解决方案,上面可以根据需要进行调整以适应其他操作系统。在 Redhat 上,我建议查看systemd. 我不建议使用 Mac OSX 进行生产,但在紧要关头它有launchd.

于 2013-02-08T17:02:51.847 回答