N8n con Docker Compose producción es uno de los usos más prácticos de n8n. Usar n8n con Docker Compose en producción es la forma más robusta y mantenible de desplegar tu instancia self-hosted. En esta guía configuramos PostgreSQL como base de datos, Nginx como proxy inverso, SSL automático y backups programados.
Por qué usar Docker Compose para n8n en producción
Docker Compose te permite definir toda la infraestructura en un solo archivo. Ventajas clave:
- Reproducibilidad: el mismo archivo funciona en cualquier servidor
- Fácil actualización: un comando actualiza todos los servicios
- Aislamiento: n8n corre en su propio contenedor sin afectar el sistema
- PostgreSQL incluido: mucho más estable que SQLite para uso intensivo
Arquitectura del setup
Para un despliegue de producción sólido necesitas cuatro piezas:
- n8n — el motor de automatización
- PostgreSQL — base de datos persistente
- Nginx — proxy inverso con terminación SSL
- Certbot — certificados Let's Encrypt gratuitos
docker-compose.yml completo
Crea /opt/n8n/docker-compose.yml con este contenido:
version: "3.8"
services:
postgres:
image: postgres:15
restart: always
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 10s
retries: 5
n8n:
image: n8nio/n8n
restart: always
depends_on:
postgres:
condition: service_healthy
ports:
- "127.0.0.1:5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_HOST=${DOMAIN}
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://${DOMAIN}/
- GENERIC_TIMEZONE=Europe/Madrid
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
volumes:
postgres_data:
n8n_data:
Archivo .env con variables seguras
Nunca escribas contraseñas directamente en el compose. Crea /opt/n8n/.env:
DOMAIN=n8n.tudominio.com
POSTGRES_PASSWORD=password_muy_segura
N8N_ENCRYPTION_KEY=clave_aleatoria_32_caracteres
Genera claves seguras con:
openssl rand -hex 32
Configuración de Nginx con WebSockets
n8n con Docker Compose en producción requiere soporte de WebSockets en Nginx para que la interfaz funcione en tiempo real:
server {
server_name n8n.tudominio.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
}
}
Activa SSL automáticamente:
certbot --nginx -d n8n.tudominio.com
Arrancar y verificar el stack
cd /opt/n8n
docker compose up -d
docker compose ps # todos deben estar "healthy"
docker compose logs -f n8n
Actualizar sin downtime
docker compose pull
docker compose up -d --no-deps n8n
Descarga la nueva imagen y reinicia solo n8n, sin tocar la base de datos.
Backup automático de PostgreSQL
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
docker compose -f /opt/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n > /backups/n8n_$DATE.sql
find /backups -name "*.sql" -mtime +7 -delete
Programa el script en cron:
0 3 * * * /opt/n8n/backup.sh
Conclusión
Un setup de n8n con Docker Compose en producción con PostgreSQL + Nginx + SSL es el estándar para proyectos serios. Dedica una hora a configurarlo correctamente desde el principio y tendrás una plataforma estable, actualizable y con backups automáticos que funcionará sin problemas durante años.


