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

时间:2014-05-18 18:14:29

标签: python django deployment fabric

目前我正在尝试将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))

在这种情况下,设置env vars的哪种方法最好? 我真的想自动制作这个并多次使用这个fabscript。同时我不想在fabfile或设置中存储秘密信息,因为我会将它们推送到公共回购。

1 个答案:

答案 0 :(得分:1)

在部署过程中自动设置密钥是没有意义的,因为可以通过查看部署文件来了解密钥。 (您的源文件可能位于不太安全的位置,例如源代码控制,并且首先分离出密钥的点是因此有权访问源的人无法看到它是什么。)

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

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