虽然我的理解是使用环境变量来配置不同部署环境中的应用程序是最佳实践,但我不知道管理这些环境并在其中填充变量的好方法。
以下是我正在考虑的方法:
在我们用来运行应用程序的Upstart脚本中填充它们。我们使用Ansible来配置我们的服务器,这些服务器当前通过静态新贵的脚本进行复制,但是可以使用环境变量进行模板化。
采用相同方法但/etc/environment
使用类似envdir
的内容,再次使用ansible填充文件。
另一个问题是存储价值的地方,我在考虑redis,但我愿意接受建议。 Ansible有一个“Vault”,我还没有看到它可能是一个选项。
这些值类似于API密钥和数据库URL。
我真的只是想知道其他人使用什么方法。我对所有建议持开放态度。
答案 0 :(得分:3)
我认为这个问题会征求很多意见,可能还会提出很多相互矛盾的意见,但就这些问题说的是我的一些观点:
/etc/environment
是操作系统的一部分,用于配置交互式用户shell。不要将它用于应用程序。/etc/myapp/config
,这对于许多程序来说已经有好几十年了。整个环境 - 变量 - 优于配置文件的位置实际上更多来自PaaS视角(heroku我相信通过他们的12因素应用程序网站推广这种方法)。因此,如果您的部署是PaaS或PaaS风格,那么环境很方便。但是,如果您通过Ansible在自己的服务器上安装您的应用程序,恕我直言,直接配置文件更容易进行故障排除,原因我在我的博客文章中列出environment variables considered harmful