Uvicorn, NGINX, Django
Использую для деплоя Django проекта nginx и gunicorn
Решил попробовать uvicorn
Запустить то получается, только вот связать uvicorn и nginx никак.
Конфиг nginx
...
http {
...
upstream uvicorn {
server unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock;
}
}
Конфиг проекта
server {
listen 80;
server_name 0.0.0.0;
return 301 https://0.0.0.0:80$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# SSL
ssl_certificate /etc/nginx/ssl/dwapper.crt;
ssl_certificate_key /etc/nginx/ssl/dwapper.key;
# DJANGO
location = /favicon.ico {
access_log off; log_not_found off;
}
location /static/ {
alias /home/dhvcc/PycharmProjects/dwapper/staticfiles/;
}
# UVICORN
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://uvicorn;
}
}
При попытке зайти на сайт в лог получаю
*205 connect() to unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/2.0", upstream: "http://unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock:/", host: "localhost"
Скорее всего, проблема в том, что uvicorn не запущен. Запускаю я так (--uds явно указывает на тот сокет)
/home/dhvcc/PycharmProjects/dwapper/venv/bin/uvicorn --workers 3 --uds unix:/home/dhvcc/PycharmProjects/dwapper/dwapper.sock dwapper.asgi:application
Только запуск почему-то просиходит на http://127.0.0.1:8000.
dwapper.sock - файл, сгенерированный ещё во время работы с gunicorn
Вот старый конфиг сервиса, под которым работал gunicorn
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=dhvcc
Group=www-data
WorkingDirectory=/home/dhvcc/PycharmProjects/dwapper
ExecStart=/home/dhvcc/PycharmProjects/dwapper/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/dhvcc/PycharmProjects/dwapper.sock dwapper.wsgi:application -k uvicorn.workers.UvicornWorker
[Install]
WantedBy=multi-user.target
Ответы (1 шт):
Предположительно uvicorn поднялся на http://127.0.0.1:8000.
Это можно проверить: curl -v http://127.0.0.1:8000.
Даже если возвращается код 301, это уже значит, что сервер отвечает.
Тогда proxy_pass у nginx можно направить напрямую туда же.
unix-сокеты использоваться не будут, и заметной выгоды от них вероятно не было бы.