Вот рецепт:
Запись переменных среды в файл /home/ubuntu/prog/.env
.
export FLASK_APP=/home/ubuntu/prog/hello.py
export SECRET_KEY=ABCD
export DATABASE_PASSWORD=EFGH
Используйте dotenv
load_dotenv
для загрузки переменных среды.
from flask import Flask
from os.path import join, dirname
from os import environ
from dotenv import load_dotenv
app = Flask(__name__)
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
@app.route('/')
def hello():
SECRET_KEY = environ.get("SECRET_KEY")
DATABASE_PASSWORD = environ.get("DATABASE_PASSWORD")
return SECRET_KEY + DATABASE_PASSWORD
Написать файл /etc/supervisor/hello.conf
.
[program:hello]
command=/home/ubuntu/venv/bin/gunicorn -b localhost:8000 hello:app
directory=/home/ubuntu/prog
stdout_logfile=/home/ubuntu/prog/hello_out.log
stderr_logfile=/home/ubuntu/prog/hello_err.log
user=ubuntu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
[supervisord]
logfile=/home/ubuntu/prog/hello_supervisord.log
pidfile=/tmp/supervisord.pid
Загрузите среду и укажите на приложение.
source /home/ubuntu/prog/.env
Переменные среды теперь загружены,
$ export | grep SECRET
declare -x SECRET_KEY="ABCD"
и они будут переданы подпроцессу без вмешательства supervisord
environment=
.
Запустите supervisord
на переднем плане, чтобы подтвердить, что все хорошо.
/usr/bin/supervisord -n -edebug -c /etc/supervisor/hello.conf
Подтвердите из другой оболочки, что все хорошо.
$ curl localhost:8000
ABCDEFGH
Убить supervisord
. Поскольку он находится на переднем плане, достаточно нажать CTRL-c.
Запуск supervisord
в качестве демона.
/usr/bin/supervisord -c /etc/supervisor/hello.conf
Следите за тремя файлами журналов prog/hello_out.log
, prog/hello_err.log
и prog/hello_supervisord.log
.
Возможно, самый важный момент - избегать использования supervisord
environment=
. Так что болтовня говорит о том, что он обрабатывает запятые, кавычки, табуляции и даже переводы строк. Эмпирически, это не имеет места (по крайней мере, для supervisord
3.3.5), и документация не решает это так или иначе. Две строки 942-943
похоже, именно там происходит разбор , если кто-то хочет исследовать недостаточность документов.