Настройте сервер 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, чтобы помочь вам более точно.