Skip to main content
 首页 » 编程设计

python之Django,织物 : What is the best way to manage secret keys to deploy Django projects

2025年05月04日29bonelee

现在我正在尝试将 SECRET_KEY 存储在环境变量中:

# settings/base.py 
 
def get_env_variable(var_name): 
    """ Get the environment variable or return exception """ 
    try: 
        return os.environ[var_name] 
    except KeyError: 
        error_msg = 'Set the {} environment variable'.format(var_name) 
        raise ImproperlyConfigured(error_msg) 
 
SECRET_KEY = get_env_variable('SECRET_KEY') 

而且我不知道应该如何使用 Fabric 部署我的项目:

@task 
def deploy(): 
    syncdb() 
    collectstatic() 
 
@task 
def collectstatic(): 
    dj('collectstatic') 
    with cd('{django_root}/static'.format(**env)): 
        fix_permissions() 
 
@task 
def syncdb(): 
    dj('syncdb') 
 
@task 
def dj(command): 
    run('{virtualenv_dir}/bin/python {django_root}/manage.py {dj_command}'.format(dj_command=command, **env)) 

在这种情况下,哪种设置环境变量的方法最好? 我真的很想自动制作并多次使用这个 fabscript。同时,我不想将 secret 信息存储在 fabfile 或设置中,因为我会将它们推送到公共(public)仓库。

请您参考如下方法:

将 key 自动设置为部署的一部分是没有意义的,因为 key 可以通过查看部署文件获知。 (您的源文件可能位于不太安全的位置,例如源代码控制,首先分离出 key 的目的是让有权访问源的人看不到它是什么)。

您首先在部署系统上手动设置了一次密码。

(在您的情况下设置环境变量,这可以通过向 /etc/enviroment 添加一行来完成,例如 MY_DJANGO_APP_SECRET_KEY=mysecretkeyvalue)