tva
← Approfondimenti

Guida completa al self-hosting di n8n 2025: risolvere gli errori di dimensione dei dati di esecuzione e i problemi dei webhook con Traefik

Ultimo aggiornamento: 15 ottobre 2025

Il self-hosting di n8n offre esecuzioni illimitate dei flussi di lavoro, controllo completo dei dati e risparmi significativi rispetto ai piani cloud. Ma in realtà, le istanze gestite sulla propria infrastruttura affrontano problemi di cui gli utenti di n8n Cloud solitamente non devono occuparsi – in particolare riguardo alla gestione di grandi volumi di dati e alla configurazione dei webhook con i reverse proxy.

A giugno 2025, abbiamo pubblicato due guide alla risoluzione dei problemi che affrontavano queste questioni separatamente. Il problema è che non esisteva una guida completa per le installazioni in produzione di n8n con il reverse proxy Traefik che affrontasse insieme entrambi i problemi comuni.

Questa guida combina entrambe le soluzioni originali, fornisce la configurazione completa di Traefik con supporto WebSocket, include i nuovi requisiti dei task runner introdotti nel 2025 e offre file docker-compose pronti per la produzione che puoi implementare immediatamente.


Indice

  1. Diagnosi rapida: quale problema hai?
  2. Comprendere i due problemi principali
  3. Soluzione #1: errore per dati di esecuzione di dimensioni eccessive
  4. Soluzione #2: problemi con gli URL dei webhook
  5. Configurazione completa per la produzione con Traefik
  6. Requisito del 2025: task runner
  7. Guida alle variabili d’ambiente
  8. Esempi di Docker Compose
  9. Test della configurazione
  10. Risoluzione dei problemi comuni

Diagnosi rapida: quale problema hai?

Sintomo: “Existing execution data is too large”

Vedi questo errore quando:

  • Fai clic su “Execute Node” durante lo sviluppo del flusso di lavoro
  • Testi flussi di lavoro con dataset di grandi dimensioni o molti elementi
  • Usi la modalità di esecuzione parziale (test dei singoli nodi)
  • Elabori trasformazioni complesse con più rami

Ti serve: Soluzione #1: dimensione dei dati di esecuzione


Sintomo: i webhook mostrano URL errati o non funzionano

Lo vedi quando:

  • Gli URL dei webhook vengono visualizzati con numeri di porta (es. :5678)
  • I servizi esterni (Slack, GitHub, Stripe) non riescono a raggiungere i tuoi webhook
  • I webhook funzionano in modalità test ma falliscono in produzione
  • Stai usando un reverse proxy (Nginx, Traefik, Caddy)

Ti serve: Soluzione #2: configurazione degli URL dei webhook


Sintomo: avvisi di deprecazione sui task runner

Vedi nei log:

Running n8n without task runners is deprecated. Task runners will be
turned on by default in a future version.

Ti serve: Configurazione dei task runner


Sintomo: vuoi una configurazione completa e pronta per la produzione

Ti serve:

  • Entrambe le soluzioni applicate correttamente
  • Reverse proxy Traefik con HTTPS automatico
  • Buone pratiche e sicurezza per la produzione
  • Limiti di risorse e monitoraggio appropriato

Vai a: Configurazione completa per la produzione


Comprendere i due problemi principali

Perché gli utenti di n8n Cloud affrontano raramente questi problemi

Su n8n Cloud, n8n gestisce per te la configurazione del server, ad esempio gli URL dei webhook, l’archiviazione dei dati binari e gli aggiornamenti. Con il self-hosting, sei responsabile di queste configurazioni.

Le cause di fondo

Problema #1: limite di dimensione dei dati di esecuzione

Il limite predefinito di 16 MiB per il corpo delle richieste inviate al backend, inclusi i dati di esecuzione parziale genera errori quando si lavora con dataset di grandi dimensioni, molti rami dei flussi di lavoro o trasformazioni complesse. Il problema è che lo sviluppo dei flussi di lavoro diventa frustrante – non puoi testare i singoli nodi durante lo sviluppo. La soluzione è semplice: la variabile d'ambiente N8N_PAYLOAD_SIZE_MAX.

Problema #2: generazione degli URL dei webhook

