如何使用 virtualenv 和 Django 隐藏我的 secret_key?
How to I hide my secret_key using virtualenv and Django?
我正在使用 Django, python, virtualenv, virtualenvwrapper 和 Vagrant.
到目前为止,我只是将 secret_key
留在了 settings.py
文件中。
这适用于本地文件的文件。但是我已经将我的文件放在 Git 中。我知道这对于生产来说是不可接受的(Apache)。
隐藏我的 secret_key
的正确方法是什么?
我应该使用virtualenv
来隐藏它吗?
常见的做法是,如果您想配置区域,但又不想在 repo 中存储敏感信息,则通过环境变量传递它。当您需要它时,只需调用 os.environ('SECRET')
(即使在您的 settings.py
中)。最好有一些回退值。
Virtualenv 不会帮助你隐藏任何东西,它只是防止你系统范围内的 Python 安装被 one-project-required-packages 乱扔垃圾。
您可以创建一个名为 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
文件。
注:
如果您已经向您的存储库提交了一些敏感数据,请更改它!
根据Github website in the removing sensitive data article:
If you committed a password, change it! If you committed a key,
generate a new one.
检查此 link 以了解如何从存储库的历史记录中清除文件。
隐藏秘密的方法有很多种。
使用另一个非版本控制的文件。
创建一个新文件 secrets.py
或者你有什么,然后把你的秘密放在里面。把它放在你的设置文件旁边,把所有的秘密都放在那里;然后在您的设置文件中将 from secrets import *
放在顶部。然后像Rahul说的那样,添加一个.gitignore
文件,在这个文件中添加secrets.py
,这样就不会被commit了。
这种方法的缺点是该文件根本没有源代码控制;如果你失去了它,你就是 SOL。
使用环境变量。
使用 Apache SetEnv
or PassEnv
directives 将环境变量传递给您的进程,然后在您的设置文件中使用 os.environ()
检索它们。这样做的好处是,在开发中,您可以设置新变量(就像 VAR1=whatever VAR2=whatever ... ./manage.py runserver ...
一样简单)或从您用于启动开发项目的任何机制中设置它们。
缺点大致相同;如果您丢失了 Apache 配置,那您就完蛋了。
结合方法 1 使用第二个存储库。
就我个人而言,我喜欢拥有一个专用的 secrets
存储库的想法,您可以将所有秘密放入其中,并妥善保管该存储库。然后,作为部署过程的一部分,您可以使用 git archive
或其他类似命令为您要部署到的位置提取正确的密钥,并且您可以轻松备份您的秘密并使其处于版本控制之下。您还可以将 secrets
存储库中的适当文件添加到站点存储库的 .gitingore
文件中,这样它们就不会被意外提交。
这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这真的取决于你。
一般来说,您希望它越安全,访问这些秘密就越不方便。不过,这确实是一般规则。
我使用的解决方案是创建一个文件 sec.py
并将其放在我的 settings.py 文件旁边。然后在 settings.py 的第 1 行调用 from .sec import *
。请务必在文件名前加上句点。请务必在您的 .gitignore 文件中列出 sec.py。
我正在使用 Django, python, virtualenv, virtualenvwrapper 和 Vagrant.
到目前为止,我只是将 secret_key
留在了 settings.py
文件中。
这适用于本地文件的文件。但是我已经将我的文件放在 Git 中。我知道这对于生产来说是不可接受的(Apache)。
隐藏我的 secret_key
的正确方法是什么?
我应该使用virtualenv
来隐藏它吗?
常见的做法是,如果您想配置区域,但又不想在 repo 中存储敏感信息,则通过环境变量传递它。当您需要它时,只需调用 os.environ('SECRET')
(即使在您的 settings.py
中)。最好有一些回退值。
Virtualenv 不会帮助你隐藏任何东西,它只是防止你系统范围内的 Python 安装被 one-project-required-packages 乱扔垃圾。
您可以创建一个名为 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
文件。
注:
如果您已经向您的存储库提交了一些敏感数据,请更改它!
根据Github website in the removing sensitive data article:
If you committed a password, change it! If you committed a key, generate a new one.
检查此 link 以了解如何从存储库的历史记录中清除文件。
隐藏秘密的方法有很多种。
使用另一个非版本控制的文件。
创建一个新文件
secrets.py
或者你有什么,然后把你的秘密放在里面。把它放在你的设置文件旁边,把所有的秘密都放在那里;然后在您的设置文件中将from secrets import *
放在顶部。然后像Rahul说的那样,添加一个.gitignore
文件,在这个文件中添加secrets.py
,这样就不会被commit了。这种方法的缺点是该文件根本没有源代码控制;如果你失去了它,你就是 SOL。
使用环境变量。
使用 Apache
SetEnv
orPassEnv
directives 将环境变量传递给您的进程,然后在您的设置文件中使用os.environ()
检索它们。这样做的好处是,在开发中,您可以设置新变量(就像VAR1=whatever VAR2=whatever ... ./manage.py runserver ...
一样简单)或从您用于启动开发项目的任何机制中设置它们。缺点大致相同;如果您丢失了 Apache 配置,那您就完蛋了。
结合方法 1 使用第二个存储库。
就我个人而言,我喜欢拥有一个专用的
secrets
存储库的想法,您可以将所有秘密放入其中,并妥善保管该存储库。然后,作为部署过程的一部分,您可以使用git archive
或其他类似命令为您要部署到的位置提取正确的密钥,并且您可以轻松备份您的秘密并使其处于版本控制之下。您还可以将secrets
存储库中的适当文件添加到站点存储库的.gitingore
文件中,这样它们就不会被意外提交。这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这真的取决于你。
一般来说,您希望它越安全,访问这些秘密就越不方便。不过,这确实是一般规则。
我使用的解决方案是创建一个文件 sec.py
并将其放在我的 settings.py 文件旁边。然后在 settings.py 的第 1 行调用 from .sec import *
。请务必在文件名前加上句点。请务必在您的 .gitignore 文件中列出 sec.py。