受监督作为服务和敏感的环境变量

时间:2018-11-15 15:41:37

标签: django environment-variables gunicorn supervisord supervisor

我正在使用主管来监视Django应用程序的gunicorn进程。 我的配置:

[program:app]
environment=
    SETTINGS="%(ENV_SETTINGS)s",
    DB_NAME="%(ENV_DB_NAME)s",
    DB_PASS="%(ENV_DB_PASS)s",
    DB_USER="%(ENV_DB_USER)s",
    EMAIL_HOST_PASSWORD="%(ENV_EMAIL_HOST_PASSWORD)s",
    SECRET_KEY="%(ENV_SECRET_KEY)s"
command=/home/app/bin/gunicorn_start
user=username
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/app/logs/gunicorn-error.log

我在/ etc / bashrc中定义了环境变量。这些变量包含敏感数据(根据“ Django的两个瓢”的建议,将其存储在环境中),我已经使用env命令验证了我的变量存在于环境中。

Supervisor抛出一个错误,它无法访问我的环境变量:

  

错误:CANT_REREAD:格式字符串   '\ nSETTINGS =“%(ENV_SETTINGS)s” ...'   “环境”包含名称(“ ENV_SETTINGS”),其中   无法扩展。可用名称:ENV_HOME,ENV_LANG,ENV_LOGNAME,   ENV_PATH,ENV_SHELL,ENV_USER,group_name(此处为host_node_name),   'program:app'部分中的process_num,program_name(文件:   '/etc/supervisord/supervisord.conf')

此问题已在(link)中进行了描述。作为服务启动时,主管无法访问特定用户在Shell配置文件中定义的变量。确实,它列出的可用变量只是我运行env命令时对我可用的变量的一小部分。

我应该在哪里将我的机密定义为env变量?我应该将它们从/ etc / bashrc中取出并在超级用户配置文件中进行定义吗?还是在gunicorn_start脚本中(/ home / app / bin / gunicorn_start)?

0 个答案:

没有答案