n8n Docker Compose Producción: Guía Completa 2026

n8n docker compose producción es la combinación que necesitas para tener una instancia de automatización robusta, estable y lista para el mundo real. Si estás buscando cómo desplegar n8n con Docker Compose en producción de

Written by: Luis Hernandez

Published on: octubre 28, 2025

n8n docker compose producción es la combinación que necesitas para tener una instancia de automatización robusta, estable y lista para el mundo real. Si estás buscando cómo desplegar n8n con Docker Compose en producción de forma profesional, llegaste al lugar correcto. En esta guía completa vas a configurar PostgreSQL como base de datos, Nginx como proxy inverso, SSL automático con Let’s Encrypt y backups programados — todo paso a paso.

n8n docker compose producción - arquitectura completa del setup con PostgreSQL, Nginx y SSL
Arquitectura típica de n8n docker compose producción con PostgreSQL y Nginx

¿Por qué usar n8n docker compose en producción?

Si ya probaste n8n en tu máquina local, sabes lo poderoso que es. Pero pasarlo a producción sin Docker Compose es buscarte problemas. Estas son las ventajas concretas de usar n8n docker compose producción como estrategia de despliegue:

  • Reproducibilidad total: el mismo archivo docker-compose.yml funciona en cualquier servidor Linux, ya sea un VPS de 5 dólares o un dedicado
  • Actualización en un comando: un solo docker compose pull actualiza todos los servicios sin dramas
  • Aislamiento completo: n8n corre en su propio contenedor sin afectar nada más del sistema operativo
  • PostgreSQL incluido: mucho más estable y confiable que SQLite para uso intensivo con múltiples workflows
  • Escalabilidad: si mañana necesitas agregar Redis o un worker adicional, simplemente lo agregas al compose

En resumen, docker compose para n8n te da infraestructura como código. Eso significa que puedes versionar tu configuración, replicarla y recuperarte de desastres en minutos.

Arquitectura del setup de n8n docker compose producción

Para un despliegue de producción sólido necesitas cuatro piezas fundamentales trabajando juntas:

  • n8n — el motor de automatización que ejecuta tus workflows
  • PostgreSQL — base de datos persistente que reemplaza a SQLite
  • Nginx — proxy inverso con terminación SSL y soporte WebSockets
  • Certbot — certificados SSL gratuitos de Let’s Encrypt, renovación automática

La idea es que Nginx reciba todo el tráfico HTTPS en el puerto 443, lo redirija internamente al puerto 5678 donde escucha n8n, y que PostgreSQL maneje toda la persistencia de datos de forma confiable.

Requisitos previos antes de empezar

Antes de meternos de lleno con la configuración de n8n docker compose producción, asegurate de tener esto listo:

  • Un VPS con Ubuntu 22.04 o superior (mínimo 2 GB de RAM recomendados)
  • Docker y Docker Compose instalados (guía oficial de Docker)
  • Un dominio apuntando a la IP de tu servidor (por ejemplo, n8n.tudominio.com)
  • Acceso SSH con usuario root o sudo
  • Puertos 80 y 443 abiertos en el firewall

Si todavía no tenés Docker instalado, estos comandos te resuelven la vida:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Cerrá sesión y volvé a entrar para que aplique el grupo
docker --version
docker compose version

Archivo docker-compose.yml completo para n8n en producción

Este es el corazón de todo el setup. Creá el directorio y el archivo principal:

sudo mkdir -p /opt/n8n
sudo nano /opt/n8n/docker-compose.yml

Pegá el siguiente contenido en /opt/n8n/docker-compose.yml:

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
    networks:
      - n8n-network

  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=America/Mexico_City
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n-network

volumes:
  postgres_data:
  n8n_data:

networks:
  n8n-network:
    driver: bridge

Algunos detalles importantes de esta configuración:

  • El puerto de n8n solo escucha en 127.0.0.1, así no queda expuesto directamente a internet
  • PostgreSQL tiene healthcheck para que n8n no arranque hasta que la base de datos esté lista
  • La red dedicada n8n-network aísla la comunicación entre los servicios
  • La zona horaria está configurada para Latinoamérica (cambiala según tu ubicación)
Archivo docker-compose.yml completo para n8n en producción

Archivo .env con variables seguras para n8n docker compose

Nunca escribas contraseñas directamente en el docker-compose. Creá un archivo /opt/n8n/.env con las variables sensibles:

DOMAIN=n8n.tudominio.com
POSTGRES_PASSWORD=password_muy_segura_aqui
N8N_ENCRYPTION_KEY=clave_aleatoria_32_caracteres
N8N_USER=admin
N8N_PASSWORD=otra_password_segura

