Gunicorn не запускается автоматически - PullRequest
0 голосов
/ 11 февраля 2020

Я создал приложение flask. Я пытаюсь развернуть его на сервере Production with WSGI Gunicorn и обратном прокси Nginx в Centos 7. Ниже приведен рабочий каталог моего проекта.

projet
    |--templates
       |--static
   |---app.py
   |---wsgi.py 

И здесь я использую виртуальную среду " my_app». Когда я иду в рабочую папку проекта и запускаю приложение по gunicorn wsgi:app, я могу увидеть результаты на веб-странице. Но когда я закрываю систему, я получаю 502 Bad GateWay. Это означает, что каждый раз, когда мне нужно вручную запустить команду gunicorn, чтобы увидеть результаты на веб-странице. Но я хочу запустить его автоматически. Для этого я создаю служебный файл с помощью systemd. Ниже приведены файлы конфигурации для Nginx и Gunicorn.

В /etc/nginx/sites-enabled/flaskapp.conf

server{
     listen 80;
     server_name xxxx.xxx.xx.xx;
     access_log  /var/log/nginx/error.log;
     uwsgi_read_timeout 120;

     location = /favicon.ico { access_log off; log_not_found off; }


     location / {
        proxy_pass http://unix://home/centos/Python-3.6.4/my_flask_app/pre_owned_model/evaluation_calculator/gunicorn.sock;
        #proxy_pass http://127.0.0.1:8000;
     }
}

В / etc / systemd / system / gunicorn.service

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

[Service]
Type=simple
User=centos
Group=centos
RuntimeDirectory=gunicorn
WorkingDirectory=/home/centos/Python-3.6.4/my_flask_app/pre_owned_model/evaluation_calculator
ExecStart=/home/centos/Python-3.6.4/my_flask_app/my_app/bin/gunicorn  --workers 3 --bind unix:/home/centos/Python-3.6.4/my_flask_app/pre_owned_model/evaluation_calculator/gunicorn.sock -m 007 wsgi:app
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
TimeoutStopSec=3
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

Однако я не получаю результатов того, чего ожидаю. Каждый раз я получаю 502 Bad Gateway даже после создания сервиса. Может кто-нибудь объяснить, как я могу этого достичь.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

Согласно https://docs.gunicorn.org/en/stable/deploy.html Вам нужен файл /etc/systemd/system/gunicorn.socket, который соответствует вашему gunicorn.service

Он должен содержать следующее:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/home/centos/Python-3.6.4/my_flask_app/pre_owned_model/evaluation_calculator/gunicorn.sock
# Our service won't need permissions for the socket, since it
# inherits the file descriptor by socket activation
# only the nginx daemon will need access to the socket
User=centos
# Optionally restrict the socket permissions even more.
# Mode=600

[Install]
WantedBy=sockets.target

После Для создания файла, который вам, скорее всего, потребуется перезагрузить systemd:

systemctl daemon-reload

Чтобы включить сокет, вы также должны запустить команду

systemctl enable --now gunicorn.socket

Служба запускается при первом подключении к вашему сокету.

...