Python 如何使用virtualenv和Django隐藏我的密钥?

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'

我正在使用DjangopythonvirtualenvvirtualenvwraperVagrant

到目前为止,我只是将我的
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中的变量?