Я использую супервизор для мониторинга процесса ганкорна для приложения Django.
Мой конфиг:
[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. Эти переменные содержат конфиденциальные данные (в соответствии с рекомендацией книги «Два черпака Джанго» для их хранения в среде). Я проверил с помощью команды env, что мои переменные присутствуют в среде.
Supervisor выдает ошибку, что он не может получить доступ к моим переменным среды:
ОШИБКА: CANT_REREAD: строка формата
'\ NSETTINGS = "% (ENV_SETTINGS) s" ...'
для 'environment' содержит имена ('ENV_SETTINGS'), которые
не может быть расширен Доступные имена: ENV_HOME, ENV_LANG, ENV_LOGNAME,
ENV_PATH, ENV_SHELL, ENV_USER, имя_группы, здесь, имя_узла_хоста,
имя_процесса, имя_программы в разделе «программа: приложение» (файл:
«/etc/supervisord/supervisord.conf')
Эта проблема была описана ранее ( ссылка ). При запуске в качестве службы супервизор не может получить доступ к переменным, определенным в файлах конфигурации оболочки конкретным пользователем. На самом деле те переменные, которые перечислены в списке доступных, являются лишь небольшим подмножеством того, что доступно мне, если я запущу команду env.
Где я должен определить свои секреты как переменные env? Должен ли я взять их из / etc / bashrc и определить их в файле конфигурации супервизора? Или даже в сценарии gunicorn_start (/ home / app / bin / gunicorn_start)?