问题描述
我很好奇在服务器上的Django应用中安全存储秘密(密码,秘密密钥等)的最佳方法是什么。
以前,我将Heroku与Git一起使用,并且所有秘密都使用Web界面存储在Heroku的环境中。
然后,我可以使用os.environ['secret_key']
来获取机密。
现在,我正尝试使用Docker-Compose部署到DigitalOcean服务器。我已经读过有关docker secrets的信息,但它似乎并不安全。
我也可以将它们存储在JSON文件中,但是我不确定它是否也安全。大概应该对它们进行编码。
解决方法
环境变量是存储应用程序机密的常用方法。就是说,这些变量的值不应存在于您的(源代码控制的)docker-compose中。
要指定应将变量从主机传输到容器,只需使用不带值的变量名:
# docker-compose.yml
version: '3'
services:
web:
build: .
environment:
DATABASE_URL:
SECRET_KEY:
然后,您可以选择各种方法在服务器上使用这些变量。一种方法是使这些值带有.env
file。例如:
# .env
SECRET_KEY=123
DATABASE_URL=postgresql://admin:s3cr3tz@db/mydb
此文件当然不会提交到git存储库,并且会保密。
使用上面的docker-compose.yml
和.env
,您可以运行docker-compose config
来查看完整的输出:
$ docker-compose config
services:
web:
build:
context: /vagrant/temp
environment:
DATABASE_URL: postgresql://admin:s3cr3tz@db/mydb
SECRET_KEY: '123'
version: '3.0'