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

问题描述:

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

我一直在寻找haibunodester,但他们似乎有点复杂,我想要做的。

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

+0

我并不完全相信你的项目的范围是,但它会利用每个应用站点配置文件的选项?您可以为“siteConfig.js”文件中的每个应用程序指定端口并将其导入到服务器文件中,这是组织事物的一种方式(请参阅https://github.com/mape/node-express-boilerplate)。这可能会处理端口部分,但不一定会为您提供所有应用程序的管理解决方案。 – 2012-03-05 04:50:29

+0

让我解释一下我的工作流程。在我们的服务器上运行Apache,我将为我们开发的每个节点应用程序设置一个反向代理。现在这些是低流量的应用程序,所以我想在同一台服务器上运行它们。 – 2012-03-05 17:51:32

我用Supervisord & Monit,更多的细节和配置实例这里:Process Management at Bringr

此外,您可以直接从supervisord配置文件中指定环境变量(请参阅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) 

随着process.env.NODE_ENV在〜/ .bashrc声明。

+0

感谢您撰写这篇博文,它非常详细。所以你会管理supervisord配置中的端口:[program:myapp] command = node myapp.js 3000,[program:myapp2] command = node myapp.js 3001,etc? – 2012-03-06 14:31:06

+0

编辑的答案,希望它回答你的问题。我个人更喜欢保持supervisord配置文件尽可能小,并保持变化的位/ env。 * .json配置文件中的变量。 – FGRibreau 2012-03-06 21:21:43

如果你的服务器有暴发户,就使用它。我永远都没有运气,而且相似。 如果你想与新贵继续,roco将作为部署解决方案不错:

roco deploy:setup:upstart 
roco deploy 
+0

哦,所以在roco脚本中,我只是定义所有的端口? – 2012-03-05 17:33:46

+0

是的,描述你需要的一切:至少端口和服务器名称。 – Anatoliy 2012-03-20 11:20:52

我们一直在努力改善Nodejitsu foreverhaibu。似乎您在此寻找的方法是针对复杂选项的.forever配置文件。这个功能已经在我们的积压,而现在

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

检查回来。在下一轮性能改进之后,我认为它是非常重要的。

+0

很高兴知道“永远”仍在支持! 'npm'软件包有一段时间没有更新,除非我错过了它。谢谢! – btleffler 2012-03-09 13:42:38

+0

感谢您的输入。那么最好创建一个管理脚本,在每个应用程序中生成.forever配置文件? – 2012-03-09 17:23:27

我写了一个应用程序nodegod,我用于少数部署可能10应用程序每个。

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

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

  • 当您部署在rsync上时,应用程序会自动重启。

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

  • 我使用的HTTP代理叉子在快递的情况下的转换的前面,因此,任何数量的应用程序可以共享每个DNS单个服务器端口,用于HTTP和网络套接字。

我写了一个haraldops模块从源代码树外部读取应用程序配置。有了这个,你可以随时随地监控和收到电子邮件。

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

这不是火箭科学,它们都很好地融合在一起。只有节点json:SIMPLE完成得更多。

+0

听起来不错我会试试看 – 2012-08-29 15:06:46

这几天我已经采取使用dokku这是一个OSS的heroku克隆。部署与确保package.json包含启动脚本一样简单。例如:

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

Sample App