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