Я настраиваю проект 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