Почему не работает статика в Django?

При рендеринге страницы почему-то не работает статика (css, js) в django. Я запускаю проект через docker контейнеры. Однако, даже не отображается html код на странице, не говоря уже про стили. Вроде бы монтирую все файлы правильно, но всё равно белый экран, не понимаю в чём проблема.

Работаю по такой логике:

  1. Собираю статику python3 manage.py collectstatic локально.
  2. Статика сохраняет в папку staticfiles в корневую папку проекта (внутри стили для admin и для сайта непосредственно).
  3. Далее в docker-compose.yml монтирую ВСЕ файлы в контейнер c django, а в контейнере с nginx монтирую статику из контейнера с django внутрь контейнера nginx в определенную папку.
  4. Прописыаю путь в default.conf в nginx.
  5. Запускаю docker compose up -d, захожу внутрь каждого контейнера docker exec -it <id> bash и вроде бы всё в порядке, то есть в контейнере с django статика есть, а также в контейнере nginx статика тоже есть (пути с кодом ниже), однако всё равно пустая страница (белый фон). Nginx самостоятельно умеет отдавать статику, однако что-то неверно я сделал на каком-то этапе ранее.

Dockerfile

# Создаем кастомный image для Django.
# Кастомный, так как нам надо перекинуть локальные файлы в образ.
# Для PostgreSQL мы возьмем готовый образ и соберем его сразу в docker-compose.yml.
# Docker-compose.yml файл, при помощи которого мы объединяем images и создаем полный сервис для Docker.

# копируем готовый образ python из dockerhub
FROM python:3.10.0-alpine

# установка необходимых пакетов для работы с MongoDB
RUN apk add --no-cache gcc musl-dev libffi-dev \
    && apk add --no-cache jpeg-dev zlib-dev \
    && apk add --no-cache bash \
    && apk add --no-cache mariadb-dev \
    && apk add --no-cache libpq

# устанавливаем рабочую директорию внутри docker контейнера
WORKDIR /website

# копируем файлы зависимостей и проекта Django в образ
COPY requirements.txt .

# устанавливаем зависимости для проекта, не кешируя их
RUN pip install -r requirements.txt --no-cache-dir

# устанавливаем порт, на котором будет работать Docker
EXPOSE 8000

# в рабочую директорию копируем папку с Django вне контейнера
COPY website .

# cобираем статику для Django
RUN python3 manage.py collectstatic --no-input

# запускаем через uwsgi
CMD [ "uwsgi", "--ini", "/website/uwsgi.ini" ]

docker-compose.yml

version: '3.8' 
  
services:
  django:
    build:
      context: .
    volumes:
      - "./website:/website"
    depends_on:
      - mongo
  
  mongo:
    image: mongo:6.0.3
    container_name: mongodb
    volumes:
      - mongodb_data:/data/db/
    ports:
      - "27017:27017"
    restart: always
    environment:
      - MONGODB_NAME=production_database
      - MONGODB_USER=manager
      - MONGODB_PASSWORD=123qwe
  
  nginx:
    image: nginx:latest
    container_name: nginx_django
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/default.conf:/etc/nginx/conf.d/default.conf"
      - "./website/staticfiles:/etc/nginx/website/staticfiles"
    ports:
      - "8080:8080"
    depends_on:
      - django

volumes:
  mongodb_data:

nginx.conf

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    include /etc/nginx/uwsgi_params;
    server_tokens off;
    include /etc/nginx/conf.d/*.conf;
}

default.conf

server {
    listen 8080;
    server_name localhost;

    location / {
        proxy_pass http://django:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-CSRFToken $cookie_csrftoken;
    }
    
    location /admin/ {
        proxy_pass http://django:8000/admin/;
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /static/ {
        autoindex on;
        alias /etc/nginx/website/staticfiles/;
    }
}

Пути

  1. К статике локально: /Users/nnhufg/Desktop/ArtemSheptalin/website/staticfiles
  2. Внутри контейнера джанго: /website/staticfiles
  3. Внутри контейнера nginx: /etc/nginx/website/staticfiles

И ввроде бы всё правильно и логично, то не работает. Стоит отметить, как только я удаляю строку <link rel="stylesheet" href="{% static 'css/main.min.css' %}" /> в base.html, то появляется хотя бы html на странице...

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