Para generar claves seguras usá OpenSSL directamente en la terminal:

# Generar password para PostgreSQL
openssl rand -hex 24

# Generar encryption key para n8n
openssl rand -hex 32

Importante: la N8N_ENCRYPTION_KEY se usa para cifrar las credenciales que guardás en n8n. Si la perdés o la cambiás, todas tus credenciales almacenadas quedan inutilizables. Guardala en un lugar seguro fuera del servidor.

Configuración de Nginx como proxy inverso con WebSockets

El setup de n8n docker compose producción requiere que Nginx tenga soporte de WebSockets habilitado. Sin esto, la interfaz de n8n no funciona en tiempo real y vas a tener problemas constantes de conexión.

Primero instalá Nginx y Certbot:

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

Creá la configuración del virtual host:

sudo nano /etc/nginx/sites-available/n8n
server {
    listen 80;
    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-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Soporte WebSockets - CRÍTICO para n8n
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        
        # Tamaño máximo de upload
        client_max_body_size 50M;
    }
}

Activá el sitio y generá el certificado SSL:

# Activar el virtual host
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

# Generar certificado SSL con Let's Encrypt
sudo certbot --nginx -d n8n.tudominio.com

Certbot va a modificar automáticamente tu configuración de Nginx para agregar las directivas SSL y la redirección de HTTP a HTTPS. La renovación también es automática.

Configuración de Nginx como proxy inverso con WebSockets

Arrancar y verificar el stack completo

Con todo configurado, es momento de levantar el setup de n8n docker compose producción:

cd /opt/n8n

# Levantar todos los servicios en background
docker compose up -d

# Verificar que todos estén corriendo y saludables
docker compose ps

# Ver los logs en tiempo real (Ctrl+C para salir)
docker compose logs -f n8n

# Verificar conectividad con PostgreSQL
docker compose exec n8n wget -qO- http://localhost:5678/healthz

Si todo salió bien, al entrar a https://n8n.tudominio.com deberías ver la pantalla de login de n8n. Si ves errores de conexión, revisá los logs de cada servicio por separado:

docker compose logs postgres
docker compose logs n8n

Cómo actualizar n8n sin downtime

Una de las mejores ventajas de usar docker compose para n8n en producción es que las actualizaciones son triviales:

cd /opt/n8n

# Descargar la última imagen
docker compose pull

# Reiniciar solo n8n sin tocar PostgreSQL
docker compose up -d --no-deps n8n

# Verificar la nueva versión
docker compose logs -f n8n | head -20

El flag --no-deps es clave: reinicia únicamente el contenedor de n8n sin afectar PostgreSQL. Tu base de datos sigue intacta durante todo el proceso. El downtime total es de unos 10-15 segundos mientras el nuevo contenedor arranca.

Backup automático de PostgreSQL para n8n

No importa qué tan bien configures tu n8n docker compose producción si no tenés backups. Creá este script:

sudo mkdir -p /backups/n8n
sudo nano /opt/n8n/backup.sh
#!/bin/bash
# Backup automático de n8n PostgreSQL
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/n8n"

# Dump de la base de datos
docker compose -f /opt/n8n/docker-compose.yml exec -T postgres \
  pg_dump -U n8n n8n > ${BACKUP_DIR}/n8n_${DATE}.sql

# Comprimir para ahorrar espacio
gzip ${BACKUP_DIR}/n8n_${DATE}.sql

# Eliminar backups de más de 7 días
find ${BACKUP_DIR} -name "*.sql.gz" -mtime +7 -delete

echo "Backup completado: n8n_${DATE}.sql.gz"

Dale permisos de ejecución y programalo en cron para que corra todos los días a las 3 AM:

sudo chmod +x /opt/n8n/backup.sh

# Editar crontab
sudo crontab -e

# Agregar esta línea:
0 3 * * * /opt/n8n/backup.sh >> /var/log/n8n-backup.log 2>&1

Para restaurar un backup en caso de desastre:

gunzip /backups/n8n/n8n_20250101_030000.sql.gz
cat /backups/n8n/n8n_20250101_030000.sql | docker compose -f /opt/n8n/docker-compose.yml exec -T postgres psql -U n8n n8n

Monitoreo básico del stack n8n

Para tener visibilidad de que tu instancia de n8n docker compose producción sigue funcionando, te recomiendo este script de monitoreo simple:

#!/bin/bash
# Verificar que n8n responde
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://n8n.tudominio.com/healthz)

