← Torna al blog

Automazioni · Guida pratica

Come installare n8n self-hosted con Docker e Cloudflare Tunnel

Configura n8n in locale con Docker Compose e crea un instradamento sicuro per i webhook esterni tramite un endpoint HTTPS pubblico configurato con Cloudflare.

L'automazione dei processi aziendali è uno dei pilastri fondamentali per ottimizzare i flussi di lavoro, ma le limitazioni dei piani cloud possono diventare presto un collo di bottiglia. La soluzione è l'auto-hosting di n8n, la piattaforma open-source di workflow automation.

Un'installazione locale pura incontra però un problema importante: se n8n non è raggiungibile tramite un URL HTTPS pubblico valido, i webhook esterni di Stripe, WhatsApp, Typeform o Telegram possono fallire. In questa guida configureremo n8n con Docker Compose e sceglieremo tra un Quick Tunnel temporaneo e un dominio o sottodominio stabile.

Prima di iniziare

Requisiti preliminari

  • Docker e Docker Compose installati sulla macchina locale o VPS.
  • Accesso al terminale o alla CLI.
  • Conoscenza di base della riga di comando.

Passo 1

Struttura del progetto e file docker-compose.yml

Crea una directory dedicata e posizionati al suo interno:

mkdir n8n-local && cd n8n-local

Crea un file chiamato docker-compose.yml. Utilizzeremo due container: uno per n8n e uno per cloudflared, il demone ufficiale di Cloudflare che gestisce il tunnel senza richiedere l'apertura di porte sul router o firewall.

version: '3.8'

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n_app
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - GENERIC_TIMEZONE=Europe/Rome
      
      # --- PRIMO AVVIO (OPZIONE A - Quick Tunnel) ---
      # Lascia localhost all'avvio. Una volta lanciato `docker compose up -d`, 
      # leggi l'URL nei log con `docker logs n8n_tunnel`, incollalo qui sotto 
      # (es. https://abc-123.trycloudflare.com/) e riavvia con `docker compose up -d`.
      - WEBHOOK_URL=http://localhost:5678/

      # --- OPZIONE B (Dominio Stabile o Coolify) ---
      # Se usate un vostro dominio registrato su Cloudflare, inserite il sottodominio 
      # e il dominio diretto, ad esempio:
      # - N8N_HOST=n8n.tuodominio.it
      # - WEBHOOK_URL=https://n8n.tuodominio.it/
    volumes:
      - n8n_data:/home/node/.n8n

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: n8n_tunnel
    restart: always
    # Modalità Quick Tunnel per test (nessun account o dominio richiesto):
    command: tunnel --url http://n8n:5678

    # Modalità Dominio Stabile (sostituisci il comando sopra con il tuo Token):
    # command: tunnel run --token IL_TUO_CLOUDFLARE_TUNNEL_TOKEN
    depends_on:
      - n8n

volumes:
  n8n_data:

Passo 2

Gestione dei webhook con Cloudflare Tunnel

Quando un servizio esterno chiama n8n via webhook, ha bisogno di un endpoint raggiungibile globalmente con certificato SSL. Scegli una sola delle due configurazioni seguenti.

Opzione A: Quick Tunnel temporaneo

Questa modalità non richiede un dominio. Il container cloudflared crea un tunnel effimero e assegna automaticamente un URL pubblico del tipo https://random-words.trycloudflare.com.

Mantieni questo comando nel servizio cloudflared di docker:

command: tunnel --url http://n8n:5678

Avvia i container e leggi l'URL assegnato:

docker compose up -d
docker logs n8n_tunnel

Sostituisci quindi WEBHOOK_URL nel file docker-compose.yml con l'URL HTTPS ottenuto, aggiungendo lo slash finale, e ricrea il container n8n. L'URL può cambiare al successivo riavvio: questa modalità è indicata per test e sviluppo.

Opzione B: dominio o sottodominio stabile

Scegli questa modalità se possiedi un dominio acquistato e gestito su Cloudflare oppure se hai configurato un sottodominio in Coolify, ad esempio n8n.tuodominio.it. Il dominio configurato, il servizio pubblico e le variabili di n8n devono puntare allo stesso indirizzo HTTPS.

Se usi un tunnel Cloudflare stabile, sostituisci il comando Quick Tunnel con il token del tunnel:

command: tunnel run --token IL_TUO_CLOUDFLARE_TUNNEL_TOKEN

Imposta nel file .env o nel pannello di Coolify i valori del dominio scelto:

SUBDOMAIN=n8n
DOMAIN_NAME=tuodominio.it

Con questa configurazione, N8N_HOST sarà n8n.tuodominio.it e WEBHOOK_URL diventerà https://n8n.tuodominio.it/. Se invece n8n è pubblicato direttamente da Coolify, configura il dominio o sottodominio nel servizio Coolify e usa quell'URL nelle variabili N8N_HOST e WEBHOOK_URL: in questo caso non serve il Quick Tunnel e puoi rimuovere il servizio cloudflared dal compose.

In entrambe le modalità, verifica che WEBHOOK_URL sia raggiungibile in HTTPS prima di testare i webhook.

Passo 3

Avvio e verifica della piattaforma

Avvia l'infrastruttura in background:

docker compose up -d
  1. Accesso locale: apri http://localhost:5678.
  2. Account admin: al primo accesso configura l'utente proprietario dell'istanza.
  3. Test dei webhook: assicurati che WEBHOOK_URL corrisponda all'indirizzo HTTPS del tunnel Cloudflare.

Per l'uso in produzione

Considerazioni finali

Docker e Cloudflare Tunnel offrono un ambiente isolato e adatto alla sperimentazione. Per un'installazione definitiva è consigliabile associare il tunnel a un dominio aziendale proprietario e usare PostgreSQL al posto di SQLite, così da ottenere maggiore stabilità quando cresce il volume dei dati elaborati.

← Torna a tutti gli articoli