4

虽然我的理解是使用环境变量在不同的部署环境中配置应用程序是最佳实践,但我不知道管理这些环境并在其中填充变量的好方法。

以下是我正在考虑的方法:

  • 在我们用来运行我们的应用程序的 Upstart 脚本中填充它们。我们使用 Ansible 来配置我们的服务器,这些服务器当前通过静态 upstart 脚本进行复制,但是可以使用环境变量对其进行模板化。

  • 相同的方法,但使用/etc/environment

  • 使用类似的东西envdir并再次使用 ansible 来填充文件。

另一个问题是在哪里存储值,我在想 redis,但我愿意接受建议。Ansible 有一个“Vault”,我还没有查看它可能是一个选项。

这些值是 API 密钥和数据库 url 之类的东西。

我真的只是想知道其他人使用什么方法。我愿意接受所有建议。

4

1 回答 1

3

我认为这个问题会征求很多意见,并且可能会有很多相互矛盾的意见,但话虽如此,这里是我的一些意见:

  • /etc/environment是操作系统的一部分,用于配置交互式用户 shell。不要将其用于应用程序。
  • 通过 ansible 进行模板化的新贵配置对我来说似乎很合理。如果您打算在那里存储敏感数据,只需确保文件系统权限被适当地锁定为 root 只读。
  • 您还可以使用模板化的特定于应用程序的配置文件,例如/etc/myapp/config几十年来它在许多程序中运行良好。整个环境变量比配置文件更好的位置实际上更多地来自 PaaS 的角度(我相信 heroku 通过他们的 12 因素应用程序站点推广了这种方法)。因此,如果您的部署是 PaaS 或 PaaS 风格,则环境很方便。但是,如果您通过 Ansible 在您自己的服务器上安装您的应用程序,恕我直言,直接配置文件更容易排除故障,因为我在我的博客文章中概述的环境变量被认为是有害的
于 2014-05-22T07:19:17.030 回答