n8n tenta di rilevare automaticamente il tuo URL pubblico, ma questo rilevamento automatico fallisce quando si è dietro un reverse proxy. I servizi esterni ricevono URL webhook errati con porte o hostname interni – le integrazioni si interrompono senza segnalazioni. La soluzione: la variabile d'ambiente WEBHOOK_URL.


Soluzione #1: errore per dati di esecuzione di dimensioni eccessive

Il problema nel dettaglio

Quando esegui solo una parte di un flusso di lavoro (facendo clic su “Execute Node” nell'editor), n8n deve caricare i dati di esecuzione precedenti per fornire contesto a quel nodo. Per impostazione predefinita, n8n limita questa richiesta a 16 MiB (N8N_PAYLOAD_SIZE_MAX=16; il valore è espresso in MiB) per prevenire problemi di memoria su server più piccoli. Se la richiesta è più grande, n8n (o un reverse proxy con un limite inferiore per il corpo della richiesta) risponde con HTTP 413 e l’editor mostra questo errore.

Il messaggio di errore

Secondo la documentazione ufficiale di n8n:

Please execute the whole workflow, rather than just the node.
(Existing execution data is too large.)

Questo errore appare quando si elaborano migliaia di elementi in un singolo nodo, si lavora con risposte API in formato JSON di grandi dimensioni, si trasformano dataset di grandi dimensioni con nodi Code o si utilizzano flussi di lavoro con molti rami paralleli.

La soluzione: N8N_PAYLOAD_SIZE_MAX

La soluzione è semplice, ma occorre conoscere le risorse disponibili sul tuo server.

Impostazioni raccomandate in base alla RAM del server

RAM del serverN8N_PAYLOAD_SIZE_MAXValore da impostare (MiB)Percentuale di RAM
2GB o meno64MB64~3%
4GB128MB128~3%
8GB256MB256~3%
16GB+512MB512~3%

Regola generale: Usa meno del 20% della RAM disponibile per mantenere il sistema stabile sotto carico.

Implementazione 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; value in MiB)
      - N8N_PAYLOAD_SIZE_MAX=256

      # 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:

Comprendere la modalità dei dati binari

Predefinita: archiviazione in memoria (non raccomandata)

# This is the default - DON'T use in production
N8N_DEFAULT_BINARY_DATA_MODE=default

Problemi: Archivia i file (immagini, PDF, ecc.) nella RAM, spreca memoria preziosa, non è adatta ai carichi di lavoro in produzione, limita il numero di file che puoi elaborare.

Dai nostri test: la modalità predefinita usava ~315 MB di RAM a riposo contro 211 MB con la modalità filesystem, ovvero ~100 MB di memoria in meno a riposo.

Raccomandata: archiviazione su filesystem

N8N_DEFAULT_BINARY_DATA_MODE=filesystem
N8N_BINARY_DATA_TTL=1440  # Clean up after 24 hours (value in minutes)

Vantaggi: Archivia i file su disco anziché nella RAM, prestazioni significativamente migliori con file di grandi dimensioni, adatta alla produzione e raccomandata da n8n. Nota che N8N_BINARY_DATA_TTL non ha effetto da n8n 1.9.0: n8n elimina i dati binari quando rimuove le esecuzioni obsolete, quindi sono le impostazioni di pulizia delle esecuzioni a controllare l’uso del disco.

Importante: Se usi la modalità coda (esecuzione distribuita basata su Redis), tieni presente che n8n non supporta la modalità filesystem in questo caso. A ottobre 2026, la documentazione di n8n raccomanda la modalità database per la modalità coda.

Impatto concreto

Dai nostri test Docker di ottobre 2025 con n8n versione 1.115.2:

ConfigurazioneUtilizzo memoriaDifferenza
Predefinita (nessuna correzione)315 MBBase di riferimento
Con correzione payload + modalità su filesystem211 MB-104 MB

Risultato chiave: Nelle nostre misurazioni a riposo, la configurazione con il limite del payload corretto e la modalità binaria filesystem usava meno memoria rispetto a quella predefinita. Non abbiamo misurato la memoria sotto carico con payload di grandi dimensioni, dove l’uso dipende dai flussi di lavoro.


Soluzione #2: problemi con gli URL dei webhook

Il problema nel dettaglio

