我希望能够运行一个脚本,以尽可能少的手动步骤将我的应用程序部署到一个新服务器上,而无需向外界公开数据库密码。
该应用程序由一个web应用程序(nginx +定制的东西)和一个mysql数据库组成。我知道如何自动部署它,但并不是安全的:只需将根密码存储在docker和web应用程序的某个地方即可。显然,这一点根本不安全。
我知道如何安全地部署它:当前的mySQL文档建议部署默认的mySQL映像,grep生成的根密码,然后在容器中运行mysql,将这个密码更改为“您选择的密码”。然后,我想我必须将这个“我选择的密码”放在web应用程序配置中,这样我的web应用程序就能够连接到数据库了。
我不知道的是,推荐的自动和安全部署mySQL的方法是什么。我可以在部署过程中生成“我选择的密码”,但是如果我无论如何都要把密码放在信任中,那么使用一次性随机生成的mySQL密码又有什么意义呢?有人能告诉我最好的做法吗?
发布于 2019-10-10 12:53:19
请参阅环境变量的合成的官方指南。
您希望将您的docker-compose.yml提交到源代码管理中,因此密码不应该在其中。根据官方的码头枢纽上的mysql文档,您需要提供的主要变量是MYSQL_ROOT_PASSWORD。
实际上,他们的示例提供给带有docker run标志的-e命令:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag这可能会在日志中结束,因此我将其放入文件.env中,并在我的项目根目录中添加其他配置变量。
# .env
MYSQL_ROOT_PASSWORD=my-secret-pw然后在撰写文件中引用这个.env文件:
version: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
env_file:
- .env您还可以将行.env添加到项目中的.gitignore文件中,这样就不会意外地泄露秘密。
然后以另一种方式将.env文件部署到每个环境中。当然,一定要chmod 600 .env。
https://serverfault.com/questions/987447
复制相似问题