Configurar correctamente los archivos estáticos en producción marca la diferencia entre una interfaz rota y una experiencia fluida. Aquí verás, paso a paso y sin rodeos, cómo alinear Django y NGINX para que CSS, JavaScript e imágenes carguen bien, cómo evitar 404 en /static/ y cuándo considerar S3 para optimizar costos.
¿Qué revelan los 404 en el Django admin sobre los archivos estáticos?
Al ingresar a withpython.com/admin el panel se ve "feo" porque faltan estilos. El debugger muestra múltiples 404 hacia /static/. Esto indica que el servidor web no está sirviendo los archivos estáticos aunque el proyecto de Django esté configurado para generarlos.
Los archivos estáticos incluyen imágenes, CSS y JavaScript.
El proyecto contempla uso de S3 como almacenamiento opcional con un flag booleano.
Si S3 está activo, se usa ese flujo; si no, se espera servir desde el servidor.
La URL /static/ existe en la configuración, pero la carpeta con los archivos aún no estaba creada ni mapeada en NGINX.
Idea clave: sin la carpeta generada y sin la regla de NGINX que apunte a ella, el navegador pedirá recursos a /static/ y obtendrá 404.
¿Cómo preparar el proyecto con collect static y verificar la carpeta?
Se actualiza el código y se crea la carpeta de estáticos que Django centraliza para producción. Aun así, hace falta decirle a NGINX dónde encontrarlos.
Conexión por SSH, activar el entorno virtual y entrar al proyecto.
Ejecutar actualización del repositorio con git pull.
Al listar, no aparece aún la carpeta de estáticos unificados.
Ejecutar el comando de Djangocollect static para copiar los recursos en el directorio de destino.
Confirmar con un listado que la carpeta ya existe.
Aunque exista, el sitio seguirá con 404 hasta configurar NGINX.
Código mencionado:
git pull
collect static
Habilidades y conceptos aplicados: despliegue con control de versiones. Gestión de entornos virtuales. Generación de carpeta de static files para producción. Diagnóstico de errores 404.
¿Cómo configurar NGINX para servir /static/ correctamente?
El paso definitivo es crear una regla en NGINX que apunte a la carpeta generada por collect static. Además, validar la configuración antes de reiniciar evita caídas por errores de sintaxis.
Editar el archivo de configuración en "nginx sites enable" con privilegios.
Crear una location /static/ y apuntar a la carpeta donde quedaron los archivos.
Agregar el slash final en /static/ para incluir todos los recursos.
Guardar y validar con sudo nginx -t para detectar errores como el punto y coma faltante.
Reiniciar seguro con sudo service nginx restart.
¿Qué cambios hacer en la configuración de nginx?
Se agrega un bloque para servir los archivos desde la ruta de estáticos generada por Django.
Servir los archivos Statics en un Bucket de S3 es una muy buena Practica para ahorrar consumo de recursos en AWS, alli puedes meter todo tus [ HMTL, CSS, JS ] y enlazarlos a tu Dominio con Route 53, y la istancia EC2 ,endpoint, tambien puedes poner alli el directorio reducido dist/ luego de hacer Bundler para una mejor arquitectura en la nube.
Los archivos estáticos son:
Imágenes
CSS
JS
Para configurar que el NGINX utilice los archivos estáticos necesitamos hacer lo siguiente:
1. Conectar con el servidor con SSH
2. En el servidor nos movemos hasta la carpeta del proyecto
3. Para que la aplicación conozca los archivos estáticos utilizamos ./manage.py collectstatic
4. Lo anterior crea una carpeta llamada staticfiles en la raíz del proyecto
5. Se crea un nuevo location en el archivo de configuración de NGINX que se encuentra en /etc/nginx/sites-enabled/[nombre del archivo de configuracion]
Sudo vim /etc/nginx/sites-enabled/deploywhithpython.com.conf
6. Dentro del server se agrega:
…
location /static/ {
alias /srv/apps/django_basic_production/staticfiles/;
}
…
7. Se valida la configuración de NGINX con sudo nginx -t
8. Se reinicia el servicio para que utilice la nueva configuración con sudo service nginx restart
9. Se recarga el sitio para comprobar que todo está corriendo correcto
Hola, muy buen curso y bien estructurado, solo hace falta el recurso del instructivo de la integración del servicio de S3 de Amazon con Django, solo se encuentra el repositorio de Github con el que se trabajo