Настройте сервер nginx

Когда я запускаю контейнер Docker, я вижу, что Django правильно указывает пути к статическим и медиафайлам, но Nginx по-прежнему не может их найти. Это вызывает ошибку 404 при попытке доступа к таким файлам, как bootstrap.min.css.

Настройки Django:

STATIC_URL = "static/"
STATIC_ROOT = os.path.join(BASE_DIR, "static")  # NOQA

# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static"),  # NOQA F405 
# ]

MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media/"  # NOQA

print(os.path.join(BASE_DIR, 'static'))  # I wanted to see what the path would be 
print(os.path.join(BASE_DIR, 'media'))

в консоли отображается этот путь:

/shop/src/static
/shop/src/media

Конфигурация Nginx:

server {
    listen 80 default_server;
    listen 443 default_server;

    server_name shop;

    location /static/ {
        alias /shop/src/static/;
    }

    location /media/ {
        alias /shop/src/media/;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://backend:8010;
    }
}

В журналах Nginx я получаю:

2024/07/30 07:53:31 [error] 30#30: *1 open() '/shop/src/static/css/bootstrap.min.css' failed (2: No such file or directory), client: 172.18.0.1, server: shop, request: 'GET /static/css/bootstrap.min.css HTTP/1.1', host: 'localhost'

если ваши установки состоят из Nginx и Django в одном контейнере, возможно, вы не выполнили команду

python manage.py collectstatic

Если вы используете два отдельных контейнера и выполнили приведенную выше команду, то, вероятно, у вас плохо определены тома docker. Возможно, файлы не разделяются между двумя контейнерами.

Пожалуйста, поделитесь файлами типа Dockerfile или docker-compose.yml, чтобы помочь вам более точно.

Вернуться на верх