【发布时间】:2015-05-16 12:53:21
【问题描述】:
我无法让我的 OpsWorks 自定义配方启动我的节点应用程序。我刚刚开始学习 Chef 的基础知识,所以我可能遗漏了一些相当明显的东西。
为了让我开始,我复制了AWS nodejs cookbook 的副本并进行了非常小的更改。我还确定要复制节点部署脚本here。
我的层现在已完全配置,我可以通过 SSH 手动触发节点,但似乎在部署时它不是由 Ruby 脚本触发的。
我假设启动程序行(这是说明书中唯一可以看到节点正在启动的地方)没有运行:
check host node_web_app_<%= @application_name %> with address 127.0.0.1
start program = "/bin/bash -c 'cd <%= @deploy[:deploy_to] %>/current; source <%= @deploy[:deploy_to] %>/shared/app.env; /usr/bin/env PORT=<%= @deploy[:nodejs][:port] %> NODE_PATH=<%= @deploy[:deploy_to] %>/current/node_modules:<%= @deploy[:deploy_to] %>/current /usr/local/bin/node <%= @monitored_script %>' --NODE_ENV=prod"
stop program = "/usr/bin/pkill -f 'node <%= @monitored_script %>'"
<% if @deploy[:ssl_support] -%>
if failed port <%= @deploy[:nodejs][:port] %> type TCPSSL protocol HTTP
<% else -%>
if failed port <%= @deploy[:nodejs][:port] %> protocol HTTP
<% end -%>
request /
with timeout 10 seconds
then restart
所以我真的不知道为什么它不这样做。
这本部署指南似乎还没有完全完成。如果有人可以推荐更好的食谱,我会考虑更改。
谢谢。
【问题讨论】:
-
您应该能够在应用配置中设置 Opsworks 环境变量。然后通过
<%= @deploy[:deploy_to] %>/shared/app.env加载这些变量,无需直接在此脚本中设置环境变量。 -
谢谢@Yousef。我发现您可以通过将自定义 JSON 更改为 { deploy: { app_name: { environment_variables: { //put them here } } } 来覆盖它,但它似乎不起作用。我什至找不到可以覆盖它的示例自定义 JSON,而且文档也令人印象深刻。这让我讨厌 OpsWorks。
-
转到您的堆栈 --> 单击“应用程序”--> 导航到您的应用程序并点击“编辑”,然后您应该会看到带有键/值输入的“环境变量”部分。试试看,让我知道,否则我会添加屏幕截图。一旦掌握了窍门,您就会真正欣赏 opsworks。
-
哦,我认为它必须在自定义 JSON 值中。如果我可以直接注入它们,那就太好了。所以你是说如果我把monitored_script放在那些变量中它会生效吗?太好了。
-
我想接下来我需要确定的是如何将特定应用程序部署到特定层!一旦我解决了这个问题,一切都应该完美无缺。
标签: node.js amazon-web-services chef-infra aws-opsworks