Заставить systemd использовать пользовательские ENV-конфигурации

Я пытаюсь создать контейнер LXC для автоматического запуска определенного приложения Django при старте. Проблема в том, что запустить Django с помощью systemd было довольно просто, однако приложение проверяет переменные ENV, а также полагается на некоторые Ruby Gems для работы.

Шаблон LXC основан на Debian 11.

Из-за специфических требований я запускаю pyenv и rbenv для управления установленными версиями для конкретного пользователя (django для целей этого примера).

Я могу заставить systemd запустить сервер Gunicorn достаточно хорошо, но у меня проблема в том, что он, кажется, не извлекает переменные ENV (пока не уверен), и не получает доступ к необходимым Ruby Gems (подтверждено).

Мой файл gunicorn.service выглядит следующим образом:

[Unit]
Description=Start Gunicorn to run Django App
After=network.target

[Service]
Type=notify

# the specific user that our service will run as
User=django
Group=django

RuntimeDirectory=/home/django/.pyenv/shims
WorkingDirectory=/home/django/application
ExecStartPre=/home/django/.pyenv/shims/python /home/django/app/manage.py migrate
ExecStart=/home/django/.pyenv/shims/gunicorn --chdir /home/django/app app.wsgi:application -k=gevent -t 600 --certfile=/home/django/app/server.crt --keyfile=/home/django/app/server.key -b=0.0.0.0:8000 -w=4 --forwarded-allow-ips=* --proxy-allow-from=*
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Как я могу заставить systemd запустить gunicorn.service, при этом переменные ENV, указанные в home/django/.bashrc будут соблюдены, а также получить доступ к необходимым Gems. Для справки, запуск gunicorn из учетной записи пользователя с вышеуказанными переменными работает на 100% как ожидалось, так что это просто получение той же функциональности от systemd при запуске без необходимости вручную входить на сервер и выполнять команды.

Вернуться на верх