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
- Accesso locale: apri
http://localhost:5678. - Account admin: al primo accesso configura l'utente proprietario dell'istanza.
- Test dei webhook: assicurati che
WEBHOOK_URLcorrisponda 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.