如何使用virtualenv和Django隐藏我的secret_key?

Jon*_*edy 8 python django virtualenv

我正在使用Django,python,virtualenv,virtualenvwrapperVagrant.

到目前为止,我只是secret_keysettings.py文件留在文件内部.这适用于本地文件.但是我已经将我的文件放在Git中了.我知道这对于生产来说是不可接受的(Apache).

隐藏我的正确方法是什么secret_key

我应该virtualenv用来隐藏吗?

Ale*_*iew 7

隐藏秘密有很多不同的方法.

  1. 使用另一个非版本化文件.

    创建一个新文件secrets.py或你有什么,并把你的秘密.将它放在您的设置文件旁边,并将所有内容保密; 然后在你的设置文件中放在from secrets import *顶部.然后,像Rahul说的那样,添加一个.gitignore文件并添加secrets.py到该文件中,以便它不会被提交.

    这种方法的缺点是该文件根本没有源代码控制; 如果你输了,那你就是SOL.

  2. 使用环境变量.

    使用Apache SetEnvPassEnv指令将环境变量传递给您的进程,然后os.environ()在您的设置文件中检索它们.这样做的优点在于,在开发过程中,您可以设置新变量(简单地说VAR1=whatever VAR2=whatever ... ./manage.py runserver ...),或者从用于启动开发项目的任何机制中设置它们.

    缺点大致相同; 如果你失去了你的Apache配置,你就会受到伤害.

  3. 将第二个存储库与方法1结合使用.

    就个人而言,我喜欢有一个专用的secrets存储库,你把所有的秘密放入并保持锁定和密钥的存储.然后,作为部署过程的一部分,您可以使用git archive或其他类似命令为您要部署的位置提取正确的密钥,并且可以轻松备份您的机密并在版本控制之下.您还可以将secretsrepo中的相应文件添加到.gitingore站点存储库的文件中,以便不会意外地提交它们.

    这样做的缺点是您有另一个额外的存储库和另一个部署步骤.我个人认为这是值得的,但这完全取决于你.

一般来说,你想要的越安全,访问这些秘密就越不方便.不过,这通常是一个规则.


Rah*_*pta 5

您可以创建一个名为的文件,secret_settings.py并将其放置SECRET_KEY在该文件中。然后将此文件添加到中.gitignore。然后,在您的设置中,您可以删除密钥变量并从那里导入它。这应该确保SECRET_KEY变量保持不受版本控制。

创建一个名为的文件secret_settings,然后将您的SECRET_KEY秘密设置和其他秘密设置放入其中。

SECRET_KEY = .. # add your setting here
Run Code Online (Sandbox Code Playgroud)

然后在settings.py文件中,导入这些设置。

from secret_settings import *
Run Code Online (Sandbox Code Playgroud)

最后,添加secret_settings.py到您的.gitignore文件。

注意:

如果您已经将一些敏感数据提交到您的仓库中,请进行更改!

根据Github网站上的删除敏感数据文章

如果您输入了密码,请更改它!如果提交了密钥,请生成一个新密钥。

检查此链接,了解如何从存储库的历史记录中清除文件。