Guía completa de solución de problemas de n8n auto-alojado 2025: Correción de tamaño de datos de ejecución y problemas de webhooks con Traefik
Última actualización: 15 de octubre de 2025
Auto-alojar n8n ofrece ejecuciones de flujo de trabajo ilimitadas, control completo de datos y ahorros significativos en comparación con los planes en la nube. Pero en realidad, las instancias auto-alojadas enfrentan desafíos únicos que los usuarios de la nube nunca encuentran – específicamente en torno al manejo de datos grandes y la configuración de webhooks con proxies inversos.
En junio de 2025, publicamos dos guías de solución de problemas abordando estos asuntos por separado. El problema es que no existía una guía integral para despliegues de n8n en producción con proxy inverso Traefik que abordara ambos problemas comunes juntos.
Esta guía combina ambas correcciones originales, proporciona configuración completa de Traefik con soporte WebSocket, incluye los nuevos requisitos de task runners de 2025 y ofrece archivos docker-compose listos para producción que puede desplegar de inmediato.
Índice de contenidos
- Diagnóstico rápido: ¿Qué problema tiene?
- Comprensión de los dos problemas principales
- Corrección #1: Error de datos de ejecución demasiado grandes
- Corrección #2: Problemas con las URL de webhooks
- Configuración completa de producción con Traefik
- Requisito 2025: Task Runners
- Referencia de variables de entorno
- Ejemplos de Docker Compose
- Prueba de su configuración
- Solución de problemas comunes
Diagnóstico rápido: ¿Qué problema tiene?
Síntoma: "Existing execution data is too large"
Ve este error cuando:
- Hace clic en "Execute Node" durante el desarrollo de flujos de trabajo
- Prueba flujos de trabajo con grandes conjuntos de datos o muchos elementos
- Usa el modo de ejecución parcial (probando nodos individuales)
- Procesa transformaciones complejas con múltiples ramas
Necesita: Corrección #1: Tamaño de datos de ejecución
Síntoma: Los webhooks muestran URLs incorrectas o no funcionan
Ve esto cuando:
- Las URLs de webhooks se muestran con números de puerto (ej.,
:5678) - Los servicios externos (Slack, GitHub, Stripe) no pueden alcanzar sus webhooks
- Los webhooks funcionan en modo de prueba pero fallan en producción
- Está usando un proxy inverso (Nginx, Traefik, Caddy)
Necesita: Corrección #2: Configuración de URL de webhooks
Síntoma: Advertencias de deprecación sobre task runners
Ve registros que dicen:
Running n8n without task runners is deprecated. Task runners will be
turned on by default in a future version.
Necesita: Configuración de Task Runners
Síntoma: Quiere una configuración completa y lista para producción
Necesita:
- Ambas correcciones aplicadas correctamente
- Proxy inverso Traefik con HTTPS automático
- Mejores prácticas y seguridad de producción
- Límites de recursos y monitoreo adecuado
Ir a: Configuración completa de producción
Comprensión de los dos problemas principales
Por qué n8n Cloud no tiene estos problemas
n8n Cloud maneja automáticamente límites de memoria más altos para ejecución parcial, URLs de webhooks correctas, almacenamiento optimizado de datos binarios y actualizaciones automáticas incluyendo todos los nuevos requisitos. Cuando auto-aloja, usted es responsable de estas configuraciones.
Las causas raíz
Problema #1: Límite de tamaño de datos de ejecución
El límite predeterminado de 16MB para datos de ejecución parcial enviados al backend genera errores al trabajar con grandes conjuntos de datos, muchas ramas de flujo de trabajo o transformaciones complejas. El problema es que el desarrollo de flujos de trabajo se vuelve frustrante – no puede probar nodos individuales durante el desarrollo. La solución es directa: la variable de entorno N8N_PAYLOAD_SIZE_MAX.
Problema #2: Generación de URL de webhooks
n8n intenta auto-detectar su URL pública, pero esta auto-detección falla cuando está detrás de un proxy inverso. Los servicios externos reciben URLs de webhook incorrectas con puertos o nombres de host internos – las integraciones fallan silenciosamente. La solución: la variable de entorno WEBHOOK_URL.
Corrección #1: Error de datos de ejecución demasiado grandes
El problema en detalle
Cuando ejecuta solo una parte de un flujo de trabajo (haciendo clic en "Execute Node" en el editor), n8n necesita cargar los datos de ejecución anteriores para proporcionar contexto a ese nodo. Por defecto, n8n limita esta transferencia de datos a 16MB para prevenir problemas de memoria en servidores más pequeños.
El mensaje de error
Según la documentación oficial de n8n:
Please execute the whole workflow, rather than just the node.
(Existing execution data is too large.)
Este error aparece al procesar miles de elementos en un solo nodo, trabajar con grandes respuestas JSON de API, transformar grandes conjuntos de datos con nodos de código o usar flujos de trabajo con muchas ramas paralelas.
La solución: N8N_PAYLOAD_SIZE_MAX
La corrección es simple pero requiere comprender los recursos disponibles de su servidor.
Configuraciones recomendadas por RAM del servidor
| RAM del servidor | N8N_PAYLOAD_SIZE_MAX | Valor en bytes | Porcentaje de RAM |
|---|---|---|---|
| 2GB o menos | 64MB | 67108864 | ~3% |
| 4GB | 128MB | 134217728 | ~3% |
| 8GB | 256MB | 268435456 | ~3% |
| 16GB+ | 512MB | 536870912 | ~3% |
Regla general: Use menos del 20% de su RAM disponible para mantener el sistema estable bajo carga.
Implementación con Docker Compose
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_PORT=5678
# Payload size fix (256MB for 8GB+ RAM servers)
- N8N_PAYLOAD_SIZE_MAX=268435456
# Binary data optimization (highly recommended)
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_TTL=1440 # 24 hours
volumes:
- n8n_data:/home/node/.n8n
# Resource limits (adjust based on your server)
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
volumes:
n8n_data:
Comprensión del modo de datos binarios
Predeterminado: Almacenamiento en memoria (No recomendado)
# This is the default - DON'T use in production
N8N_DEFAULT_BINARY_DATA_MODE=default
Problemas: Almacena archivos (imágenes, PDFs, etc.) en RAM, desperdicia memoria preciosa, no es adecuado para cargas de trabajo de producción, limita cuántos archivos puede procesar.
De nuestras pruebas: El modo predeterminado usa ~315MB de RAM vs 211MB con modo de sistema de archivos – eso son ~100MB de RAM ahorrados.
Recomendado: Almacenamiento en sistema de archivos
N8N_DEFAULT_BINARY_DATA_MODE=filesystem
N8N_BINARY_DATA_TTL=1440 # Clean up after 24 hours (value in minutes)
Beneficios: Almacena archivos en disco en lugar de RAM, rendimiento significativamente mejor con archivos grandes, listo para producción y recomendado por n8n, limpieza automática con TTL previene acumulación en disco.
Importante: Si usa el modo de cola (ejecución distribuida basada en Redis), debe mantener el modo predeterminado de datos binarios ya que el almacenamiento en sistema de archivos no es compatible con el modo de cola.
Impacto en el mundo real
De nuestras pruebas en Docker en octubre de 2025 con n8n versión 1.115.2:
| Configuración | Uso de memoria | Diferencia |
|---|---|---|
| Predeterminado (sin correcciones) | 315 MB | Línea base |
| Con corrección de payload + modo sistema de archivos | 211 MB | -104 MB |
Hallazgo clave: La combinación de tamaño de payload aumentado y modo binario de sistema de archivos en realidad reduce el uso de memoria porque los datos se manejan de manera más eficiente en disco en lugar de en RAM.
Corrección #2: Problemas con las URL de webhooks
El problema en detalle
Cuando n8n genera URLs de webhook para mostrar en el editor y registrar con servicios externos, intenta auto-detectar su URL pública. Detrás de un proxy inverso, esta auto-detección falla estrepitosamente.
Lo que verá (Las URLs incorrectas)
http://n8n.yourdomain.com:5678/webhook/abc123
Problemas con esta URL:
- Número de puerto incluido (
:5678) – los servicios externos típicamente no pueden alcanzar puertos no estándar - Protocolo incorrecto (http vs https) – muchos servicios requieren HTTPS
- Nombre de host interno – podría ser el nombre del contenedor Docker en lugar del dominio público
Por qué fallan los servicios externos
Servicios como GitHub, Slack, Stripe, Zoom, Google Sheets y cientos más intentan enviar webhooks a estas URLs incorrectas y fallan silenciosamente. Configura la integración, parece correcta en la interfaz, pero las notificaciones nunca llegan.
La solución: Variable de entorno WEBHOOK_URL
Según la documentación oficial de n8n:
"La variable de entorno WEBHOOK_URL se usa para establecer manualmente la URL del webhook para que n8n pueda mostrarla en la interfaz del editor y registrar las URLs de webhook correctas con servicios externos. Al ejecutar n8n detrás de un proxy inverso, es importante establecer esta variable".
Configuración básica
environment:
- WEBHOOK_URL=https://n8n.yourdomain.com
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
- N8N_PROTOCOL=https
- N8N_HOST=n8n.yourdomain.com
- N8N_TRUST_PROXY_HEADER=true
- N8N_PROXY_HOPS=1
Qué hace cada variable
WEBHOOK_URL (LA MÁS IMPORTANTE)
- La URL pública para todos los endpoints de webhook
- Se usa al registrar webhooks con servicios externos
- Debe coincidir exactamente con su configuración de Traefik/proxy inverso
- Nota de versión: Renombrada de
WEBHOOK_TUNNEL_URLen v0.227.0, nombre antiguo eliminado en n8n 1.0
N8N_EDITOR_BASE_URL
- La URL para acceder a la interfaz web de n8n
- Generalmente la misma que WEBHOOK_URL
- Se muestra en la barra de direcciones del navegador y en invitaciones por correo
N8N_PROTOCOL
- Establecer en
httpspara producción (con SSL/TLS) - Establecer en
httpsolo para pruebas locales - Debe coincidir con la terminación de su proxy inverso
N8N_HOST
- Solo su nombre de dominio público
- No incluya protocolo (
https://) ni puerto - Ejemplo:
n8n.yourdomain.comnohttps://n8n.yourdomain.com:443
N8N_TRUST_PROXY_HEADER
- Debe ser
truecuando está detrás de un proxy inverso - Permite que n8n vea las direcciones IP reales del cliente desde los encabezados del proxy
- Requerido para el manejo adecuado de solicitudes y seguridad
N8N_PROXY_HOPS
- Establecer en
1cuando está detrás de un proxy inverso - Establecer en
2si está detrás de dos proxies (raro) - Indica a n8n cuántas capas de proxy confiar
Prueba de URLs de webhooks
Antes de la corrección
En la interfaz de n8n, cree un nodo Webhook y verifique la URL mostrada:
http://n8n.example.com:5678/webhook/abc123 ❌ Incorrecto
Después de la corrección
El mismo nodo webhook ahora muestra:
https://n8n.example.com/webhook/abc123 ✅ Correcto
Diferencia crítica: Los servicios externos ahora pueden alcanzar esta URL porque usa el puerto HTTPS estándar 443 (manejado por su proxy inverso) en lugar del puerto interno 5678.
Configuración completa de producción con Traefik
¿Por qué Traefik?
Traefik es un proxy inverso moderno perfectamente adecuado para despliegues Docker – HTTPS automático a través de Let's Encrypt sin gestión manual de certificados, descubrimiento de servicios que detecta automáticamente contenedores a través de etiquetas Docker, soporte WebSocket crítico para la funcionalidad de webhooks de n8n, configuración fácil con solo etiquetas Docker en lugar de archivos de configuración complejos, y un panel integrado para monitorear el enrutamiento y los certificados en tiempo real.
Descripción general de la arquitectura
Internet
↓
[Traefik Reverse Proxy]
↓ HTTPS (Let's Encrypt)
↓ WebSocket Support
[n8n Container]
↓ Internal Network [PostgreSQL Database]
Configuración crítica: Soporte WebSocket
Esta es la configuración que se omite con más frecuencia y causa fallos en los webhooks:
labels:
# WebSocket middleware (ABSOLUTELY REQUIRED)
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"
# Apply middleware to router
- "traefik.http.routers.n8n.middlewares=n8n-websocket"
Sin encabezados WebSocket:
- ❌ Los webhooks en tiempo real fallan
- ❌ Los webhooks de producción expiran
- ❌ Los servicios externos no pueden mantener conexiones persistentes
- ❌ Los errores de integración aparecen de forma intermitente e impredecible
Docker Compose completo de producción
Esta configuración combina ambas correcciones, incluye Traefik con soporte WebSocket adecuado y sigue las mejores prácticas de producción:
version: '3.8'
networks:
traefik-net:
external: true
n8n-internal:
internal: true
services:
# PostgreSQL Database
postgres:
image: postgres:16-alpine
container_name: n8n-postgres
restart: unless-stopped
networks:
- n8n-internal
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${DB_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
deploy:
resources:
limits:
memory: 512M
# n8n Application
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
networks:
- traefik-net
- n8n-internal
# Traefik Configuration Labels
labels:
# Enable Traefik for this container
- "traefik.enable=true"
- "traefik.docker.network=traefik-net"
# Router configuration
- "traefik.http.routers.n8n.rule=Host(`${N8N_DOMAIN}`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
# Service configuration
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
# Middleware: Request size limit (100MB)
- "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=104857600"
# Middleware: WebSocket support (CRITICAL - DO NOT SKIP)
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"
# Middleware: Security headers
- "traefik.http.middlewares.n8n-security.headers.customResponseHeaders.X-Robots-Tag=noindex,nofollow"
- "traefik.http.middlewares.n8n-security.headers.sslProxyHeaders.X-Forwarded-Proto=https"
# Apply ALL middlewares
- "traefik.http.routers.n8n.middlewares=n8n-buffering,n8n-websocket,n8n-security"
environment:
# Database Configuration
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
# FIX #2: Webhook URL Configuration
- WEBHOOK_URL=https://${N8N_DOMAIN}
- N8N_EDITOR_BASE_URL=https://${N8N_DOMAIN}
- N8N_PROTOCOL=https
- N8N_HOST=${N8N_DOMAIN}
- N8N_PORT=5678
- N8N_TRUST_PROXY_HEADER=true
- N8N_PROXY_HOPS=1
# FIX #1: Payload Size Configuration
- N8N_PAYLOAD_SIZE_MAX=268435456 # 256MB
# Binary Data Management
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_TTL=1440 # 24 hours
# 2025 Requirement: Task Runners
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=internal
- N8N_RUNNERS_MAX_CONCURRENCY=5
# Production Optimizations
- NODE_ENV=production
- EXECUTIONS_DATA_MAX_AGE=168 # 7 days
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
- N8N_LOG_LEVEL=info
- N8N_LOG_OUTPUT=console
# Timezone (adjust to your location)
- GENERIC_TIMEZONE=America/New_York
- TZ=America/New_York
# Security
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
# Resource Limits (8GB+ RAM server)
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
reservations:
memory: 1G
cpus: '1.0'
# Health Check
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
n8n_data:
postgres_data:
Configuración de Traefik
Si aún no tiene Traefik ejecutándose, aquí está la configuración completa:
Paso 1: Crear la red de Traefik
docker network create traefik-net
Paso 2: Crear la configuración de Traefik
Cree traefik/traefik.yml:
api:
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik-net
certificatesResolvers:
letsencrypt:
acme:
email: your-email@example.com # CHANGE THIS
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
log:
level: INFO
accessLog: {}
Paso 3: Crear Docker Compose de Traefik
Cree traefik/docker-compose.yml:
version: '3.8'
networks:
traefik-net:
external: true
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- traefik-net
ports:
- "80:80"
- "443:443"
- "8080:8080" # Dashboard (secure this in production!)
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
Paso 4: Crear archivo de entorno
Cree .env en su directorio de n8n:
# Domain Configuration
N8N_DOMAIN=n8n.yourdomain.com
# Database Password (generate secure password)
DB_PASSWORD=your_secure_db_password_here
# n8n Encryption Key (generate random string)
N8N_ENCRYPTION_KEY=your_encryption_key_here
Genere valores seguros:
# For DB_PASSWORD
openssl rand -base64 32
# For N8N_ENCRYPTION_KEY
openssl rand -hex 32
Paso 5: Lanzar todo
# Start Traefik first
cd traefik
docker compose up -d
# Wait a few seconds, then start n8n
cd ../n8n
docker compose up -d
# Watch logs to verify startup
docker compose logs -f n8n
Verificación de su configuración
Verificar el panel de Traefik
Visite http://your-server-ip:8080 (o configure un dominio para el panel)
Debería mostrar:
- ✅ Router de n8n activo con estado verde
- ✅ Certificado obtenido de Let's Encrypt
- ✅ Servicio marcado como saludable
Verificar acceso a n8n
Visite https://n8n.yourdomain.com
Debería mostrar:
- ✅ HTTPS funcionando con certificado válido de Let's Encrypt
- ✅ Sin advertencias de seguridad del navegador
- ✅ Página de inicio de sesión/configuración de n8n aparece correctamente
Verificar URLs de webhooks
- Inicie sesión en n8n
- Cree un nuevo flujo de trabajo
- Añada un nodo Webhook
- Verifique la "URL de Producción" mostrada
Esperado:
https://n8n.yourdomain.com/webhook/abc123
NO esto (significa que la configuración es incorrecta):
http://n8n.yourdomain.com:5678/webhook/abc123 ❌
Requisito 2025: Task Runners
¿Qué son los Task Runners?
Los task runners ejecutan código definido en nodos de Código dentro de procesos aislados en lugar del proceso principal de n8n. Esto proporciona mejor seguridad a través de entornos aislados, estabilidad mejorada donde los errores de código no bloquean el proceso principal, y compatibilidad futura ya que serán requeridos en próximas versiones de n8n.
Por qué esto importa ahora
De la documentación oficial de n8n:
"Ejecutar n8n sin task runners está deprecado. Los task runners se activarán por defecto en una versión futura. Se aconseja a los usuarios establecer N8N_RUNNERS_ENABLED=true ahora para evitar posibles problemas en el futuro".
De nuestros registros de prueba (octubre de 2025):
There are deprecations related to your environment variables:
- N8N_RUNNERS_ENABLED -> Running n8n without task runners is deprecated.
Configuración
Modo interno (Recomendado para servidor único)
environment:
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=internal
- N8N_RUNNERS_MAX_CONCURRENCY=5
n8n lanza el task runner como proceso hijo – configuración más simple sin infraestructura adicional necesaria, adecuada para la mayoría de despliegues auto-alojados, mínima sobrecarga de rendimiento.
Modo externo (Para configuraciones distribuidas)
environment:
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_AUTH_TOKEN=your_secure_token
Contenedores de task runner separados proporcionan mejor aislamiento de recursos para flujos de trabajo de alto volumen, permiten escalado horizontal en múltiples servidores, pero requieren orquestación (Docker Swarm, Kubernetes).
Verificación de Task Runners
Verificar lista de procesos
docker exec n8n ps aux
Sin task runners (3 procesos):
PID USER TIME COMMAND
1 node 0:00 tini -- /docker-entrypoint.sh
7 node 0:12 node /usr/local/bin/n8n
Con task runners (4 procesos):
PID USER TIME COMMAND
1 node 0:00 tini -- /docker-entrypoint.sh
7 node 0:16 node /usr/local/bin/n8n
18 node 0:10 node [...]/task-runner/dist/start.js
Evidencia: Proceso de task runner visible con PID 18.
Verificar registros
docker logs n8n | grep -i runner
Debería ver:
n8n Task Broker ready on 127.0.0.1, port 5679
Registered runner "JS Task Runner" (zCWpF0Eb_LJsqWYvLm5t1)
Impacto en el uso de recursos
De nuestras pruebas en Docker (octubre de 2025, n8n versión 1.115.2):
| Configuración | Memoria | CPU | Procesos |
|---|---|---|---|
| Sin task runners | 214 MB | 0.14% | 3 |
| Con task runners | 289 MB | 0.29% | 4 |
| Diferencia | +75 MB | +0.15% | +1 |
Sobrecarga mínima. Los beneficios – seguridad, estabilidad, preparación para el futuro – superan ampliamente el pequeño costo de recursos.
Referencia de variables de entorno
Lista completa de variables
| Variable | Tipo | Predeterminado | Propósito | Prioridad |
|---|---|---|---|---|
| Variables críticas | ||||
WEBHOOK_URL | String | – | URL pública de webhook | REQUERIDO con proxy inverso |
N8N_PAYLOAD_SIZE_MAX | Number | 16777216(16MB) | Tamaño máx. de datos de ejecución | REQUERIDO para datos grandes |
N8N_RUNNERS_ENABLED | Boolean | false | Habilitar task runners | REQUERIDO para 2025 |
N8N_TRUST_PROXY_HEADER | Boolean | false | Confiar en encabezados del proxy inverso | REQUERIDO con proxy |
| Configuración de webhooks | ||||
N8N_EDITOR_BASE_URL | String | – | URL de la interfaz del editor | Recomendado |
N8N_PROTOCOL | String | http | Protocolo (http/https) | Producción |
N8N_HOST | String | localhost | Nombre de host público | Producción |
N8N_PORT | Number | 5678 | Puerto interno | Opcional |
N8N_PROXY_HOPS | Number | 0 | Número de proxies inversos | Establecer en 1 con proxy |
| Rendimiento | ||||
N8N_DEFAULT_BINARY_DATA_MODE | String | default | Modo de almacenamiento binario | Recomendado |
N8N_BINARY_DATA_TTL | Number | 60 | Limpieza binaria (minutos) | Recomendado |
| Task Runners | ||||
N8N_RUNNERS_MODE | String | internal | Modo de task runner | Si runners habilitados |
N8N_RUNNERS_MAX_CONCURRENCY | Number | 5 | Máx. task runners concurrentes | Opcional |
Presets de configuración por escenario
Escenario A: Desarrollo (Máquina local)
environment:
- N8N_PORT=5678
Usar cuando: Pruebas locales, sin proxy inverso, sin requisitos de producción
Escenario B: Detrás de proxy inverso (Sin datos grandes)
environment:
- N8N_PORT=5678
- WEBHOOK_URL=https://n8n.yourdomain.com
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
- N8N_PROTOCOL=https
- N8N_HOST=n8n.yourdomain.com
- N8N_TRUST_PROXY_HEADER=true
- N8N_PROXY_HOPS=1
- N8N_RUNNERS_ENABLED=true
Usar cuando: Instancia pública de n8n, webhooks necesarios, flujos de trabajo más pequeños
Escenario C: Configuración completa de producción
environment:
# Database
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
# Webhooks
- WEBHOOK_URL=https://n8n.yourdomain.com
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com
- N8N_PROTOCOL=https
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_TRUST_PROXY_HEADER=true
- N8N_PROXY_HOPS=1
# Performance
- N8N_PAYLOAD_SIZE_MAX=268435456 # 256MB
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_TTL=1440
# Task Runners
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=internal
- N8N_RUNNERS_MAX_CONCURRENCY=5
# Production
- NODE_ENV=production
- EXECUTIONS_DATA_MAX_AGE=168 # 7 days
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
- N8N_LOG_LEVEL=info
# Security
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
Usar cuando: Despliegue de producción con todas las funciones, flujos de trabajo grandes, acceso público
Ejemplos de Docker Compose
Los cuatro escenarios de nuestro entorno de pruebas están disponibles. Estas configuraciones han sido validadas con n8n versión 1.115.2 en octubre de 2025.
Comparación de uso de recursos (De nuestras pruebas)
| Escenario | Memoria | CPU | Procesos | Descripción |
|---|---|---|---|---|
| Predeterminado | 315 MB | 0.00% | 3 | Sin correcciones, línea base |
| Corrección de payload | 211 MB | 0.00% | 3 | Payload + modo sistema de archivos |
| Corrección de webhook | 215 MB | 0.14% | 3 | Solo config. de webhook |
| Producción | 289 MB | 0.29% | 4 | Todas las correcciones + task runners |
Hallazgo clave: La configuración de producción con todas las correcciones usa MENOS memoria que la configuración predeterminada debido al modo binario de sistema de archivos.
Prueba de su configuración
Lista de verificación previa al despliegue
1. Configuración DNS
# Verify DNS points to your server
nslookup n8n.yourdomain.com
# Should return your server's public IP
2. Disponibilidad de puertos
# Check if required ports are free
sudo netstat -tlnp | grep -E '(80|443|5678)'
# Should show nothing or only Traefik on 80/443
3. Instalación de Docker
# Verify Docker
docker --version
# Verify Docker Compose
docker compose version
4. Variables de entorno
# Verify .env file exists
cat .env
# Should show N8N_DOMAIN, DB_PASSWORD, N8N_ENCRYPTION_KEY
Pasos de despliegue
# Step 1: Create Traefik network
docker network create traefik-net
# Step 2: Start Traefik
cd traefik
docker compose up -d
# Step 3: Wait for Traefik to be ready
sleep 10
# Step 4: Start n8n
cd ../n8n
docker compose up -d
# Step 5: Watch logs for any errors
docker compose logs -f n8n
Pruebas posteriores al despliegue
Prueba 1: Acceso HTTPS
curl -I https://n8n.yourdomain.com
Esperado: HTTP/2 200 (o HTTP/1.1 200)
Prueba 2: Redirección HTTP a HTTPS
curl -I http://n8n.yourdomain.com
Esperado: HTTP/1.1 308 Permanent Redirect con Location: https://n8n.yourdomain.com
Prueba 3: Salud del contenedor
docker ps
Esperado: Tanto n8n como n8n-postgres mostrando estado (healthy)
Prueba 4: Formato de URL de webhook
- Inicie sesión en la interfaz web de n8n
- Cree un nuevo flujo de trabajo
- Añada un nodo Webhook
- Verifique la URL de Producción mostrada
Formato esperado:
https://n8n.yourdomain.com/webhook/abc123
NO esperado (error de configuración):
http://n8n.yourdomain.com:5678/webhook/abc123 ❌
Prueba 5: Task Runners activos
docker logs n8n | grep -i runner
Salida esperada:
Registered runner "JS Task Runner"
Prueba 6: Variables de entorno aplicadas
docker exec n8n env | grep N8N_PAYLOAD_SIZE_MAX
Esperado: N8N_PAYLOAD_SIZE_MAX=268435456
Solución de problemas comunes
Problema: HTTPS no funciona
Síntomas: El navegador muestra advertencia "No seguro", mensajes de error de certificado, no puede acceder via HTTPS
Diagnóstico:
# Check Traefik logs for errors
docker logs traefik | grep -i error
# Check certificate file exists
ls -la traefik/letsencrypt/acme.json
# Verify DNS resolution
nslookup n8n.yourdomain.com
Soluciones:
- DNS no apunta al servidor: Actualice su registro DNS A para apuntar a la IP pública del servidor, espere la propagación DNS (hasta 24 horas, generalmente mucho más rápido), pruebe desde otra red:
dig n8n.yourdomain.com +short - Puerto 80 bloqueado: Let's Encrypt necesita el puerto 80 para el desafío HTTP. Verifique el firewall:
sudo ufw status. Permita si está bloqueado:sudo ufw allow 80/tcp && sudo ufw allow 443/tcp - Email inválido en configuración de Traefik: Edite
traefik/traefik.yml, actualicecertificatesResolvers.letsencrypt.acme.emaila una dirección válida, reinicie Traefik:docker compose restart
Problema: Los webhooks devuelven 404
Síntomas: Los servicios externos reportan fallos en webhooks, las URLs de webhook parecen correctas pero no funcionan, el modo de prueba funciona pero el modo de producción falla
Diagnóstico:
# Test webhook directly
curl -v https://n8n.yourdomain.com/webhook/test
# Check Traefik routing logs
docker logs traefik | grep webhook
# Verify n8n sees requests
docker logs n8n | grep webhook
Soluciones:
- Middleware WebSocket faltante: Verifique estas etiquetas en docker-compose.yml:
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Upgrade=websocket"
- "traefik.http.middlewares.n8n-websocket.headers.customrequestheaders.Connection=Upgrade"
- "traefik.http.routers.n8n.middlewares=n8n-websocket"
- WEBHOOK_URL no configurada correctamente: Verifique la variable de entorno:
docker exec n8n env | grep WEBHOOK_URL. Debe coincidir exactamente con su dominio:WEBHOOK_URL=https://n8n.yourdomain.com - Configuración de red incorrecta: Verifique que n8n está en traefik-net:
docker inspect n8n | grep -A 5 Networks. Debe mostrar "traefik-net" en la salida
Problema: "Execution Data Too Large" sigue apareciendo
Síntomas: El error sigue ocurriendo después de establecer N8N_PAYLOAD_SIZE_MAX, los flujos de trabajo grandes fallan en "Execute Node"
Diagnóstico:
# Verify variable is set
docker exec n8n env | grep PAYLOAD
# Should show N8N_PAYLOAD_SIZE_MAX=268435456
Soluciones:
- Variable no aplicada (contenedor no reiniciado): Reinicie para aplicar cambios:
docker compose restart n8n. Verifique después del reinicio:docker exec n8n env | grep PAYLOAD - Necesita límite mayor para su flujo de trabajo: Para servidores de 16GB+ RAM, aumente a 512MB:
N8N_PAYLOAD_SIZE_MAX=536870912 - Tamaño de solicitud de Traefik demasiado pequeño: También aumente el límite de Traefik para que coincida:
"traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=209715200"
Problema: Alto uso de memoria
Síntomas: El contenedor usa >1.5GB RAM en reposo, el uso de memoria crece con el tiempo, errores de falta de memoria
Diagnóstico:
# Monitor memory
docker stats n8n
# Check binary data mode
docker exec n8n env | grep BINARY_DATA_MODE
Soluciones:
- No usa modo de sistema de archivos: Añada al entorno:
N8N_DEFAULT_BINARY_DATA_MODE=filesystemyN8N_BINARY_DATA_TTL=1440. Impacto: Ahorra ~100MB de RAM según nuestras pruebas - Ejecuciones antiguas acumulándose: Reduzca el período de retención:
EXECUTIONS_DATA_MAX_AGE=168(7 días en lugar de 14) yEXECUTIONS_DATA_PRUNE_MAX_COUNT=1000 - Límite del contenedor demasiado bajo: Aumente si el servidor tiene capacidad. Cambie el límite de memoria de 2G a 4G en la sección de recursos de despliegue
Conclusión
Lo que hemos resuelto
Esta guía integral aborda los dos problemas más comunes de n8n auto-alojado:
- ✅ Error de datos de ejecución demasiado grandes – Corregido con
N8N_PAYLOAD_SIZE_MAXy modo binario de sistema de archivos - ✅ Problemas con URLs de webhooks – Corregido con
WEBHOOK_URLy configuración adecuada de proxy inverso
Más estas adiciones críticas:
- ✅ Configuración completa de Traefik – Configuración lista para producción con soporte WebSocket
- ✅ Configuración de Task Runners – Requisito de 2025 para compatibilidad futura
- ✅ Mejores prácticas de producción – Límites de recursos, verificaciones de salud, encabezados de seguridad, monitoreo
- ✅ Configuraciones validadas – Todos los archivos docker-compose probados con n8n 1.115.2 en octubre de 2025
Puntos clave
Para correcciones rápidas:
- Establezca
N8N_PAYLOAD_SIZE_MAX=268435456para problemas de datos de ejecución (256MB para 8GB+ RAM) - Establezca
WEBHOOK_URL=https://your-domain.compara problemas de webhooks - Establezca
N8N_RUNNERS_ENABLED=truepara eliminar advertencias de deprecación - Use
N8N_DEFAULT_BINARY_DATA_MODE=filesystempara ahorrar ~100MB de RAM
Para despliegue en producción:
- Use nuestro docker-compose.yml completo con configuración de Traefik
- No omita el middleware WebSocket – absolutamente requerido para webhooks
- Incluya PostgreSQL para mejor rendimiento bajo carga
- Establezca límites de recursos apropiados según la capacidad de su servidor
- Implemente verificaciones de salud para recuperación automática
Para usuarios de Traefik (CRÍTICO):
- El middleware WebSocket es innegociable para la funcionalidad de webhooks
- Establezca el límite de tamaño del cuerpo de solicitud para igualar o superar el tamaño del payload
- Configure encabezados de seguridad (X-Robots-Tag, X-Forwarded-Proto)
- Asegúrese de que el DNS apunte a su servidor antes de iniciar Traefik (requisito de Let's Encrypt)
Novedades respecto a las publicaciones de junio de 2025
| Característica | Publicaciones junio 2025 | Esta guía |
|---|---|---|
| Corrección de datos de ejecución | ✅ Detallada | ✅ Incluida + mediciones de recursos |
| Corrección de webhook | ✅ Detallada | ✅ Incluida + integración con Traefik |
| Configuración de Traefik | ❌ No cubierta | ✅ Configuración completa |
| Soporte WebSocket | ❌ No cubierto | ✅ Enfatizado |
| Task runners | ❌ No cubiertos | ✅ Requisito 2025 |
| Docker-compose combinado | ❌ Separados | ✅ Listo para producción |
| Mediciones de recursos | ❌ Teóricas | ✅ Datos reales de pruebas |
| Variables de entorno | ✅ Cubiertas | ✅ Referencia completa |
Pruebas y validación
Nuestro entorno de pruebas (octubre de 2025):
- ✅ n8n versión 1.115.2
- ✅ Contenedores Docker ejecutándose por 2+ horas
- ✅ Todas las variables de entorno verificadas en contenedores en ejecución
- ✅ Uso de recursos medido con
docker stats - ✅ Proceso de task runner confirmado en lista de procesos
- ✅ Endpoints HTTP probados y accesibles
- ✅ Configuraciones validadas como funcionales
Próximos pasos
- Elija su escenario:
- Desarrollo: Configuración mínima
- Detrás de proxy inverso: Corrección de webhook + task runners
- Producción: Configuración completa con Traefik (recomendado)
- Despliegue:
- Copie el docker-compose.yml apropiado
- Cree el archivo .env con su dominio y contraseñas seguras
- Inicie Traefik primero, luego n8n
- Ejecute las pruebas posteriores al despliegue
- Valide:
- Verifique que HTTPS funciona con certificado válido
- Compruebe que las URLs de webhook muestran el formato correcto
- Pruebe con un gran conjunto de datos (si es necesario)
- Confirme que los task runners están registrados
- Monitoree:
- Observe el uso de recursos con
docker stats - Configure alertas de verificación de salud (monitoreo externo)
- Implemente rotación de registros para prevenir que el disco se llene
- Planifique copias de seguridad regulares de los volúmenes de datos
- Observe el uso de recursos con
Recursos relacionados
De junio de 2025:
- Solución del error "Existing execution data is too large" de n8n – Guía detallada de solución de problemas
- Corrección de problemas de webhooks en n8n – Guía completa de depuración de webhooks
Documentación oficial de n8n:
- Configuración de URL de webhooks
- Referencia de variables de entorno
- Task Runners
- Gestión de datos binarios
- Escalado de datos de ejecución
¿Preguntas o problemas?
Si encuentra problemas no cubiertos en esta guía:
- Revise nuestras publicaciones detalladas de solución de problemas de junio de 2025 para orientación adicional
- Consulte la documentación oficial de n8n para las últimas funciones
- Busque en los foros de la comunidad n8n problemas similares
- Consulte la sección de Solución de Problemas anterior para problemas comunes
- Contacte a tva para soporte profesional de implementación
Pruebas reproducibles
Todas las configuraciones en esta guía pueden reproducirse en su propio entorno – los archivos Docker Compose están listos para producción, las variables de entorno están documentadas y verificadas, se proporcionan comandos de prueba para validación, y las salidas esperadas están claramente especificadas. Puede validar cada afirmación en esta guía desplegando las configuraciones usted mismo y ejecutando las pruebas proporcionadas.
¿Necesita ayuda con la implementación?
Si desea que tva maneje su despliegue de n8n o necesita asistencia con la configuración de producción, póngase en contacto con nosotros. Implementamos estas configuraciones para organizaciones que buscan infraestructura n8n fiable y lista para producción.
Publicado: 15 de octubre de 2025
Probado con: n8n v1.115.2, Docker Compose v3.8, Traefik v2.10
Requisitos del servidor: 4GB+ RAM, 2+ núcleos de CPU recomendados para producción
Basado en: Documentación oficial de n8n, pruebas validadas en Docker y mejores prácticas de la comunidad