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

Store secrets in a Django application running with docker on a DigitalOcean

我很好奇在服务器上的 Django 应用程序中安全存储秘密(密码、密钥等)的最佳方法是什么。

之前,我将 Heroku 与 Git 一起使用,所有秘密都使用 Web 界面存储在 Heroku 的环境中。 然后我就可以使用 os.environ['secret_key'] 来获取秘密了。

现在我正在尝试使用 Docker-Compose 部署到 DigitalOcean 服务器。我读过 docker secrets,但它似乎不安全。

我也可以将它们存储在 JSON 文件中,但我不确定它是否也安全。大概吧,那它们应该被编码。

环境变量是存储应用程序机密的常见做法。也就是说,这些变量的值不应存在于您的 (source-controlled-) 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'