目前我正在尝试将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或设置中存储秘密信息,因为我会将它们推送到公共回购。
答案 0 :(得分:1)
在部署过程中自动设置密钥是没有意义的,因为可以通过查看部署文件来了解密钥。 (您的源文件可能位于不太安全的位置,例如源代码控制,并且首先分离出密钥的点是因此有权访问源的人无法看到它是什么。)
您首先在部署系统上手动设置了一次密码。
(在您的情况下设置环境变量,可以通过向/etc/enviroment
添加一行来完成,例如MY_DJANGO_APP_SECRET_KEY=mysecretkeyvalue
)