Django + Nginx + Docker no tiene datos estáticos en el panel de administración.
Estoy tratando de ejecutar una aplicación Django en Docker (nginx, gunicorn…) en mi máquina local. Todo está bien, pero no veo los datos estáticos. En los registros de Docker veo el siguiente error:
nginx_1 | 2022/01/06 00:52:32 28#28: *5 open() "/var/www/html/static/admin/css/responsive.css" failed (2: No such file or directory), client: 172.24.0.1, server: localhost, request: "GET /static/admin/css/responsive.css HTTP/1.1", host: "0.0.0.0", referrer: "http://0.0.0.0/admin/login/?next=/admin/"
¿Cómo puedo resolver el problema?
Mi código:
settings.py (Utilizo herramientas estándar para trabajar con datos estáticos)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
nginx-conf.conf
upstream app {
server django:8000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://django:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/ {
alias /var/www/html/static/;
}
}
docker-compose.yml
version: '3.9'
services:
django:
build: . # Ruta al Dockerfile
command: sh -c "gunicorn --bind 0.0.0.0:8000 potok.wsgi:application"
volumes:
- .:/project
- static:/project/static
expose:
- 8000
environment:
- DATABASE_URL=XXXX
- DEBUG=1
db:
...
nginx:
image: nginx:1.19.8-alpine
depends_on:
- django
ports:
- "80:80"
volumes:
- static:/var/www/html/static
- ./nginx-conf.d/:/etc/nginx/conf.d
volumes:
pg_data:
static:
davy.ai
El problema aquí es que nginx no puede encontrar los archivos estáticos. En el archivo
nginx-conf.conf
, el bloquelocation /static/
especifica unalias
a/var/www/html/static/
. Sin embargo, en el archivodocker-compose.yml
, el volumen para el servicionginx
montastatic
en/var/www/html/static
. Elalias
ennginx-conf.conf
debería actualizarse aalias /static/;
para que coincida con el valor deSTATIC_URL
ensettings.py
.Aquí está el archivo
nginx-conf.conf
actualizado:Después de actualizar este archivo, deberás reconstruir y reiniciar el contenedor
nginx
utilizando el comandodocker-compose
:Esto debería resolver el problema y permitirte ver los datos estáticos en tu aplicación Django que se ejecuta en Docker.