if [ "$HTTP_CODE" != "200" ]; then
  echo "ALERTA: n8n no responde (HTTP $HTTP_CODE)" | mail -s "n8n down" tu@email.com
  # Intentar reiniciar automáticamente
  cd /opt/n8n && docker compose restart n8n
fi

Programalo para que corra cada 5 minutos en cron y vas a tener alertas básicas sin necesidad de herramientas externas complicadas.

Errores comunes al configurar n8n con Docker Compose

Estos son los problemas que más veo en la comunidad cuando la gente intenta configurar n8n docker compose producción:

  • Error de permisos en volúmenes: n8n corre con el usuario node (UID 1000). Si los volúmenes tienen otros permisos, va a fallar. Solución: sudo chown -R 1000:1000 /opt/n8n
  • WebSockets no funcionan: la interfaz se queda cargando infinitamente. Verificá que las directivas Upgrade y Connection estén en la config de Nginx
  • n8n arranca antes que PostgreSQL: asegurate de tener el healthcheck y condition: service_healthy en el depends_on
  • Encryption key perdida: si cambiás o perdés la N8N_ENCRYPTION_KEY, todas las credenciales guardadas quedan cifradas e irrecuperables
  • Puerto 5678 expuesto: si usás 0.0.0.0:5678:5678 en lugar de 127.0.0.1:5678:5678, n8n queda accesible sin SSL directamente
Errores comunes al configurar n8n con Docker Compose

Seguridad adicional para n8n en producción

Además de SSL y contraseñas seguras, implementá estas medidas para proteger tu instancia:

# Configurar UFW (firewall)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# Instalar fail2ban para proteger SSH
sudo apt install -y fail2ban
sudo systemctl enable fail2ban

También es recomendable configurar actualizaciones automáticas de seguridad del sistema operativo:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Preguntas frecuentes sobre n8n docker compose producción

¿Cuánta RAM necesito para correr n8n con Docker Compose en producción?

Para un uso moderado (menos de 50 workflows activos), 2 GB de RAM son suficientes. Si tenés workflows pesados con procesamiento de archivos o muchas ejecuciones simultáneas, apuntá a 4 GB. PostgreSQL y n8n juntos consumen entre 500 MB y 1.5 GB dependiendo de la carga.

¿Puedo usar MySQL en lugar de PostgreSQL para n8n docker compose producción?

Sí, n8n soporta MySQL y MariaDB además de PostgreSQL. Sin embargo, el equipo de n8n recomienda oficialmente PostgreSQL para producción porque tiene mejor rendimiento con las consultas que n8n genera y mejor soporte de tipos de datos JSON.

¿Cómo migro de SQLite a PostgreSQL en n8n?

n8n incluye un comando de exportación/importación. Primero exportás los workflows con n8n export:workflow --all y las credenciales con n8n export:credentials --all. Luego levantás la nueva instancia con PostgreSQL e importás todo. Tené en cuenta que las credenciales necesitan la misma encryption key.

¿Es mejor usar Traefik o Nginx como proxy inverso para n8n?

Ambos funcionan bien. Nginx es más simple de configurar y tiene toneladas de documentación. Traefik se integra nativamente con Docker y maneja certificados SSL automáticamente sin Certbot. Para un setup simple de n8n docker compose producción, Nginx es la opción más directa.

¿Cada cuánto debo actualizar n8n en producción?

Revisá las notas de cada release antes de actualizar. Las versiones menores suelen ser seguras, pero las mayores pueden incluir cambios que rompan compatibilidad. Una buena práctica es actualizar cada 2-4 semanas y siempre hacer un backup de PostgreSQL antes de cualquier actualización.

¿Vale la pena? Nuestra opinión

Configurar n8n docker compose producción con PostgreSQL + Nginx + SSL es el estándar para proyectos serios de automatización. Dedicá una hora a configurarlo correctamente desde el principio y vas a tener una plataforma estable, actualizable y con backups automáticos que va a funcionar sin problemas durante años.

Lo más importante es no saltarte los basics: contraseñas seguras en el .env, backups diarios de PostgreSQL, firewall configurado y SSL activo. Con eso cubierto, tu instancia de n8n está lista para manejar cualquier carga de trabajo en producción.

Si te interesa ir más allá, podés explorar cómo agregar workflows avanzados de automatización con n8n o cómo dominar Docker Compose para otros proyectos de self-hosting.


También te puede interesar

Previous

n8n con Caddy como Reverse Proxy: Config HTTPS Fácil

Next

Configurar Dominio Personalizado y SSL en n8n: Guía 2026