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')]
Есть какие-нибудь подсказки? Я предполагаю, что это что-то связанное с этими настройками + тома докера, я пробовал немного изменить вещи, но без успеха.