【问题标题】:Store secrets in a Django application running with docker on a DigitalOcean在 DigitalOcean 上使用 docker 运行的 Django 应用程序中存储机密
【发布时间】:2020-08-18 12:06:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: docker deployment docker-compose digital-ocean django-3.0


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。看来我只需要选择在我的服务器上设置这个 env 文件的方式。
    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2020-12-19
    相关资源
    最近更新 更多