正如标题所暗示的,我一直在尝试使用 Amazon 的新 OpsWorks 管理系统部署应用程序,但是我无法弄清楚如何让节点服务器开始在实例上运行。从应用程序层也可以访问的端口我假设我需要在端口 80 上进行侦听,但是我觉得问题在于没有启动正确的文件。
与 Heroku 上的 Procfile 类似,是否需要包含一个特殊的启动脚本类型文件才能让 OpsWorks 正确启动它?
请注意,我还没有使用 Chef 的经验,所以我希望让它使用默认选项,即不编写自定义 Chef 食谱来做到这一点。
正如标题所暗示的,我一直在尝试使用 Amazon 的新 OpsWorks 管理系统部署应用程序,但是我无法弄清楚如何让节点服务器开始在实例上运行。从应用程序层也可以访问的端口我假设我需要在端口 80 上进行侦听,但是我觉得问题在于没有启动正确的文件。
与 Heroku 上的 Procfile 类似,是否需要包含一个特殊的启动脚本类型文件才能让 OpsWorks 正确启动它?
请注意,我还没有使用 Chef 的经验,所以我希望让它使用默认选项,即不编写自定义 Chef 食谱来做到这一点。
我花在这方面的时间令人尴尬,但无论如何我都会分享,希望能挽救其他人的生命,否则这些时间会被亚马逊偷走。
process.env
选择端口号的方法,请将您的侦听端口更改为 80(或 443,如果合适)。main
文件是什么。重命名它server.js
并将其放在应用程序的根目录中。那是 monit 尝试运行的文件。希望这会有所帮助。如果没有,或者所有这些都很明显,我为我的愚蠢道歉并责怪睡眠不足。:)
ZachRabbit 的好答案。我想补充一点,OpsWorks 现在支持为已部署的应用程序进程设置环境变量(即 process.env.PORT)。
当您添加应用程序(或编辑)时,如果您在 server.js 中使用类似以下内容,则可以继续使用 PORT 键和 80 值设置环境变量:
!/usr/bin/env node
var debug = require('debug')('my-app');
var app = require('app');
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
有关环境变量设置的更多信息,请参见此处:
http://docs.aws.amazon.com/opsworks/latest/userguide/apps-environment-vars.html
确保文件名是 server.js 并将环境变量 PORT 设置为 80 对我来说就像一个冠军。
只需复制 AWS OpsWorks 页面以配置 node.js 应用程序:
“默认情况下,我们希望您的 Node.js 应用程序侦听端口 80。此外,我们传递给节点的文件必须命名为“server.js”,并且应该位于应用程序的根目录中。”
问候。
可能有点跑题了,但我花了几个小时在这上面,所以我认为值得分享:
在 OpsWorks 上设置Hapi.js服务器时,我必须确保没有使用 hostname localhost
,而是将其设置为0.0.0.0
. 否则它只是默默地失败。
希望对任何人都有帮助。
我也玩了一会儿,希望我的成功之路能帮助别人。Node.js 通常需要提升权限才能在端口 80 上运行,所以我发现虽然命名示例应用 app.js 很好,但您需要修改默认 OpsWorks Node.js 部署厨师配方的第 2 行以使用 sudo: