【问题标题】:Launching Node.js app on OpsWorks在 OpsWorks 上启动 Node.js 应用程序
【发布时间】: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 环境变量。然后通过&lt;%= @deploy[:deploy_to] %&gt;/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


【解决方案1】:

使用 AWS opsworks nodejs 层,您应该能够在应用注册期间设置环境变量。你应该看到这样的部分:

在应用设置下:

您可以在其中设置要包含在部署中的所有变量。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2021-12-31
    • 1970-01-01
    • 2015-08-18
    • 2014-02-27
    • 2014-04-07
    • 2015-02-04
    • 2013-01-20
    • 2013-05-29
    相关资源
    最近更新 更多