我真的很难在我的django settings.py中隐藏我的敏感材料。我尝试为本地和生产创建一个单独的设置文件here 人建议然后中途停止。我还尝试在我的核心文件中创建一个名为secrets.py的文件,其中我的wsgi和设置等等,并试图这样做
DEBUG = True
if DEBUG:
from .secrets import SECRET_KEY_LO
this = SECRET_KEY_LO
SECRET_KEY = this
else:
SECRET_KEY = os.environ['SECRET_KEY']
但那并没有奏效。什么是专业编程方式呢?因此,我不必手动将DEBUG true更改为DEBUG false,因为它感觉非常新手并且可能非常烦人
答案 0 :(得分:1)
看看django-configurations。它内置支持输入非秘密的默认值,然后在Prod中使它们变得必需和不同。这些值是通过环境变量提供的,因此它会将问题向下移动一点。
一旦你在那里获得了良好的价值进行测试,你就会遇到如何保密秘密值的部署问题。每个PAAS似乎都有自己的版本,就像许多配置管理(Chef,Puppet,Salt,Ansible等)系统一样。我发现的最好的一个是在AWS部署中使用credstash。您在服务器上的启动脚本只需要调用credstash get
,然后将这些值作为ENV变量传递给gunicorn / uwsgi / whatever,然后django-configurations选择它们并应用它们。这显然取决于AWS,因此它取决于您部署的位置,但基本思想仍然相同。获取秘密值并通过ENV将其提供给您的服务。
+1在检查秘密值之前考虑整个问题。通常,在github上为这些事情做一些google dorking非常容易。
答案 1 :(得分:0)
您可以使用config.json
文件来保留所有秘密。您可以将此文件添加到.gitignore
,以便它不会上传到云中的存储库(例如GitHub)。
然后,您可以使settings.py
文件读取config.json
文件,并开始将值分配给所需的Python变量。
答案 2 :(得分:0)
Two scoops of django,关于Django最佳实践的最有价值的文本之一以下列方式解释了这个问题:您应创建一个settings
目录,在该目录中保留{{1}的设置文件层次结构彼此。然后,您将使用import
开关启动django,并在--settings
中配置设置文件。
然后,您构建一个文件(例如wsgi.py
),其中仅包含密钥(API密钥等),并local_secret.py
剩余文件中的其余设置。您将import
保留在代码存储库之外(例如,使用local_secrets.py
)。
This question has an answer by omouse and gene_wood更为详细。这个问题是关于本地和生产环境而不是秘密密钥,请牢记这一点。