Configuración de Docker Compose para Node.js Express + MongoDB + Redis
Cuándo usar esta combinación
Esta arquitectura es ideal para APIs REST y microservicios escalables que manejan alta concurrencia y operaciones de E/S intensivas. Node.js Express proporciona un backend asíncrono y ligero; MongoDB ofrece persistencia documental flexible y desacoplada para datos no relacionales; y Redis actúa como capa de caché en memoria de ultra baja latencia, broker de mensajería (Pub/Sub) o gestor de sesiones. Es la opción estándar para aplicaciones en tiempo real, e-commerce, tableros analíticos y sistemas con autenticación basada en tokens o sesiones distribuidas.
Variables de entorno críticas (Producción)
MONGO_INITDB_ROOT_PASSWORD/DATABASE_URL: Contraseña del usuario administrador de MongoDB y la cadena de conexión autenticada. No utilizar credenciales por defecto.REDIS_PASSWORD: Contraseña para la directivarequirepassde Redis. Redis es extremadamente rápido y vulnerable a ataques de fuerza bruta si se expone sin autenticación robusta.JWT_SECRET/SESSION_SECRET: Clave criptográfica privada para firmar tokens JWT o cookies de sesión en Express. Debe ser un hash aleatorio de alta entropía (mínimo 256 bits).
Consejo de DevOps: Rendimiento y Seguridad
Implementa aislamiento de red y límites de memoria (OOM Prevention):
- Seguridad: En tu archivo
docker-compose.yml, no expongas los puertos de MongoDB (27017) ni Redis (6379) al host medianteports:. Utiliza una red interna tipobridge(networks:) para que solo el contenedor de Express pueda alcanzarlos, exponiendo únicamente la API al exterior (o a un proxy inverso como NGINX/Traefik). - Rendimiento: Define límites estrictos de recursos (
deploy.resources.limits.memory) y configura Redis con directivasmaxmemoryymaxmemory-policy allkeys-lruen su comando de inicio para evitar que un pico de consumo active el OOM Killer del kernel de Linux y tumbe los contenedores. Asegura que Node.js corra con un usuario sin privilegios (USER node).
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