14

正如标题所暗示的,我一直在尝试使用 Amazon 的新 OpsWorks 管理系统部署应用程序,但是我无法弄清楚如何让节点服务器开始在实例上运行。从应用程序层也可以访问的端口我假设我需要在端口 80 上进行侦听,但是我觉得问题在于没有启动正确的文件。

与 Heroku 上的 Procfile 类似,是否需要包含一个特殊的启动脚本类型文件才能让 OpsWorks 正确启动它?

请注意,我还没有使用 Chef 的经验,所以我希望让它使用默认选项,即不编写自定义 Chef 食谱来做到这一点。

4

5 回答 5

28

我花在这方面的时间令人尴尬,但无论如何我都会分享,希望能挽救其他人的生命,否则这些时间会被亚马逊偷走。

  • 要回答你的问题,是的,我确实让我的 node/express 应用程序运行了。
  • 如果您使用任何一种process.env选择端口号的方法,请将您的侦听端口更改为 80(或 443,如果合适)。
  • 最重要的是,亚马逊并不关心你的main文件是什么。重命名它server.js并将其放在应用程序的根目录中。那是 monit 尝试运行的文件。

希望这会有所帮助。如果没有,或者所有这些都很明显,我为我的愚蠢道歉并责怪睡眠不足。:)

于 2013-02-21T05:45:06.190 回答
4

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 对我来说就像一个冠军。

于 2014-12-01T22:01:19.000 回答
1

只需复制 AWS OpsWorks 页面以配置 node.js 应用程序:

“默认情况下,我们希望您的 Node.js 应用程序侦听端口 80。此外,我们传递给节点的文件必须命名为“server.js”,并且应该位于应用程序的根目录中。”

问候。

于 2013-09-29T04:39:44.003 回答
0

可能有点跑题了,但我花了几个小时在这上面,所以我认为值得分享:

在 OpsWorks 上设置Hapi.js服务器时,我必须确保没有使用 hostname localhost,而是将其设置为0.0.0.0. 否则它只是默默地失败。

希望对任何人都有帮助。

于 2014-10-08T20:16:35.987 回答
0

我也玩了一会儿,希望我的成功之路能帮助别人。Node.js 通常需要提升权限才能在端口 80 上运行,所以我发现虽然命名示例应用 app.js 很好,但您需要修改默认 OpsWorks Node.js 部署厨师配方的第 2 行以使用 sudo:

于 2013-02-21T18:23:35.107 回答