супервизор как служебная и чувствительная переменная среды - PullRequest
0 голосов
/ 15 ноября 2018

Я использую супервизор для мониторинга процесса ганкорна для приложения 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)?

...