Django,Fabric:部署Django项目时管理密钥的最佳方式是什么?

3

目前我正在尝试将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。同时,我不想将机密信息存储在fabfile或设置中,因为我将把它们推送到公共repo。

我不确定问题是什么 - 你是在问如何使用fabric设置环境变量,还是如何生成秘钥? - Burhan Khalid
1
我正在询问如何在部署服务器上永久地使用fabric设置环境变量。 - asnelzin
1个回答

1
部署过程中自动设置秘钥是没有意义的,因为秘钥可以通过查看部署文件来获取。(您的源文件可能位于较不安全的位置,例如源代码控制,而首先将秘钥分离出来的目的是为了防止能够访问源代码的人看到它)。
您需要在部署系统上手动设置一次秘钥。
(在您的情况下,可以通过向/etc/enviroment添加一行来设置环境变量,例如MY_DJANGO_APP_SECRET_KEY=mysecretkeyvalue)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接