在单个服务器上运行和管理nodejs应用程序

时间:2012-03-05 03:59:00

标签: node.js

是否有一种在单个服务器上运行和管理多个nodejs应用程序的好方法?

我一直在关注haibunodester,但对于我想要做的事情,它们似乎有点复杂。

我也在查看forever,我认为这可能适用于配置文件和web gui,但我不知道我将如何处理通过ENV或参数传递端口信息。

5 个答案:

答案 0 :(得分:6)

我使用Supervisord& Monit,更多详细信息和配置示例:Process Management at Bringr

此外,您可以直接从supervisord配置文件中指定environnement变量(请参阅sub-process environment)。但我个人更喜欢直接在每台机器的〜/ .bashrc中添加这些变量。

如果每个应用程序的端口号都不会改变(但在生产和开发环境之间进行更改)。我建议在config.json(或直接在package.json中)指定它们。并且config.json将为每个应用程序包含一个不同的端口号,具体取决于环境:

{
 myapp:{
  production:{port:8080},
  development:{port:3000}
 }
}

myapp.js内:

 var config = require('./config');
 app.listen(config.myapp[process.env.NODE_ENV].port)

在〜/ .bashrc中声明process.env.NODE_ENV

答案 1 :(得分:3)

我写了一个应用程序 nodegod ,我用它来进行少数部署,每部分可能有10个应用程序。

  • nodegod 从json中读取应用列表。它为每个应用程序配备了一个内部状态机,以安全的方式处理应用程序生命周期,包括重新启动,以及网页功能停止/启动/调试。

  • 网络界面使用网络套接字,因此您可以通过 ssh 管理远程服务器。

  • rsync 上部署时,应用会自动重启。

  • 因为 nodegod 监视其他应用的标准输出,您可以捕获应用程序的最终呼吸,如segfault和malloc错误。

  • 我在一系列快速实例前面使用了 http-proxy 的分支,因此任何数量的应用都可以为http和Web套接字共享每个dns的单个服务器端口。

我写了一个 haraldops 模块来从源树外部读取应用配置。有了它,只要有应用程序,你就可以监控并收到电子邮件。

应用程序配置我保存在文件系统中的git repo中。

这不是火箭科学,它们非常合适。只有节点 json :SIMPLE可以完成更多工作。

答案 2 :(得分:1)

如果您的服务器有upstart,请使用它。我没有永远和类似的运气。 如果您想继续使用upstart,roco将很好地作为部署解决方案:

roco deploy:setup:upstart
roco deploy

答案 3 :(得分:1)

我们一直在尝试改进Nodejitsu的foreverhaibu。看起来您在这里寻找的方法是一个用于复杂选项的.forever配置文件。此功能已暂停在我们的待办事项上

https://github.com/nodejitsu/forever/issues/124

回来看看。在下一轮性能改进之后,我认为这是非常优先的。

答案 4 :(得分:0)

这些天我已经开始使用dokku,它是heroku的OSS克隆。部署就像确保package.json包含启动脚本一样简单。例如:

"scripts": {
  "start": "node index.js"
}

Sample App