Configuración de Docker Compose para Django + PostgreSQL + Celery + Redis
Cuándo usar este stack
Esta arquitectura es el estándar para aplicaciones web robustas que manejan cargas de trabajo asíncronas o pesadas en segundo plano (reportes, procesamiento de archivos, correos transaccionales o tareas periódicas). PostgreSQL garantiza consistencia ACID para datos relacionales complejos, mientras que Redis actúa como intermediario de mensajes (message broker) de baja latencia para Celery. Utilízalo cuando necesites desacoplar el ciclo de petición-respuesta HTTP del procesamiento intensivo, asegurando alta disponibilidad, escalabilidad horizontal de workers y una experiencia de usuario rápida.
Variables de entorno críticas para producción
DJANGO_SECRET_KEY: Clave criptográfica para la firma de sesiones, tokens CSRF y cookies. Usar un valor predeterminado o expuesto compromete la autenticación completa del sistema.POSTGRES_PASSWORD: Contraseña del usuario de la base de datos. Debe ser de alta entropía para evitar ataques de fuerza bruta o accesos no autorizados a nivel de red interna.REDIS_PASSWORD(o token enCELERY_BROKER_URL): Clave de autenticación para Redis. Por defecto, Redis no requiere contraseña; exponer el broker sin autenticación permite la inyección o intercepción de tareas remotas.
Consejo de seguridad y rendimiento para contenedores
- Principio de menor privilegio y gestión de memoria:
- Seguridad: Ejecuta los contenedores de Django y Celery con un usuario sin privilegios (
USER appuseren elDockerfilecon UID/GID explícitos). Nunca ejecutes Celery comoroot, ya que el propio proceso bloquea esta práctica por motivos de seguridad. - Rendimiento: Configura límites estrictos de recursos (
deploy.resources.limits.memoryycpus) en eldocker-compose.ymlpara el servicio de Celery, y utiliza el flag--max-tasks-per-child=100en los workers de Celery para mitigar fugas de memoria (memory leaks) provocadas por librerías de terceros en Python.
- Seguridad: Ejecuta los contenedores de Django y Celery con un usuario sin privilegios (
Checklist de Seguridad antes de desplegar
- Cambiar las contraseñas por defecto en el archivo .env
- Mapear volúmenes persistentes en el VPS
- Configurar las reglas de firewall para los puertos requeridos