Переменные среды Django virtualenvwrapper в производстве - PullRequest
0 голосов
/ 27 февраля 2019

Я настраиваю проект Django на сервере, следуя этому руководству по DigitalOcean.Тем не менее, я очень незнаком с Gunicorn и nginx, поэтому сталкиваюсь с проблемами.

Сервер работает под управлением Ubuntu 18.04, Python 3.6.7, Django 2.1.3, virtualenvwrapper 4.8.4, gunicorn 19.9.0.

При запуске curl --unix-socket /run/gunicorn.sock localhost возвращает curl: (56) Recv failure: Connection reset by peer

Я подозреваю, что это способ обработки SECRET_KEY Джанго.

Яиспользование virtualenvwrapper для обработки моих виртуальных сред и установки переменных среды в postactivate и сброса их в predeactivate следующим образом:

postactivate:

if [[ -n $SECRET_KEY ]]
then
    export SECRET_KEY_BACKUP=$SECRET_KEY
fi
export SECRET_KEY='my-secret-key'

predeactivate:

if [[ -n $SECRET_KEY_BACKUP ]]
then
    export SECRET_KEY=$SECRET_KEY_BACKUP
    unset SECRET_KEY_BACKUP
else
    unset SECRET_KEY

Понятно, что переменные недоступны, пока не активирован виртуальный env.Я извлекаю переменные в settings.py с помощью os.environ.get('SECRET_KEY').

Как Gunicorn работает с виртуальными средами?Есть ли способ заставить Gunicorn активировать окружающую среду?В противном случае, что является лучшей практикой, когда дело доходит до SECRET_KEY?

Большое спасибо!

Редактировать: добавлен метод поиска переменных.

Редактировать2: файл службы systemd:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=<name>
Group=www-data
WorkingDirectory=/home/<name>/projects/<projectname>/<appname>
ExecStart=/home/<name>/.virtualenvs/<appname>/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/run/gunicorn.sock \
    <appname>.wsgi:application

[Install]
WantedBy=multi-user.target
...