Обслуживание статических и мультимедийных файлов Django с помощью Docker и Nginx

У меня есть система, которую я пытаюсь докеризировать и настроить конвейер CI/CD, но она не обслуживает статические или мультимедийные файлы в продакшене (обслуживает на локальном).

Производственный docker-compose файл выглядит следующим образом:

version: "3.8"

services:

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.prod
    image: "${BACKEND_IMAGE}"
    volumes:
      - static_volume:/backend/assets
      - media_volume:/backend/media
    expose:
      - 8000
    env_file: .env
    depends_on:
      - db

  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile.prod
    image: "${NGINX_IMAGE}"
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - static_volume:/backend/assets
      - media_volume:/backend/media
    depends_on:
      - backend
      - db

volumes:
  static_volume:
  media_volume:

nginx.prod.conf:

upstream backend {
    server backend:8000;
}

server {
    listen 80;
    listen [::]:80;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $http_host;
    }
    
    location /static/ {
        alias /backend/assets/;
    }

    location /media/ {        
        alias /backend/media/;
    }
}

Django settings.py:

STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'assets/')
STATICFILES_DIRS = [STATIC_DIR, ]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

Статический каталог perms:

/backend # ls -la
drwxr-xr-x    9 root     root          4096 Feb  9 22:49 assets

Я получаю 404 Not Found для статических и медиа файлов. Буду признателен за помощь в определении того, что я делаю неправильно...

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