Quando n8n genera gli URL dei webhook da visualizzare nell'editor e da registrare con i servizi esterni, tenta di rilevare automaticamente il tuo URL pubblico. Dietro un reverse proxy, questo rilevamento automatico fallisce completamente.

Cosa vedrai (gli URL sbagliati)

http://n8n.yourdomain.com:5678/webhook/abc123

Problemi con questo URL:

  1. Numero di porta incluso (:5678) – i servizi esterni in genere non riescono a raggiungere porte non standard
  2. Protocollo errato (http anziché https) – molti servizi richiedono HTTPS
  3. Hostname interno – potrebbe essere il nome del container Docker anziché il dominio pubblico

Perché i servizi esterni falliscono

Servizi come GitHub, Slack, Stripe, Zoom, Google Sheets e centinaia di altri tentano di inviare webhook a questi URL errati e falliscono senza segnalazioni. Configuri l'integrazione, sembra corretta nell'interfaccia, ma le notifiche non arrivano mai.

La soluzione: variabile d'ambiente WEBHOOK_URL

Secondo la documentazione ufficiale di n8n:

«La variabile d’ambiente WEBHOOK_URL consente di impostare manualmente l’URL del webhook, affinché n8n possa visualizzarlo nell’interfaccia dell’editor e registrare gli URL corretti dei webhook presso i servizi esterni. Quando n8n viene eseguito dietro un reverse proxy, è importante impostare questa variabile.»

Configurazione di base

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

Cosa fa ciascuna variabile

WEBHOOK_URL (LA PIÙ IMPORTANTE)

  • L'URL pubblico per tutti gli endpoint webhook
  • Usato per registrare i webhook con i servizi esterni
  • Deve corrispondere esattamente alla tua configurazione Traefik/reverse proxy
  • Nota sulla versione: Rinominato da WEBHOOK_TUNNEL_URL nella v0.227.0, il vecchio nome è stato rimosso in n8n 1.0

N8N_EDITOR_BASE_URL

  • L'URL per accedere all'interfaccia web di n8n
  • Di solito identico a WEBHOOK_URL
  • Viene mostrato nella barra degli indirizzi del browser e negli inviti via email

N8N_PROTOCOL

  • Impostare su https per la produzione (con SSL/TLS)
  • Impostare su http solo per test locali
  • Deve corrispondere alla terminazione del tuo reverse proxy

