NGINX некорректно обслуживает статические файлы

У меня возникли проблемы при попытке использовать nginx для обслуживания моих статических файлов. Я пытаюсь использовать nginx + gunicorn для развертывания моего приложения django, и я использую docker compose, чтобы попытаться облегчить все необходимые conf.

Вот мои файлы:

docker-compose.yml

  django_gunicorn:
    build:
      context: .
    volumes:
      - static:/app/static  
      - media:/app/media    
    env_file: 
      - .env
    expose:
      - 8000
    depends_on:
      db:
        condition: service_healthy
    networks:
      - app_network
    command: >
      gunicorn core.wsgi:application --bind 0.0.0.0:8000 --workers 3 --threads 2

  # Serviço Nginx
  nginx:
    build:
      context: ./nginx
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - static:/app/static 

django - Dockerfile

FROM python:3.12-slim

WORKDIR /app

# Instala dependências do sistema
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    default-libmysqlclient-dev \
    && apt-get clean

# Instala dependências Python
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# Copia os arquivos do projeto
COPY . .

# Permissões para o entrypoint
RUN chmod +x entrypoint.sh

EXPOSE 8000

ENTRYPOINT ["sh", "./entrypoint.sh"]

entrypoint.sh

#!/bin/sh

until python -c "import MySQLdb; MySQLdb.connect(host='${DATABASE_HOST}', port=int('${DATABASE_PORT}'), user='${MYSQL_USER}', passwd='${MYSQL_PASSWORD}', db='${MYSQL_DATABASE}')"; do
    sleep 1
done

echo "Banco de dados disponível!"

python manage.py migrate --noinput

python manage.py collectstatic --noinput

exec gunicorn --workers 4 --bind 0.0.0.0:8000 core.wsgi:application

/nginx/default.conf

location /static/ {
    alias /app/static/;
}

/nginx/Dockerfile

# Usar a imagem oficial do Nginx
FROM nginx:latest
# Remover configuração padrão do Nginx
RUN rm /etc/nginx/conf.d/default.conf
# Copiar a configuração personalizada do Nginx
COPY ./default.conf /etc/nginx/conf.d/default.conf
# (Opcional) Copiar certificados SSL
# COPY ./nginx/ssl /etc/nginx/ssl
# Expor a porta 80
EXPOSE 80
# Iniciar o Nginx
CMD ["nginx", "-g", "daemon off;"]

Я немного покопался в своих контейнерах и понял, что в контейнерах django_gunicorn и nginx нет ничего в каталоге /app/static. А вот мои settings.py относительно статических файлов:

settings.py

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

Есть какие-нибудь подсказки? Я предполагаю, что это что-то связанное с этими настройками + тома докера, я пробовал немного изменить вещи, но без успеха.

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