Я пытаюсь развернуть проект django на digitalocean, используя nginx и gunicorn. Мой проект имеет следующую структуру
projects
|_isli
|_isli
|_forecast #project directory
|_manage.py
|_forecast.sock
|_forecast
|_wsgi.py
|_settings.py
|_urls.py
Мой проект создан в каталоге root без создания дополнительного пользователя sudo. Я знаю, что это не правильное решение, но я так решаю. В моем файле settings.py
внутри разрешенных хостов я указал ip адрес
ALLOWED_HOSTS = ['165.22.23.233']
В официальных документах digitalocean есть учебник по развертыванию django с использованием nginx и gunicorn Развертывание django с использованием Nginx и Gunicorn
в этой статье использовался метод, в котором gunicorn, заданный как socet, является моей настройкой /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/root/projects/isli/isli/forecast
ExecStart=/root/projects/isli/env/bin/gunicorn --log-level debug --error-logfile /var/log/gunicorn/error.log --access-logfile /var/log/gunicorn/access.log --workers 3 --bind unix:/root/projects/isli/isli/forecast/forecast.sock forecast.wsgi:application
[Install]
WantedBy=multi-user.target
после создания файла gunicorn.service, который я запускаю systemctl start gunicorn
, чем systemctl enable gunicorn
после того, как в моем каталоге проекта был создан файл forecast.sock, чем я настраиваю nginx в /etc/nginx/sites-available/forecast
со следующими
server {
listen 165.22.23.233:80;
location = /favicon.ico {access_log off; log_not_found off;}
location / {
include proxy_params;
proxy_pass http://unix:/root/projects/isli/isli/forecast/forecast.sock;
}
}
, чем systemctl restart nginx
Когда я пытаюсь чтобы получить доступ к http://165.22.23.233:80
из браузера, его необходимо ввести 502 неверных шлюза. После этого в файле /var/log/nginx/error.log
я вижу следующее
2020/02/09 16:29:01 [crit] 13533#13533: *11 connect() to unix:/root/projects/isli/isli/forecast/forecast.sock failed (
13: Permission denied) while connecting to upstream, client: 178.176.218.110, server: , request: "GET / HTTP/1.1", upstream: "http://unix:/root/projects/isli/isli/forecast/forecast.sock:/", host: "165.22.23.233"
Как я понял из этой ошибки, моя проблема в том, что nginx не может получить доступ к /root/projects/isli/isli/forecast/forecast.sock
файлу. После этого я попытался проверить разрешения для каждой сущности указанного выше пути с помощью
namei -nom /root/projects/isli/isli/forecast/forecast.sock
. И вот вывод:
f: /root/projects/isli/isli/forecast/forecast.sock
drwxr-xr-x root root /
drwx------ root root root
drwxr-xr-x root root projects
drwxr-xr-x root root isli
drwxr-xr-x root root isli
drwxr-xr-x root root forecast
srwxrwxrwx root root forecast.sock
На выходе выше root пользователь имеет разрешения для каждой сущности для моего путь к сокету, но почему ошибка говорит мне, что в разрешении отказано