N8N_HOST

  • Solo il nome del tuo dominio pubblico
  • Non includere il protocollo (https://) o la porta
  • Esempio: n8n.yourdomain.com non https://n8n.yourdomain.com:443

N8N_TRUST_PROXY_HEADER

  • Non è una variabile documentata di n8n: non compare nel riferimento delle variabili d’ambiente di n8n, quindi impostarla non ha alcun effetto documentato
  • La fiducia negli header del proxy (per gli indirizzi IP reali dei client) è controllata da N8N_PROXY_HOPS
  • Puoi ometterla dagli esempi di questa guida

N8N_PROXY_HOPS

  • Impostare su 1 quando si è dietro un reverse proxy
  • Impostare su 2 se si è dietro due proxy (raro)
  • Indica a n8n quanti livelli di proxy considerare attendibili

Test degli URL dei webhook

Prima della correzione

Nell'interfaccia di n8n, crea un nodo Webhook e controlla l'URL mostrato:

http://n8n.example.com:5678/webhook/abc123  ❌ Errato

Dopo la correzione

Lo stesso nodo webhook ora mostra:

https://n8n.example.com/webhook/abc123  ✅ Corretto

Differenza fondamentale: I servizi esterni ora possono raggiungere questo URL perché utilizza la porta HTTPS standard 443 (gestita dal tuo reverse proxy) anziché la porta interna 5678.


Configurazione completa per la produzione con Traefik

Perché Traefik?

Traefik è un reverse proxy moderno perfettamente adatto alle installazioni Docker – HTTPS automatico tramite Let's Encrypt senza gestione manuale dei certificati, rilevamento automatico dei servizi, che individua i container tramite le etichette Docker, supporto WebSocket nativo per la connessione in tempo reale dell’editor di n8n, configurazione semplice con le sole etichette Docker anziché file di configurazione complessi e una dashboard integrata per monitorare instradamento e certificati in tempo reale.

Panoramica dell'architettura

Internet
  ↓
[Traefik Reverse Proxy]
  ↓ HTTPS (Let's Encrypt)
  ↓ WebSocket Support
[Container n8n]
  ↓ Rete interna
[Database PostgreSQL]

Supporto WebSocket

Traefik inoltra nativamente le connessioni WebSocket, inclusa la connessione in tempo reale usata dall’editor di n8n, quindi non serve middleware aggiuntivo. I webhook sono normali richieste HTTPS e non dipendono dai WebSocket. L’esempio di produzione qui sotto include etichette opzionali per gli header WebSocket; puoi ometterle.

Docker Compose completo per la produzione

Questa configurazione combina entrambe le correzioni, include Traefik con supporto WebSocket appropriato e segue le buone pratiche per la produzione:

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 in bytes (256MB, matches N8N_PAYLOAD_SIZE_MAX)
      - "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=268435456"

      # Middleware: WebSocket headers (optional; Traefik proxies WebSockets natively)
      - "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=256  # 256 MiB

      # 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:

Configurazione di Traefik

Se non hai ancora Traefik in esecuzione, ecco la configurazione completa:

Passo 1: creare la rete Traefik

docker network create traefik-net

Passo 2: creare la configurazione di Traefik

Crea 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: [email protected]  # CHANGE THIS
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

log:
  level: INFO

accessLog: {}

Passo 3: creare il Docker Compose di Traefik

Crea 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"

Passo 4: creare il file delle variabili d’ambiente

Crea .env nella tua directory 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

Genera valori sicuri:

# For DB_PASSWORD
openssl rand -base64 32

# For N8N_ENCRYPTION_KEY
openssl rand -hex 32

Passo 5: avviare tutto

# 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

Verifica della configurazione

Controlla la dashboard di Traefik

Visita http://your-server-ip:8080. Funziona solo se imposti anche api.insecure: true in traefik.yml (solo per i test); altrimenti, configura un router per la dashboard (api@internal) su un dominio dedicato.

Dovresti vedere:

  • ✅ Router n8n attivo con stato verde
  • ✅ Certificato ottenuto da Let’s Encrypt
  • ✅ Servizio con stato di integrità positivo

Controlla l'accesso a n8n

Visita https://n8n.yourdomain.com

Dovresti vedere:

  • ✅ HTTPS funzionante con certificato Let’s Encrypt valido
  • ✅ Nessun avviso di sicurezza del browser
  • ✅ La pagina di login/configurazione di n8n appare correttamente

Controlla gli URL dei webhook

  1. Accedi a n8n
  2. Crea un nuovo flusso di lavoro
  3. Aggiungi un nodo Webhook
  4. Controlla il “Production URL” mostrato

Atteso:

https://n8n.yourdomain.com/webhook/abc123

NON questo (significa che la configurazione è errata):

http://n8n.yourdomain.com:5678/webhook/abc123  ❌

Requisito del 2025: task runner

Cosa sono i task runner?

I task runner eseguono il codice definito nei nodi Code all'interno di processi isolati anziché nel processo principale di n8n. Questo fornisce una migliore sicurezza attraverso ambienti isolati, una maggiore stabilità, perché gli errori nel codice non arrestano il processo principale e compatibilità futura poiché saranno richiesti nelle prossime versioni di n8n.

Perché è importante adesso

Dalla documentazione ufficiale di n8n:

«L’esecuzione di n8n senza task runner è deprecata. I task runner saranno abilitati per impostazione predefinita in una versione futura. Si consiglia agli utenti di impostare subito N8N_RUNNERS_ENABLED=true per evitare possibili problemi in futuro.»

Dai nostri log di test (ottobre 2025):

There are deprecations related to your environment variables:
 - N8N_RUNNERS_ENABLED -> Running n8n without task runners is deprecated.

Configurazione

Modalità interna (raccomandata per server singolo)

environment:
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=internal
  - N8N_RUNNERS_MAX_CONCURRENCY=5

n8n avvia il task runner come processo figlio – la configurazione più semplice, senza necessità di infrastruttura aggiuntiva, adatta alla maggior parte delle installazioni gestite sulla propria infrastruttura, con un impatto minimo sulle prestazioni. A ottobre 2026, la documentazione di n8n descrive la modalità interna come insicura per progettazione e la depreca a partire da n8n 3.0.

Modalità esterna (per configurazioni distribuite)

environment:
  - N8N_RUNNERS_ENABLED=true
  - N8N_RUNNERS_MODE=external
  - N8N_RUNNERS_AUTH_TOKEN=your_secure_token

Container separati per i task runner forniscono un migliore isolamento delle risorse per flussi di lavoro ad alto volume, consentono la scalabilità orizzontale su più server, e vengono eseguiti come container sidecar dall’immagine n8nio/runners, la cui versione deve corrispondere a quella dell’immagine n8n. Basta una configurazione Docker Compose; Docker Swarm o Kubernetes non sono necessari.

Verifica dei task runner

Controlla l’elenco dei processi

docker exec n8n ps aux

Senza task runner (3 processi):

PID   USER     TIME  COMMAND
    1 node      0:00 tini -- /docker-entrypoint.sh
    7 node      0:12 node /usr/local/bin/n8n

Con task runner (4 processi):

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

Evidenza: processo task runner visibile con PID 18.

Controlla i log

docker logs n8n | grep -i runner

Dovresti vedere:

n8n Task Broker ready on 127.0.0.1, port 5679
Registered runner "JS Task Runner" (zCWpF0Eb_LJsqWYvLm5t1)

Impatto sull'utilizzo delle risorse

Dai nostri test Docker (ottobre 2025, n8n versione 1.115.2):

ConfigurazioneMemoriaCPUProcessi
Senza task runner214 MB0.14%3
Con task runner289 MB0.29%4
Differenza+75 MB+0.15%+1

Impatto minimo sulle risorse. I vantaggi – sicurezza, stabilità, preparazione al futuro – superano ampiamente il piccolo costo in termini di risorse.


Guida alle variabili d’ambiente

Elenco completo delle variabili

VariabileTipoPredefinitoScopoPriorità
Variabili critiche
WEBHOOK_URLStringa–URL webhook pubblicoOBBLIGATORIO con reverse proxy
N8N_PAYLOAD_SIZE_MAXNumero16 (MiB)Dimensione massima del corpo della richiesta in MiB, inclusi i dati di esecuzione parzialeOBBLIGATORIO per dati di grandi dimensioni
N8N_RUNNERS_ENABLEDBooleanofalseAbilita task runnerRaccomandato su 1.x (non necessario da n8n 2.0)
N8N_TRUST_PROXY_HEADER––Non presente tra le variabili documentate di n8nNon necessario; usa N8N_PROXY_HOPS
Configurazione webhook
N8N_EDITOR_BASE_URLStringa–URL dell'interfaccia editorRaccomandato
N8N_PROTOCOLStringahttpProtocollo (http/https)Produzione
N8N_HOSTStringalocalhostHostname pubblicoProduzione
N8N_PORTNumero5678Porta internaOpzionale
N8N_PROXY_HOPSNumero0Numero di reverse proxyImpostare su 1 con proxy
Prestazioni
N8N_DEFAULT_BINARY_DATA_MODEStringadefaultModalità archiviazione binariaRaccomandato
N8N_BINARY_DATA_TTL––Nessun effetto da n8n 1.9.0 (i dati binari vengono rimossi insieme alle esecuzioni)Si può rimuovere
Task runner
N8N_RUNNERS_MODEStringainternalModalità task runnerSe i runner sono abilitati
N8N_RUNNERS_MAX_CONCURRENCYNumero10Numero massimo di attività simultanee per runnerOpzionale

Configurazioni predefinite per scenario

Scenario A: sviluppo (macchina locale)

environment:
  - N8N_PORT=5678

Da usare quando: Test in locale, nessun reverse proxy, nessun requisito di produzione

Scenario B: dietro reverse proxy (senza dati di grandi dimensioni)

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

Da usare quando: Istanza n8n pubblica, webhook necessari, flussi di lavoro di dimensioni ridotte

Scenario C: configurazione completa per la produzione

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=256  # 256 MiB
  - 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}

Da usare quando: Distribuzione in produzione con tutte le funzionalità, flussi di lavoro di grandi dimensioni, accesso pubblico


Esempi di Docker Compose

Tutti e quattro gli scenari dal nostro ambiente di test sono disponibili. Queste configurazioni sono state validate con n8n versione 1.115.2 a ottobre 2025. Gli esempi usano il tag immagine latest; fissa n8nio/n8n:1.115.2 per riprodurre la versione testata.

Confronto dell'utilizzo delle risorse (dai nostri test)

ScenarioMemoriaCPUProcessiDescrizione
Predefinito315 MB0.00%3Nessuna correzione, base di riferimento
Correzione payload211 MB0.00%3Payload + modalità su filesystem
Correzione webhook215 MB0.14%3Solo configurazione webhook
Produzione289 MB0.29%4Tutte le correzioni + task runner

Risultato chiave: A riposo, la configurazione di produzione con tutte le correzioni usava meno memoria rispetto a quella predefinita nei nostri test. Sono misurazioni a riposo, non risultati sotto carico con payload di grandi dimensioni.


Test della configurazione

Lista di controllo prima della distribuzione

1. Configurazione DNS

# Verify DNS points to your server
nslookup n8n.yourdomain.com

# Should return your server's public IP

2. Disponibilità delle porte

# Check if required ports are free
sudo netstat -tlnp | grep -E '(80|443|5678)'

# Should show nothing or only Traefik on 80/443

3. Installazione di Docker

# Verify Docker
docker --version

# Verify Docker Compose
docker compose version

4. Variabili d'ambiente

# Verify .env file exists
cat .env

# Should show N8N_DOMAIN, DB_PASSWORD, N8N_ENCRYPTION_KEY

Passaggi per la distribuzione

# 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

Test dopo la distribuzione

Test 1: accesso HTTPS

curl -I https://n8n.yourdomain.com

Atteso: HTTP/2 200 (oppure HTTP/1.1 200)

Test 2: redirect da HTTP a HTTPS

curl -I http://n8n.yourdomain.com

Atteso: HTTP/1.1 308 Permanent Redirect con Location: https://n8n.yourdomain.com

Test 3: stato di salute dei container

docker ps

Atteso: Sia n8n che n8n-postgres mostrano lo stato (healthy)

Test 4: formato degli URL dei webhook

  1. Accedi all'interfaccia web di n8n
  2. Crea un nuovo flusso di lavoro
  3. Aggiungi un nodo Webhook
  4. Controlla il Production URL mostrato

Formato atteso:

https://n8n.yourdomain.com/webhook/abc123

NON atteso (errore di configurazione):

http://n8n.yourdomain.com:5678/webhook/abc123  ❌

Test 5: task runner attivi

docker logs n8n | grep -i runner

Output atteso:

Registered runner "JS Task Runner"

Test 6: variabili d'ambiente applicate

docker exec n8n env | grep N8N_PAYLOAD_SIZE_MAX

Atteso: N8N_PAYLOAD_SIZE_MAX=256


Risoluzione dei problemi comuni

Problema: HTTPS non funziona

Sintomi: Il browser mostra l'avviso “Non sicuro”, messaggi di errore del certificato, impossibile accedere tramite HTTPS

Diagnosi:

# 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

Soluzioni:

  1. DNS non punta al server: Aggiorna il record A del DNS per puntare all'IP pubblico del server, attendi la propagazione DNS (fino a 24 ore, di solito molto più veloce), testa da una rete diversa: dig n8n.yourdomain.com +short
  2. Porta 80 bloccata: Let's Encrypt necessita della porta 80 per la verifica HTTP. Controlla il firewall: sudo ufw status. Consenti se bloccata: sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
  3. Email non valida nella configurazione Traefik: Modifica traefik/traefik.yml, aggiorna certificatesResolvers.letsencrypt.acme.email con un indirizzo valido, riavvia Traefik: docker compose restart

Problema: i webhook restituiscono 404

Sintomi: I servizi esterni riportano fallimenti dei webhook, gli URL dei webhook sembrano corretti ma non funzionano, la modalità test funziona ma la modalità produzione fallisce

Diagnosi:

# 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

Soluzioni:

  1. WEBHOOK_URL non impostato correttamente: Controlla la variabile d'ambiente: docker exec n8n env | grep WEBHOOK_URL. Deve corrispondere esattamente al tuo dominio: WEBHOOK_URL=https://n8n.yourdomain.com
  2. Configurazione di rete errata: Verifica che n8n sia sulla rete traefik-net: docker inspect n8n | grep -A 5 Networks. Dovrebbe mostrare “traefik-net” nell'output

Problema: “Execution Data Too Large” appare ancora

Sintomi: L'errore si verifica ancora dopo aver impostato N8N_PAYLOAD_SIZE_MAX, i flussi di lavoro di grandi dimensioni falliscono su “Execute Node”

Diagnosi:

# Verify variable is set
docker exec n8n env | grep PAYLOAD

# Should show N8N_PAYLOAD_SIZE_MAX=256

Soluzioni:

  1. Variabile non applicata (container non ricreato): Ricrea il container per applicare le modifiche: docker compose up -d n8n (docker compose restart non applica i valori d’ambiente modificati). Verifica dopo il riavvio: docker exec n8n env | grep PAYLOAD
  2. Serve un limite più alto per il tuo flusso di lavoro: Per server con 16GB+ di RAM, aumenta a 512MB: N8N_PAYLOAD_SIZE_MAX=512
  3. Dimensione richiesta Traefik troppo piccola: Aumenta anche il limite di Traefik (in byte) in modo corrispondente: "traefik.http.middlewares.n8n-buffering.buffering.maxRequestBodyBytes=536870912"

Problema: utilizzo elevato della memoria

Sintomi: Il container usa >1.5GB di RAM a riposo, l'utilizzo di memoria cresce nel tempo, errori di memoria esaurita

Diagnosi:

# Monitor memory
docker stats n8n

# Check binary data mode
docker exec n8n env | grep BINARY_DATA_MODE

Soluzioni:

  1. Modalità filesystem non in uso: Aggiungi all’ambiente: N8N_DEFAULT_BINARY_DATA_MODE=filesystem. Impatto: ~100 MB di memoria in meno a riposo nei nostri test
  2. Vecchie esecuzioni che si accumulano: Riduci il periodo di conservazione: EXECUTIONS_DATA_MAX_AGE=168 (7 giorni anziché 14) e EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
  3. Limite del container troppo basso: Aumenta se il server ha capacità. Cambia il limite di memoria da 2G a 4G nella sezione delle risorse di deploy

Conclusione

Cosa abbiamo risolto

Questa guida completa affronta i due problemi più comuni di n8n gestito sulla propria infrastruttura:

  1. ✅ Errore dati di esecuzione di dimensioni eccessive – Risolto con N8N_PAYLOAD_SIZE_MAX e modalità binaria su filesystem
  2. ✅ Problemi con gli URL dei webhook – Risolto con WEBHOOK_URL e corretta configurazione del reverse proxy

Oltre a queste aggiunte fondamentali:

  1. ✅ Configurazione completa di Traefik – Configurazione pronta per la produzione con supporto WebSocket
  2. ✅ Configurazione dei task runner – Requisito 2025 per la compatibilità futura
  3. ✅ Buone pratiche per la produzione – Limiti di risorse, healthcheck, header di sicurezza, monitoraggio
  4. ✅ Configurazioni validate – Tutti i file docker-compose testati con n8n 1.115.2 a ottobre 2025

Punti chiave

Per soluzioni rapide:

  • Imposta N8N_PAYLOAD_SIZE_MAX=256 per problemi con i dati di esecuzione (256MB per 8GB+ di RAM)
  • Imposta WEBHOOK_URL=https://your-domain.com per problemi con i webhook
  • Imposta N8N_RUNNERS_ENABLED=true per eliminare gli avvisi di deprecazione
  • Usa N8N_DEFAULT_BINARY_DATA_MODE=filesystem (circa 100 MB di memoria in meno a riposo nei nostri test)

Per la distribuzione in produzione:

  • Usa il nostro docker-compose.yml completo con configurazione Traefik
  • Non serve middleware WebSocket – Traefik inoltra nativamente i WebSocket e i webhook sono semplici richieste HTTPS
  • Includi PostgreSQL per migliori prestazioni sotto carico
  • Imposta limiti di risorse appropriati in base alla capacità del tuo server
  • Implementa controlli di integrità affinché il monitoraggio e i servizi dipendenti possano rilevare i guasti (Docker da solo contrassegna un container come non integro, ma non lo riavvia)

Per gli utenti Traefik (FONDAMENTALE):

  • Traefik gestisce i WebSocket senza middleware aggiuntivo; i webhook richiedono un router corretto e WEBHOOK_URL
  • Imposta il limite di dimensione del corpo della richiesta in modo che corrisponda o superi la dimensione del payload
  • Configura gli header di sicurezza (X-Robots-Tag, X-Forwarded-Proto)
  • Assicurati che il DNS punti al tuo server prima di avviare Traefik (requisito di Let’s Encrypt)

Novità rispetto ai post di giugno 2025

FunzionalitàPost di giugno 2025Questa guida
Correzione dati di esecuzione✅ Dettagliata✅ Inclusa + misurazioni delle risorse
Correzione webhook✅ Dettagliata✅ Inclusa + integrazione Traefik
Configurazione Traefik❌ Non coperta✅ Configurazione completa
Supporto WebSocket❌ Non coperto✅ Evidenziato
Task runner❌ Non coperti✅ Requisito 2025
Docker-compose combinato❌ Separati✅ Pronto per la produzione
Misurazioni delle risorse❌ Teoriche✅ Dati di test reali
Variabili d'ambiente✅ Coperte✅ Guida completa

Test e validazione

Il nostro ambiente di test (ottobre 2025):

  • ✅ n8n versione 1.115.2
  • ✅ Container Docker in esecuzione da 2+ ore
  • ✅ Tutte le variabili d'ambiente verificate nei container in esecuzione
  • ✅ Utilizzo delle risorse misurato con docker stats
  • ✅ Processo del task runner confermato nell’elenco dei processi
  • ✅ Endpoint HTTP testati e accessibili
  • ✅ Configurazioni validate come funzionanti

Prossimi passi

  1. Scegli il tuo scenario:
    • Sviluppo: configurazione minima
    • Dietro reverse proxy: correzione webhook + task runner
    • Produzione: configurazione completa con Traefik (raccomandata)
  2. Distribuisci:
    • Copia il docker-compose.yml appropriato
    • Crea il file .env con il tuo dominio e password sicure
    • Avvia prima Traefik, poi n8n
    • Esegui i test dopo la distribuzione
  3. Valida:
    • Verifica che HTTPS funzioni con un certificato valido
    • Controlla che gli URL dei webhook mostrino il formato corretto
    • Testa con un dataset di grandi dimensioni (se necessario)
    • Conferma che i task runner siano registrati
  4. Monitora:
    • Osserva l'utilizzo delle risorse con docker stats
    • Configura avvisi di healthcheck (monitoraggio esterno)
    • Implementa la rotazione dei log per prevenire il riempimento del disco
    • Pianifica backup regolari dei volumi dati

Risorse correlate

Da giugno 2025:

Documentazione ufficiale di n8n:

Domande o problemi?

Se incontri problemi non coperti da questa guida:

  1. Consulta i nostri articoli dettagliati sulla risoluzione dei problemi di giugno 2025 per ulteriori indicazioni
  2. Consulta la documentazione ufficiale di n8n per le ultime funzionalità
  3. Cerca nei forum della community di n8n problemi simili
  4. Controlla la sezione Risoluzione dei problemi qui sopra per i problemi comuni
  5. Contatta tva per assistenza professionale all'implementazione

Test riproducibili

Tutte le configurazioni in questa guida possono essere riprodotte nel tuo ambiente – i file Docker Compose sono pronti per la produzione, le variabili d'ambiente sono documentate e verificate, i comandi di test sono forniti per la validazione e gli output attesi sono chiaramente specificati. Puoi verificare ogni affermazione in questa guida implementando tu stesso le configurazioni ed eseguendo i test forniti.

Hai bisogno di aiuto con l'implementazione?

Se desideri che tva gestisca la tua installazione di n8n o hai bisogno di assistenza con la configurazione in produzione, contattaci. Implementiamo queste configurazioni per le organizzazioni che cercano un’infrastruttura n8n affidabile e pronta per la produzione.


Pubblicato: 15 ottobre 2025
Testato con: n8n v1.115.2, Docker Compose v3.8, Traefik v2.10
Requisiti del server: 4GB+ di RAM, 2+ core CPU raccomandati per la produzione
Basato su: Documentazione ufficiale di n8n, test Docker validati e buone pratiche della community

Per approfondire