我正在使用主管来监视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)?