Ошибка 502: Развертывание приложения Django с помощью Gunicorn и Nginx
Я разработал веб-приложение с помощью Django и пытаюсь опубликовать его на виртуальной машине, созданной в Azure. Для этого я использую следующий программный стек:
- Ubuntu (20.04)
- Django (3.0.7)
- Virtualenv (20.0.17)
- Gunicorn (20.1.0)
- Nginx (1.18.0)
Для развертывания приложения я следовал этому руководству: https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04
Мои папки проекта django организованы следующим образом:
home/
├─ useradmin/
│ ├─ myproject/
│ │ ├─ proj/
│ │ │ ├─ settings.py
│ │ │ ├─ urls.py
│ │ │ ├─ wsgi.py
│ │ │ ├─ ...
│ │ ├─ static/
│ │ ├─ templates/
│ │ ├─ venv/
│ │ ├─ manage.py
│ │ ├─ ...
Это мой /etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=useradmin
Group=www-data
WorkingDirectory=/home/useradmin/myproject
ExecStart=/home/useradmin/myproject/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/useradmin/myproject/myproject.sock proj.wsgi:application
[Install]
WantedBy=multi-user.target
Это мой /etc/nginx/sites-available/myproject:
server {
listen 80;
server_name mydomain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/useradmin/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/useradmin/myproject/myproject.sock;
}
}
Когда я перехожу на сайт mydomain.com, я получаю ошибку 502 Bad Gateway. Если я проверю журналы Nginx, выполнив команду "sudo tail -F /var/log/nginx/error.log", я увижу следующую ошибку:
2022/03/16 08:27:33 [crit] 64480#64480: *3 connect() to unix:/home/useradmin/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: XX.XX.XX.XX, server: mydomain.com, request: "GET / HTTP/1.1", upstream: "http://unix:/home/useradmin/myproject/myproject.sock:/", host: "mydomain.com"
Для создания файла sock я выполняю следующие инструкции, но ничего не меняется:
systemctl daemon-reload
systemctl restart gunicorn.service