tva
← Insights

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

  1. Diagnóstico rápido: ¿Qué problema tiene?
  2. Comprensión de los dos problemas principales
  3. Corrección #1: Error de datos de ejecución demasiado grandes
  4. Corrección #2: Problemas con las URL de webhooks
  5. Configuración completa de producción con Traefik
  6. Requisito 2025: Task Runners
  7. Referencia de variables de entorno
  8. Ejemplos de Docker Compose
  9. Prueba de su configuración
  10. 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 servidorN8N_PAYLOAD_SIZE_MAXValor en bytesPorcentaje de RAM
2GB o menos64MB67108864~3%
4GB128MB134217728~3%
8GB256MB268435456~3%
16GB+512MB536870912~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ónUso de memoriaDiferencia
Predeterminado (sin correcciones)315 MBLínea base
Con corrección de payload + modo sistema de archivos211 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:

  1. Número de puerto incluido (:5678) – los servicios externos típicamente no pueden alcanzar puertos no estándar
  2. Protocolo incorrecto (http vs https) – muchos servicios requieren HTTPS
  3. 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_URL en 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 https para producción (con SSL/TLS)
  • Establecer en http solo 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.com no https://n8n.yourdomain.com:443

N8N_TRUST_PROXY_HEADER

  • Debe ser true cuando 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 1 cuando está detrás de un proxy inverso
  • Establecer en 2 si 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

  1. Inicie sesión en n8n
  2. Cree un nuevo flujo de trabajo
  3. Añada un nodo Webhook
  4. 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ónMemoriaCPUProcesos
Sin task runners214 MB0.14%3
Con task runners289 MB0.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

VariableTipoPredeterminadoPropósitoPrioridad
Variables críticas
WEBHOOK_URLStringURL pública de webhookREQUERIDO con proxy inverso
N8N_PAYLOAD_SIZE_MAXNumber16777216(16MB)Tamaño máx. de datos de ejecuciónREQUERIDO para datos grandes
N8N_RUNNERS_ENABLEDBooleanfalseHabilitar task runnersREQUERIDO para 2025
N8N_TRUST_PROXY_HEADERBooleanfalseConfiar en encabezados del proxy inversoREQUERIDO con proxy
Configuración de webhooks
N8N_EDITOR_BASE_URLStringURL de la interfaz del editorRecomendado
N8N_PROTOCOLStringhttpProtocolo (http/https)Producción
N8N_HOSTStringlocalhostNombre de host públicoProducción
N8N_PORTNumber5678Puerto internoOpcional
N8N_PROXY_HOPSNumber0Número de proxies inversosEstablecer en 1 con proxy
Rendimiento
N8N_DEFAULT_BINARY_DATA_MODEStringdefaultModo de almacenamiento binarioRecomendado
N8N_BINARY_DATA_TTLNumber60Limpieza binaria (minutos)Recomendado
Task Runners
N8N_RUNNERS_MODEStringinternalModo de task runnerSi runners habilitados
N8N_RUNNERS_MAX_CONCURRENCYNumber5Máx. task runners concurrentesOpcional

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)

EscenarioMemoriaCPUProcesosDescripción
Predeterminado315 MB0.00%3Sin correcciones, línea base
Corrección de payload211 MB0.00%3Payload + modo sistema de archivos
Corrección de webhook215 MB0.14%3Solo config. de webhook
Producción289 MB0.29%4Todas 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

  1. Inicie sesión en la interfaz web de n8n
  2. Cree un nuevo flujo de trabajo
  3. Añada un nodo Webhook
  4. 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:

  1. 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
  2. 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
  3. Email inválido en configuración de Traefik: Edite traefik/traefik.yml, actualice certificatesResolvers.letsencrypt.acme.email a 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:

  1. 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"
  1. 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
  2. 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:

  1. 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
  2. Necesita límite mayor para su flujo de trabajo: Para servidores de 16GB+ RAM, aumente a 512MB: N8N_PAYLOAD_SIZE_MAX=536870912
  3. 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:

  1. No usa modo de sistema de archivos: Añada al entorno: N8N_DEFAULT_BINARY_DATA_MODE=filesystem y N8N_BINARY_DATA_TTL=1440. Impacto: Ahorra ~100MB de RAM según nuestras pruebas
  2. Ejecuciones antiguas acumulándose: Reduzca el período de retención: EXECUTIONS_DATA_MAX_AGE=168 (7 días en lugar de 14) y EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
  3. 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:

  1. Error de datos de ejecución demasiado grandes – Corregido con N8N_PAYLOAD_SIZE_MAX y modo binario de sistema de archivos
  2. Problemas con URLs de webhooks – Corregido con WEBHOOK_URL y configuración adecuada de proxy inverso

Más estas adiciones críticas:

  1. Configuración completa de Traefik – Configuración lista para producción con soporte WebSocket
  2. Configuración de Task Runners – Requisito de 2025 para compatibilidad futura
  3. Mejores prácticas de producción – Límites de recursos, verificaciones de salud, encabezados de seguridad, monitoreo
  4. 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=268435456 para problemas de datos de ejecución (256MB para 8GB+ RAM)
  • Establezca WEBHOOK_URL=https://your-domain.com para problemas de webhooks
  • Establezca N8N_RUNNERS_ENABLED=true para eliminar advertencias de deprecación
  • Use N8N_DEFAULT_BINARY_DATA_MODE=filesystem para 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ísticaPublicaciones junio 2025Esta 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

  1. 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)
  2. 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
  3. 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
  4. 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

Recursos relacionados

De junio de 2025:

Documentación oficial de n8n:

¿Preguntas o problemas?

Si encuentra problemas no cubiertos en esta guía:

  1. Revise nuestras publicaciones detalladas de solución de problemas de junio de 2025 para orientación adicional
  2. Consulte la documentación oficial de n8n para las últimas funciones
  3. Busque en los foros de la comunidad n8n problemas similares
  4. Consulte la sección de Solución de Problemas anterior para problemas comunes
  5. 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