Сервер Ubuntu с Django, Gunicorn, Nginx не выдает статический
Файл /var/log/nginx/error.log содержит ошибки следующего типа:
[error] 714#714: *5 open() "/home/<user>/<projects>/static/css/custom.css" failed (13: Permission denied), client: ip, server: domain, request: "GET /static/css/custom.css HTTP/1.1", host: "domain", referrer: "http://domain/"
В файле /etc/nginx/sites-available/<project>
указаны следующие настройки:
server {
listen 80;
server_name <domain>;
location = /favicon.ico { access_log off; log_not_found off; }
location /collected_static/ {
root /home/<user>/<project>;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
В файле /etc/systemd/system/gunicorn.service
указаны следующие настройки:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=vsevolod
Group=www-data
WorkingDirectory=/home/<user>/<project>
ExecStart=/home/<user>/<project>/myvenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
config.wsgi:application
[Install]
WantedBy=multi-user.target
The following settings are specified in the settings.py
file:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
BASE_DIR / 'static',
)
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
Правильно ли я понимаю, что в конфигурационном файле Nginx
после location
нужно указать именно тот каталог, который создается после команды python3 manage.py collectstatic
, чтобы Nginx
отдавал именно его?
Я выполнил команду sudo -u www-data stat /home/<user>/<project>/collected_static
и получил ошибку о том, что у пользователя недостаточно прав. Я выполнил команду sudo gpasswd -a www-data <user>
, перезагрузил Nginx
и сервер на всякий случай, но статика все равно не появилась, а в логах все те же ошибки.
Проекты, которые я размещаю, были разработаны 2 года назад, и тогда я также разместил их на виртуальном сервере, и все было в порядке, я установил все довольно быстро, но теперь я не могу понять, что к чему.
Я не очень хорошо разбираюсь в системном администрировании, все делаю по руководствам. Поэтому я очень прошу помощи.
Заранее спасибо за любой ответ
UPD: Попробовали установить разрешение 750 для всех каталогов по пути /home/<user>/<project>/collected_static
Теперь в логах нет никаких ошибок, но статика по-прежнему не загружается
Обеспечьте правильные права доступа к файлам и каталогам
Поскольку Nginx работает как www-data
, у него должен быть доступ на чтение и выполнение к статическим файлам.
Обновить права собственности
sudo chown -R <user>:www-data /home/<user>/<project>/collected_static``
Установите разрешения
sudo chmod -R 755 /home/<user>/<project>/collected_static
кроме того, проверьте права доступа к родительским каталогам
Для доступа к статическим файлам Nginx требуется разрешение execute (x
) в каждом родительском каталоге.
После этого вам необходимо перезапустить службы
sudo systemctl restart nginx
sudo systemctl restart gunicorn
location /collected_static/ {
root /home/<user>/<project>/collected_static/;
}