djangoubuntunginxgunicorn

Ubuntu server with Django, Gunicorn, Nginx does not give static


The file /var/log/nginx/error.log contains errors of the following type:

[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/"

The following settings are specified in the /etc/nginx/sites-available/<project> file:

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;
    }
}

The following settings are specified in the /etc/systemd/system/gunicorn.service file:

[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

В файле settings.py указаны следующие настройки:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    BASE_DIR / 'static',
)

STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

Am I right in understanding that in the Nginx configuration file after location I need to specify exactly the directory that is generated after the python3 manage.py collectstatic command, so that Nginx gives it exactly that one?

I ran the command sudo -u www-data stat /home/<user>/<project>/collected_static and got an error about the user not having enough rights. I ran the command sudo gpasswd -a www-data <user>, rebooted Nginx and the server just in case, but the statics still didn't appear, and the logs still had the same errors.

The projects that I post were developed 2 years ago and then I also posted them on a virtual server and everything was ok, I set everything up pretty quickly, but now I can't figure out what's what.

I'm not very good at system administration, I do everything according to guides. So I really ask for help.

Thanks in advance for any response

UPD: Tried setting permission 750 for all directories in the path /home/<user>/<project>/collected_static Now there are no errors at all in the logs, but the statics still don't load


Solution

  • location /collected_static {
        alias /home/<user>/<project>/collected_static;
    }