将机密存储在与DigitalOcean上的docker运行的Django应用程序中

问题描述

我很好奇在服务器上的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'

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...