Despliegue n8n Docker Compose: Guía Completa

2026.05.07
Technology
975 Words
Despliegue n8n Docker Compose: Guía Completa

Despliegue de n8n: Configuración con Docker Compose

Parte 1 de 3. Parte 2: Despliegue en Kubernetes | Parte 3: Configuración en Profundidad

Una vez vi a una startup perder tres días de leads de ventas porque su integración con Zapier alcanzó un límite de tasa durante el lanzamiento de un producto. La cola de webhooks se saturó, las credenciales expiraron silenciosamente y nadie se dio cuenta hasta que el equipo de CRM preguntó por qué no llegaron los leads del lunes. Ese solo incidente les costó más en ingresos perdidos de lo que les costaría ejecutar una plataforma de automatización autohospedada durante un año entero.

Por eso yo uso n8n (una herramienta de automatización de flujos de trabajo de código abierto) en mi propia infraestructura. n8n te ofrece el constructor visual de flujos basado en nodos que ofrecen herramientas como Zapier y Make, pero con una diferencia crítica: tú controlas los datos, las credenciales y el entorno de ejecución. En 2025, con los nodos AI Agent, integraciones LLM y soporte para LLMs autohospedados, n8n ha evolucionado de una simple herramienta de automatización a una plataforma real para orquestación con IA.

En esta guía te explico cómo desplegar n8n en dos configuraciones: Docker Compose para configuraciones de nodo único y Kubernetes para cargas de trabajo de producción. Cubro seguridad de webhooks, encriptación de credenciales, queue mode con Redis, backend de PostgreSQL y cómo conectar nodos AI Agent con tus propios LLMs.

Qué vas a construir

Al final de esta guía, tendrás:

  • Una instancia de n8n en ejecución con backend de base de datos PostgreSQL
  • Queue mode respaldado por Redis para manejar ejecuciones concurrentes
  • Almacenamiento de credenciales encriptado y endpoints de webhook seguros
  • Un flujo de trabajo de AI Agent conectado a un LLM autohospedado
  • Manifiestos de Kubernetes que puedes integrar en un pipeline de GitOps

Prerrequisitos

Antes de empezar, asegúrate de tener lo siguiente en su lugar.

RequisitoMínimoRecomendadoComando de verificación
OSUbuntu 22.04Ubuntu 24.04 LTSlsb_release -a
CPU2 cores4+ coresnproc
RAM4 GB8 GBfree -h
Docker24.027.0+docker --version
Docker Compose2.202.27+docker compose version
Kubernetes1.281.30+ (opcional)kubectl version
GPUNingunaNVIDIA A10G (para LLMs locales)nvidia-smi

Nota de versión: Estas instrucciones aplican para n8n 1.50+. Si estás ejecutando una versión anterior, algunos nombres de variables de entorno pueden diferir.

Resumen de arquitectura

n8n puede ejecutarse en dos modos: regular (todo en un proceso) y queue (webhooks y workers separados). Para cualquier cosa más allá de experimentación personal, recomiendo sin dudar el queue mode.

En queue mode, la arquitectura se ve así:

┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Cliente │────▶│ n8n Web │────▶│ PostgreSQL │
│ (Browser) │ │ (Main) │ │ (Database) │
└─────────────┘ └──────┬──────┘ └─────────────┘
┌────────────┼────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Worker 1│ │ Worker 2│ │ Worker N│
└────┬────┘ └────┬────┘ └────┬────┘
└─────────────┼─────────────┘
┌─────────────┐
│ Redis │
│ (Queue) │
└─────────────┘

El proceso principal maneja la interfaz web, el ingreso de webhooks y las solicitudes de API. Los workers recogen trabajos de ejecución de Redis. PostgreSQL persiste los flujos de trabajo, ejecuciones y credenciales. Esta separación significa que puedes escalar workers independientemente de la capa web, y un flujo que falle no tirará abajo la UI.

Despliegue con Docker Compose

Docker Compose es el camino más rápido hacia una instancia de n8n funcionando. Yo uso esta configuración para entornos homelab, staging y cargas de producción más pequeñas bajo concurrencia moderada.

Paso 1: Crear el directorio del proyecto

Terminal window
mkdir -p ~/n8n-deployment/{postgres,redis}
cd ~/n8n-deployment

Paso 2: Escribir el archivo Docker Compose

Crea docker-compose.yml con la siguiente configuración. He anotado cada sección para que sepas qué hace.

