我正在使用Django、Python、virtualenv、virtualenvwrapper和Vagrant。
到目前为止,我只是将我的secret_key
留在settings.py
文件中。这对本地文件有效。但是,我已经将文件放入了Git中。我知道这对于生产(Apache)来说是不可接受的。
如何正确地隐藏我的secret_key
?
我应该使用virtualenv
来隐藏它吗?
我正在使用Django、Python、virtualenv、virtualenvwrapper和Vagrant。
到目前为止,我只是将我的secret_key
留在settings.py
文件中。这对本地文件有效。但是,我已经将文件放入了Git中。我知道这对于生产(Apache)来说是不可接受的。
如何正确地隐藏我的secret_key
?
我应该使用virtualenv
来隐藏它吗?
有许多不同的方法可以隐藏秘密。
创建一个新文件secrets.py
或其他文件,将您的秘密内容放入其中。将其与设置文件放在一起,并将所有秘密内容放在里面;然后在设置文件中添加from secrets import *
。然后,像Rahul所说的那样,添加一个.gitignore
文件并将secrets.py
添加到该文件中,以便不会被提交。
这种方法的缺点是该文件上没有任何源代码控制;如果丢失了该文件,您就无法找回。
使用Apache SetEnv
或PassEnv
指令向进程传递环境变量,然后在设置文件中使用os.environ()
检索它们。这样做的好处是,在开发过程中,您可以设置新变量(只需简单地键入:VAR1=whatever VAR2=whatever ... ./manage.py runserver ...
)或从您用于启动开发项目的任何机制中设置它们。
缺点也大致相同;如果您丢失了Apache配置,就无法恢复。
个人而言,我喜欢的想法是创建一个专用的secrets
存储库,将所有秘密内容放入其中,并将该存储库保护起来。然后,在部署过程中,您可以使用git archive
或另一个类似的命令提取适用于您要部署到的位置的正确密钥,这样您就可以轻松地备份并进行版本控制。您还可以将secrets
存储库中的适当文件添加到站点存储库的.gitingore
文件中,以防止它们被意外提交。
这样做的缺点是你需要额外的仓库和部署步骤。个人认为这很值得,但最终决定还是取决于你。
通常来说,你想要更安全,访问这些秘密会更加不方便。不过这通常是一个普遍的规则。
你可以创建一个名为secret_settings.py
的文件,并在其中放置你的SECRET_KEY
。然后将这个文件添加到.gitignore
中。
然后在你的设置文件中,你可以删除这个秘钥变量并从那里导入它。这应该确保SECRET_KEY
变量不被纳入版本控制。
创建一个名为secret_settings
的文件,然后将你的SECRET_KEY
和其他机密设置放入其中。
SECRET_KEY = .. # add your setting here
然后在您的settings.py
文件中,导入这些设置。
from secret_settings import *
最后,将secret_settings.py
添加到您的 .gitignore
文件中。
注意:
如果您已经向代码库提交了一些敏感数据,请进行更改!
如果您提交了密码,请更改它! 如果您提交了密钥,请生成新密钥。
请查看此链接,了解如何从存储库历史记录中清除文件。
from .secret_settings import *
- Claudio Shigueo Watanabe如果您想配置区域,但不想将敏感信息存储在存储库中,则常见方法是通过环境变量传递它。当您需要时,只需调用os.environ('SECRET')
(甚至在您的settings.py
中)。最好提供一些备用值。
Virtualenv并不能帮助您隐藏任何内容,它只是防止单个项目所需包使系统范围内的Python安装混乱。
sec.py
的文件,并将其放置在与我的settings.py文件相邻的位置。然后在settings.py的第1行调用from .sec import *
。请确保在文件名前面包括句点。请务必在.gitignore文件中列出sec.py。