如何使用厨师将 opsworks 变量提取到 .env 文件中?

Posted

技术标签:

【中文标题】如何使用厨师将 opsworks 变量提取到 .env 文件中?【英文标题】:How can I pull opsworks variables into a .env file with chef? 【发布时间】:2015-08-18 12:05:32 【问题描述】:

我对厨师很陌生,并且正处于拼图的最后一块。我正在尝试使用在 AWS Opsworks 中设置的变量在我的项目根目录中创建一个 .env 文件。我一辈子都想不通。

有没有人对此有任何建议或有效的厨师食谱?我已经用谷歌搜索了我的智慧。

【问题讨论】:

您可以在 .env 配置中引用环境变量。查看此快速指南:mattstauffer.co/blog/… 我可能会错过它,但是这篇博文在哪里谈到将 opsworks 中设置的变量放入 .env 文件中? 【参考方案1】:

如果您使用的是 AWS*,通常不会使用 .env 文件。 .env 文件模拟实际在操作系统级别设置的环境变量,这对于您在本地开发或在不允许您自己设置的托管平台上很有用。

因此,您只需在 Opsworks 中为您的应用设置环境变量即可。这些将由 php 从操作系统加载,然后可供您的 Laravel 应用程序使用。

*这样做的原因是您通常在此处存储敏感数据,例如数据库和 API 凭据。您绝对希望将这些与您的代码分开并且不受源代码控制。

编辑:

如果需要,您可以在部署期间像这样编写一个 .env 文件。这将是您的 Chef 脚本的样子:

node[:deploy].each do |application, deploy|
  # write out .env file
  template "#deploy[:deploy_to]/current/.env" do
    source 'env.erb'
    mode '0660'
    owner deploy[:user]
    group deploy[:group]
    variables(
      :env => deploy[:environment_variables]
    )
  end
end

这就是您的 .env 文件模板的样子:

<% @env.each do |key, value| %>
<%= key %>=<%= value %>
<% end %>

【讨论】:

我有它们,但它们不工作。我没有使用 opsworks 内置的 Php,由于 nginx,我不得不使用自定义的 PHP。提供的 PHP 部署使用 Apache。所以我设置了它们并编写了代码以在 Laravel 中使用它们,但它没有。 哇,谢谢,太棒了。您是否有机会知道是否可以只运行一次?像迁移?我知道它的题外话 Laravel 迁移只会在开箱后运行一次 - 它会创建一个名为 migrations 的数据库表并跟踪已运行和未运行的内容。

以上是关于如何使用厨师将 opsworks 变量提取到 .env 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

Opsworks 厨师 12 道菜谱

在 AWS OpsWorks 中更改主机名(厨师)

是否可以从厨师AWS / Opsworks食谱中运行Ansible playbook?

Opsworks 自定义厨师食谱上的 Codeigniter ci_sessions

OpsWorks - 自定义食谱中包含的内容

AWS Opsworks 中的 Chef 环境