【发布时间】:2018-01-08 13:43:09
【问题描述】:
背景
我们的应用使用 MySQL 数据库和更多服务。
为了将我们的应用程序连接到这些服务器,我们将用户名和密码保存在 prod.config 文件中。如果我们在 dev 中,我们使用 dev.config 文件等等...
最近,我一直在研究行业中的良好实践(例如https://12factor.net/),其中大多数(如果不是全部)指定连接数据库和其他服务的用户名和密码等信息应该不在配置文件中,而是在 ENV 变量中。
如果您不知道 12 因子规格是什么,您可以查看此免费教程:
问题
现在,起初这看起来不错。 Travis 或 CircleCI 等许多 CI 工具已经强制你这样做了。这里的问题是当您最小的应用程序使用多个服务时。
在我们的例子中,对于我们最小的应用程序,我们需要 13 个 ENV 变量。不在任何特定文件中的变量,它们都必须在它们运行的机器的 ENV 中。
我不明白这怎么能被视为一种好的做法。我理解不推送包含所有这些敏感数据的配置文件的主要想法,但这种方法会带来几个问题:
- 当机器重新启动时,您会丢失所有 ENV 变量。
- 如果您想避免前面的问题,您需要在机器启动时运行一个脚本来设置这些变量,这意味着您会将它们存储在一个文件中,从而违背了整个目的。
- 您将这些变量保存在哪里?他们需要在你这个脆弱的脑袋之外的其他地方!
问题
- 如何解决之前的问题?
- 为什么将私有信息保存在 ENV 变量中是个好主意?
【问题讨论】:
标签: 12factor