docker-compose.yml
# n8n listo para producción con PostgreSQL, Redis y encriptación
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
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
timeout: 5s
retries: 5
networks:
- n8n-network
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- ./redis/data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- n8n-network
n8n:
image: n8nio/n8n:1.50
restart: unless-stopped
environment:
# Base de datos
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
# Queue mode
EXECUTIONS_MODE: queue
QUEUE_BULL_REDIS_HOST: redis
QUEUE_BULL_REDIS_PORT: 6379
# Seguridad
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
WEBHOOK_URL: ${WEBHOOK_URL}
# General
GENERIC_TIMEZONE: UTC
TZ: UTC
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
ports:
- "5678:5678"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./n8n-data:/home/node/.n8n
networks:
- n8n-network
# Opcional: Agregar workers para ejecución concurrente
n8n-worker:
image: n8nio/n8n:1.50
restart: unless-stopped
command: worker
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
QUEUE_BULL_REDIS_HOST: redis
QUEUE_BULL_REDIS_PORT: 6379
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
GENERIC_TIMEZONE: UTC
depends_on:
- redis
- postgres
deploy:
replicas: 2
networks:
- n8n-network
networks:
n8n-network:
driver: bridge

Paso 3: Crear el archivo de entorno

Crea .env en el mismo directorio. Nunca hagas commit de este archivo a Git.

Terminal window
# .env: mantén esto en secreto
POSTGRES_PASSWORD=$(openssl rand -base64 32)
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=$(openssl rand -base64 24)
WEBHOOK_URL=https://n8n.tudominio.com/

Genera valores seguros:

Terminal window
touch .env
chmod 600 .env
cat <<EOF > .env
POSTGRES_PASSWORD=$(openssl rand -base64 32)
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=$(openssl rand -base64 24)
WEBHOOK_URL=https://n8n.tudominio.com/
EOF

Paso 4: Iniciar el stack

Terminal window
docker compose up -d

Espera unos 30 segundos para que se ejecuten las migraciones de la base de datos, luego verifica:

Terminal window
docker compose ps
# Todos los servicios deben mostrar "healthy" o "running"
docker compose logs n8n | grep "Editor is now accessible"
# Salida esperada: "Editor is now accessible via: http://localhost:5678/"

Navega a http://localhost:5678 y completa el asistente de configuración inicial.

Problemas comunes

  • Puerto 5678 ya en uso: Cambia el mapeo del puerto del host a 8080:5678 en docker-compose.yml.
  • Permiso denegado en volúmenes: n8n se ejecuta como el usuario node (UID 1000). Asegúrate de que los directorios del host sean escribibles: sudo chown -R 1000:1000 ./n8n-data.

Preguntas frecuentes

¿Qué es n8n y en qué se diferencia de Zapier?

n8n es una plataforma de automatización de flujos de trabajo de código abierto. La diferencia clave con Zapier es que tú lo autohospedas: tus datos nunca salen de tu infraestructura, tus credenciales se quedan en tu base de datos encriptada, y no hay límites de uso por plan. Cambié a n8n cuando Zapier triplicó mi factura de automatización de la noche a la mañana.

¿Necesito queue mode para un despliegue pequeño?

Para unos pocos flujos ejecutándose ocasionalmente, el modo regular funciona bien. Activo queue mode en cuanto tengo más de 5 flujos activos o cualquier flujo que use webhooks en producción. El queue mode evita timeouts de webhook al separar la aceptación de solicitudes de la ejecución.

¿Puedo ejecutar n8n con SQLite en lugar de PostgreSQL?

Sí, n8n viene con SQLite por defecto. No lo uses en producción. SQLite no maneja escrituras concurrentes. Aprendí esto cuando un webhook con mucho tráfico corrompió la base de datos durante un pico. PostgreSQL maneja conexiones concurrentes correctamente y hace que los backups con pg_dump sean triviales.

¿Cómo aseguro la UI del editor de n8n?

Activa la autenticación básica con N8N_BASIC_AUTH_ACTIVE=true y una contraseña segura. Yo pongo n8n detrás de un proxy inverso con TLS y restrinjo el acceso por rango de IP cuando es posible. Nunca expongas el editor a internet público sin autenticación.

¿Qué pasa si PostgreSQL se cae?

n8n deja de procesar flujos hasta que la base de datos se recupere. Los workers encolan trabajos en la memoria de Redis, pero cuando Redis alcanza su límite de memoria, empieza a eliminar trabajos antiguos. Por eso ejecuto PostgreSQL con una réplica y backups automatizados.

¿Puedo conectar n8n a Ollama o vLLM?

Sí. Ambos exponen APIs compatibles con OpenAI. Apunta el nodo HTTP Request o el nodo AI Agent a la URL de tu servicio LLM local. Cubro esta configuración en detalle en la Parte 2.


Partes en esta serie: Parte 2: Despliegue en Kubernetes → | Parte 3: Configuración en Profundidad →

# N8N # ai-automation # workflow # docker # Kubernetes # redis # postgresql # deployment # self-hosted