隐藏 Heroku Django 部署的 settings.py 密码

Posted

技术标签:

【中文标题】隐藏 Heroku Django 部署的 settings.py 密码【英文标题】:Hiding settings.py passwords for Heroku Django deployment 【发布时间】:2013-10-05 00:04:51 【问题描述】:

我在 settings.py 中有敏感数据(数据库密码),建议我先将我的 Django 项目上传到 github 存储库,然后再将其推送到 Heroku 上的“Heroku 上的 Django 入门”。如果我将 settings.py 放在 .gitignore 中,那么它可能不会与我的项目一起部署。如何防止 settings.py 被暴露但仍将其与我的项目一起部署?

【问题讨论】:

你可以使用不同的分支,见***.com/questions/10475273/…。 谢谢,我想到了,但听起来很乏味。我想我找到了最好的方法,那就是使用 Heroku 的环境变量,如 devcenter.heroku.com/articles/s3 ,然后使用 os.config["variableName"] 来检索 settings.py 中的值。很惊讶这不是一个更适合谷歌的问题......也许这会有所帮助 你不需要推送到github,只需要推送到git。它甚至可以是一个没有任何远程的本地 git 存储库。在“入门”中,他们只是建议在系统范围内安装 github .gitignore。 【参考方案1】:

您可以使用环境变量(heroku config:add SECRET=my-secret)来设置敏感数据并在您的设置中检索它们:

SECRET = os.environ.get('SECRET', 'my-default-secret-key')

如果您不想在没有设置一些数据的情况下启动您的应用,请改用以下语法:

SECRET = os.environ['SECRET']

如果您没有设置SECRET 环境变量,它将引发异常。

【讨论】:

但是,我在任何地方都找不到语法 os.env,我相信它是:os.environ["HOME"]【参考方案2】:

您应该使用专为提取敏感数据而设计的工具。我使用 YamJam https://pypi.python.org/pypi/yamjam/ 。它具有 os.environ 方法的所有优点,但更简单——您仍然需要设置这些环境变量,您需要将它们放在某个脚本/rc 文件中。 YamJam 消除了这些问题,并将这些配置设置存储在项目外部的配置存储中。这使您可以对开发、登台和生产进行不同的设置。

  from YamJam import yamjam

  secret = yamjam()['myproject']['secret']

是基本用法。和 os.environ 方法一样,它不是特定于框架的,您可以将它与 Django 或任何其他应用程序/框架一起使用。我已经尝试了所有这些,多个 settings.py 文件,if/then 的脆弱逻辑和环境争论。最后还是换了yamjam,没有后悔。

【讨论】:

这种方法比创建环境变量要容易得多,并且使事情更有条理,感谢您的回答!

以上是关于隐藏 Heroku Django 部署的 settings.py 密码的主要内容,如果未能解决你的问题,请参考以下文章

Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku

在 Heroku 上部署 Django\Tornado

在heroku上部署django网站时出错

在 Heroku 上部署 React 和 Django

Heroku/Django 部署:为啥我在成功部署和静态收集时收到错误 500?

heroku 在每次部署期间不断安装 django 包