Python 如何使用virtualenv和Django隐藏我的密钥?
我正在使用Django,python,virtualenv,virtualenvwraper和Vagrant 到目前为止,我只是将我的Python 如何使用virtualenv和Django隐藏我的密钥?,python,django,virtualenv,Python,Django,Virtualenv,我正在使用Django,python,virtualenv,virtualenvwraper和Vagrant 到目前为止,我只是将我的secret\u密钥放在settings.py文件中。 这适用于本地文件。但是,我已经将文件放在了Git中。我知道这在生产中是不可接受的(Apache) 隐藏我的密钥的正确方法是什么 我应该使用virtualenv隐藏它吗?如果您想配置区域,但不想在repo中存储敏感信息,通常的方法是通过环境变量传递它。当您需要它时,只需调用os.environ('SECRET'
secret\u密钥
放在settings.py
文件中。
这适用于本地文件。但是,我已经将文件放在了Git中。我知道这在生产中是不可接受的(Apache)
隐藏我的密钥的正确方法是什么
我应该使用virtualenv
隐藏它吗?如果您想配置区域,但不想在repo中存储敏感信息,通常的方法是通过环境变量传递它。当您需要它时,只需调用os.environ('SECRET')
(即使在settings.py中也是如此)。最好有一些回退值
Virtualenv并没有帮助您隐藏任何东西,它只是防止系统范围内的Python安装被一个项目所需的软件包乱丢。您可以创建一个名为secret\u settings.py
的文件,并将secret\u KEY
放入该文件中。然后将此文件添加到。
然后在您的设置中,您可以删除secretkey变量并从中导入它。这应确保SECRET\u KEY
变量不受版本控制
创建一个名为secret\u settings
的文件,然后将您的secret\u密钥
和其他秘密设置放在其中
SECRET_KEY = .. # add your setting here
然后在settings.py
文件中导入这些设置
from secret_settings import *
最后,将secret\u settings.py
添加到.gitignore
文件中
注意:
如果您已经向回购协议提交了一些敏感数据,请更改它
根据以下网站:
如果您提交了密码,请更改它!如果你交了钥匙,
生成一个新的
有关如何从存储库的历史记录中清除文件的信息,请查看此项。隐藏机密的方法有很多种
使用另一个无版本的文件。
创建一个新文件secrets.py
或你拥有的任何东西,并将你的秘密放入其中。把它放在你的设置文件旁边,把所有的秘密都放在里面;然后在设置文件中,将“机密导入”*
中的放在顶部。然后,正如Rahul所说,添加一个.gitignore
文件,并将secrets.py
添加到此文件,这样它就不会被提交
这种方法的缺点是在该文件上根本没有源代码控制;如果你输了,你就是索尔
使用环境变量。
使用Apache将环境变量传递给进程,然后使用设置文件中的os.environ()
检索它们。这样做的好处是,在开发中,您可以设置新变量(简单地说就是VAR1=which VAR2=which../manage.py runserver…
),或者从启动开发项目所使用的任何机制中设置它们
缺点也差不多;如果您丢失了Apache配置,您将被解雇
结合方法1使用第二个存储库。
就我个人而言,我喜欢拥有一个专门的秘密
存储库的想法,你可以把所有的秘密都放进这个存储库中,并把回购协议锁起来。然后,作为部署过程的一部分,您可以使用git archive
或其他类似命令为部署到的位置提取适当的密钥,并且可以轻松地对机密进行备份和版本控制。您还可以将secrets
repo中的适当文件添加到站点存储库的.gitingore
文件中,这样它们就不会意外提交
这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这真的取决于你
一般来说,你想要的越安全,访问这些秘密就越不方便。不过,一般来说,这是一条规则 我使用的解决方案是创建一个文件sec.py
,并将其放在我的settings.py文件旁边。然后在settings.py的第1行从.sec import调用*
。确保在文件名前面包含句点。确保在.gitignore文件中列出sec.py。我不确定virtualenv可以用什么方式隐藏密钥。下面有两种方法。我只是想指出一个警告:如果你现在在回购协议中有你的钥匙,请更改你的钥匙@不过,只有当回购协议是公开的时候,这才是真正必要的。如果你的回购协议只在你的服务器上,没有其他人可以访问,那就没那么糟糕了。如果它在GitHub上作为公共回购,那就糟糕了。然而,没错,谁知道你将来会怎么做:)这个答案对我来说是最干净的方法@Rahul Gupta,部署时不需要密钥吗?对我来说,我需要在这部分中包含一个点:from.secret\u settings import*一旦从secrets import添加,如何访问settings.py中的变量?