n8n con Docker: installare e auto-ospitare gratuitamente
n8n con Docker è il modo più rapido per ottenere un'istanza di automazione auto-ospitata che sopravvive ai riavvii e agli aggiornamenti. Questa guida si ferma volutamente alle fondamenta: un file Docker Compose, un volume per i dati, una chiave di crittografia sotto il tuo controllo, una procedura di backup e aggiornamento, poi un'esposizione HTTPS prudente. I nodi IA e il collegamento a Ollama sono trattati in una guida separata; qui l'obiettivo è un'installazione pulita che non dovrai rifare.
#Perché installare n8n con Docker anziché con npm
n8n è un'applicazione Node.js. Puoi avviarla con npm o npx e la documentazione lo propone per una prova rapida. Per un'istanza in esecuzione continua, l'immagine Docker ufficiale è la strada raccomandata dal progetto: include la versione corretta di Node.js, isola n8n dal resto della macchina e rende l'aggiornamento semplice quanto cambiare immagine. È anche il formato in cui la documentazione di hosting di n8n descrive tutti i suoi esempi di server.
Il secondo vantaggio è la riproducibilità. Un file docker-compose.yml descrive l'intera configurazione: immagine, porta, variabili d'ambiente, volume dei dati. Potete sottoporlo a controllo versione, copiarlo su un'altra macchina o rileggerlo tra sei mesi per sapere esattamente cosa è in esecuzione. Con un'installazione npm, queste informazioni sono distribuite tra il sistema, il profilo utente e il gestore dei servizi.
- Cosa copre questa guida
- Installazione locale o su un piccolo server, persistenza dei dati, chiave di crittografia, backup, aggiornamento, accesso HTTPS.
- Cosa non copre
- I nodi IA di n8n, la connessione a Ollama, il server MCP e la scalabilità in modalità coda. I primi due punti hanno una guida dedicata, collegata alla fine dell'articolo.
- Cosa non affermiamo
- Nessuna durata di installazione, nessun consumo misurato, nessun numero di versione fissato. Questi valori cambiano da una release all'altra e vanno consultati nelle fonti ufficiali al momento dell'installazione.
#Licenza e limiti della versione community
Agenti che agiscono sulla tua macchina: Cline agentico, MCP, n8n + Ollama, automazioni locali.
- Spazio online a vita
- PDF + file
- Rimborso in 30 g
n8n non è distribuito con una licenza open source secondo il significato attribuito dall'OSI. Il codice è pubblicato con la Sustainable Use License, un modello che l'editore definisce «fair-code». In linea generale, puoi utilizzare, modificare e ospitare liberamente n8n per le tue esigenze interne, personali o aziendali. Ciò che è limitato è la rivendita: offrire n8n come servizio ospitato a terzi o integrarlo in un prodotto commerciale richiede un accordo con l'editore. Il testo completo e le relative FAQ sono disponibili su docs.n8n.io/sustainable-use-license/; leggili se il tuo utilizzo va oltre l'automazione interna.
La versione che installi con Docker è l'edizione community. Include l'editor completo, centinaia di nodi di integrazione, i webhook, i trigger pianificati, i nodi IA e la gestione degli utenti. Alcune funzionalità sono riservate alle offerte a pagamento self-hosted: l'accesso singolo (SSO), gli ambienti con sincronizzazione Git, i secret esterni, l'invio dei log a uno strumento esterno e parte delle funzionalità di collaborazione. L'editore offre inoltre una chiave gratuita detta «community registrata», ottenibile indicando un indirizzo e-mail nelle impostazioni, che sblocca alcune funzionalità aggiuntive. L'elenco preciso cambia nel tempo: fa fede la pagina docs.n8n.io/hosting/community-edition-features/.
#Prerequisiti
- Docker e Docker Compose
- Docker Engine con il plugin Compose su Linux, oppure Docker Desktop su Windows e macOS. Verifica con docker compose version: il comando deve rispondere con un numero di versione, usando due parole (docker compose), non con il trattino del vecchio strumento.
- Una macchina sempre accesa
- n8n esegue i tuoi workflow all'ora prevista o alla ricezione di un webhook. Un PC che si spegne la sera non vedrà le attivazioni notturne. Sono adatti un mini-PC, un NAS compatibile con Docker o un piccolo VPS; per alcuni workflow semplici, il fabbisogno di memoria resta modesto.
- Una porta libera
- n8n ascolta sulla porta 5678 all'interno del container. La pubblichiamo sullo stesso numero sul lato host; cambialo se è già occupato da un altro servizio.
- Solo per il passaggio HTTPS
- Un nome di dominio che punti alla macchina e le porte 80 e 443 raggiungibili da Internet. In caso contrario, resta sull'accesso locale oppure usa una VPN: la sezione HTTPS illustra entrambe le opzioni.
#Installare n8n con Docker Compose passo dopo passo
La documentazione di n8n propone innanzitutto un comando docker run su una riga, utile per una prova. Noi passiamo direttamente a Compose: il file è appena più lungo e diventa il riferimento della vostra installazione. Tutti i valori qui sotto sono quelli documentati da n8n; solo i valori del fuso orario e della porta sono scelte di questa guida.
- 01Crea la cartella del progettoUna cartella dedicata contiene il file Compose, il file .env e, in seguito, i vostri backup. I dati di n8n andranno in un volume Docker denominato, non in questa cartella.
- 02Generare la chiave di crittografiaPrima del primo avvio, generate una chiave casuale e inseritela nel file .env. La sezione seguente spiega perché quest'ordine è importante.
- 03Scrivere il docker-compose.ymlCopiate il file qui sotto. Pubblica n8n sulla porta 5678 della macchina, limitandolo all'indirizzo locale 127.0.0.1, e monta il volume n8n_data nella cartella /home/node/.n8n del container, dove n8n memorizza il database SQLite, la configurazione e i file.
- 04Avviaredocker compose up -d télécharge l'image et lance le conteneur en arrière-plan. La première exécution prend le temps du téléchargement de l'image; les suivantes sont immédiates.
- 05Creare l'account proprietarioAprite http://localhost:5678 in un browser. n8n chiede di creare il primo account, che diventa il proprietario dell'istanza. Dalla versione 1.0, è questo account a proteggere l'accesso; la precedente autenticazione di base tramite variabili d'ambiente non esiste più.
Qualche spiegazione sulle variabili. GENERIC_TIMEZONE imposta il fuso orario utilizzato dal nodo Schedule Trigger e dalle espressioni di data; TZ allinea l'orologio di sistema nel container. N8N_RUNNERS_ENABLED attiva i task runner, il meccanismo che esegue il codice dei nodi Code in un processo separato; la documentazione lo raccomanda e le versioni recenti mostrano un avviso se è assente. N8N_DIAGNOSTICS_ENABLED=false interrompe l'invio dei dati di telemetria all'editore. Le due variabili EXECUTIONS_DATA_* chiedono a n8n di eliminare la cronologia delle esecuzioni oltre le 336 ore, cioè quattordici giorni, per evitare che il database cresca all'infinito.
Il montaggio ./local-files:/files è facoltativo. Fornisce a n8n una cartella condivisa con la macchina host, utile per i nodi che leggono o scrivono file. Elimina la riga se non ti serve.
#La chiave di crittografia: la variabile che non devi perdere
n8n cifra tutte le credenziali che registri nell'interfaccia, ovvero i token API, le password e le chiavi OAuth delle tue integrazioni. La chiave di crittografia utilizzata è N8N_ENCRYPTION_KEY. Se non la definisci, n8n ne genera una al primo avvio e la scrive nel file config della cartella /home/node/.n8n, quindi nel volume. Funziona, ma in questo caso la chiave vive solo in quel volume: se lo perdi o ricrei l'istanza senza di esso, ogni credenziale diventa illeggibile e deve essere reinserita.
Ecco perché questa guida imposta la chiave nel file .env prima del primo avvio. Rimane sotto il tuo controllo, viene salvata insieme al file Compose e consente di ripristinare il database su un'altra macchina senza perdere le credenziali. Ne derivano due regole.
- Non cambiate mai la chiave in un secondo momento
- Una chiave diversa da quella usata per crittografare rende inutilizzabili tutti gli identificatori esistenti. Se dovete sostituirla, esportate prima gli identificatori decrittografati con il comando export:credentials, quindi reimportateli dopo la modifica.
- Salva separatamente il file .env
- Conserva una copia della chiave nel tuo gestore di password. Un backup del volume senza la chiave non serve a nulla per le credenziali, anche se i workflow restano leggibili.
#Persistenza e backup dei dati
Tutto ciò che n8n deve conservare risiede in /home/node/.n8n: il database SQLite che contiene workflow, credenziali crittografate e cronologia delle esecuzioni, il file config, i nodi community installati e i file binari in modalità di archiviazione su disco. Il volume denominato n8n_data sopravvive a docker compose down e alla rimozione del container. Non sopravvive a docker compose down -v né a docker volume rm: entrambi questi comandi cancellano i dati.
Per un backup, due approcci si completano a vicenda. Il primo archivia l'intero volume: si arresta n8n per il tempo necessario a copiare i file, così da evitare di acquisire un database SQLite durante una scrittura. Il secondo utilizza lo strumento da riga di comando di n8n per esportare workflow e credenziali in JSON, leggibili e reimportabili singolarmente.
L'opzione --backup dei comandi di esportazione raggruppa le opzioni che producono un file per elemento, in un formato leggibile. Gli identificatori esportati restano crittografati con la vostra chiave, salvo aggiungere --decrypted; in tal caso, trattate il file come un segreto. Per il ripristino, i comandi import:workflow e import:credentials accettano la stessa cartella con l'opzione --separate. Il riferimento completo della CLI si trova su docs.n8n.io/hosting/cli-commands/.
Per un ripristino completo su un'altra macchina: ricrea la cartella con lo stesso docker-compose.yml e lo stesso .env, crea il volume vuoto con docker compose up -d, poi docker compose stop, decomprimi l'archivio nel volume con il comando inverso del backup e riavvia. La stessa chiave di crittografia è necessaria per recuperare le credenziali.
#Aggiornare n8n senza danneggiare l'istanza
n8n pubblica versioni frequenti. Il tag latest dell'immagine punta all'ultima versione stabile, il tag next alla versione di test; i tag numerati permettono di fissare una versione precisa. Con Compose, l'aggiornamento richiede tre comandi: scaricare la nuova immagine, arrestare il vecchio container e crearne uno nuovo con la stessa configurazione. I dati restano nel volume e non vengono toccati. Le migrazioni dello schema del database, quando necessarie, vengono eseguite automaticamente all'avvio.
Tre precauzioni evitano la maggior parte delle brutte sorprese. Prima di tutto, fate un backup: una migrazione del database non può essere annullata. Leggete le note di rilascio su github.com/n8n-io/n8n/releases e la pagina di aggiornamento della documentazione, docs.n8n.io/hosting/installation/updating/: le versioni principali rimuovono variabili d'ambiente o cambiano i comportamenti predefiniti, e la documentazione mantiene una pagina dedicata alle modifiche incompatibili. Infine, se l'istanza è importante per voi, preferite un tag numerato a latest: scegliete voi quando aggiornare invece di subirlo al prossimo pull.
#Esporre n8n in HTTPS, con prudenza
Finché utilizzi n8n dalla macchina che lo ospita o dalla tua rete locale, l'installazione precedente è sufficiente. La necessità di un'esposizione emerge con i webhook: un servizio di terze parti che deve chiamare la tua istanza, oppure un accesso dall'esterno. Esistono due strade e spesso la prima è quella giusta.
- Una VPN invece dell'esposizione
- Tailscale, WireGuard o la VPN del tuo router consentono di accedere a n8n da qualsiasi luogo senza aprire porte su Internet. Per un uso personale senza webhook pubblico, è la soluzione più sicura e semplice. L'istanza resta in HTTP sulla rete privata e N8N_SECURE_COOKIE=false diventa necessario se vi accedi tramite l'indirizzo VPN.
- Un reverse proxy con certificato
- Per ricevere webhook pubblici servono un nome di dominio, un reverse proxy che termini il TLS e un certificato. L'esempio ufficiale di n8n usa Traefik; noi mostriamo Caddy, la cui configurazione occupa appena tre righe e che ottiene da solo i certificati Let's Encrypt.
Nella configurazione seguente, n8n non pubblica più alcuna porta: è raggiungibile solo Caddy, sulle porte 80 e 443, che inoltra le richieste al container n8n attraverso la rete interna di Compose. Le variabili N8N_HOST, N8N_PROTOCOL e WEBHOOK_URL indicano a n8n l'indirizzo pubblico attraverso cui viene servito; senza di esse, gli URL dei webhook mostrati nell'editor punterebbero a localhost e i reindirizzamenti OAuth fallirebbero.
Prima di eseguire docker compose up -d, il record DNS di n8n.votre-domaine.fr deve puntare all'indirizzo pubblico della macchina e le porte 80 e 443 devono essere inoltrate a essa. Caddy richiede quindi un certificato a Let's Encrypt e lo rinnova senza intervento. I volumi caddy_data e caddy_config conservano i certificati e lo stato tra un riavvio e l'altro.
#Risoluzione dei problemi: i blocchi più frequenti
- Messaggio sul cookie sicuro all'apertura
- Accedi a n8n tramite HTTP da un indirizzo che non è localhost. Puoi passare a HTTPS oppure aggiungere N8N_SECURE_COOKIE=false, esclusivamente su una rete privata.
- Errore di autorizzazione su /home/node/.n8n
- Il container viene eseguito con l'utente node, non con root. Succede quando si sostituisce il volume denominato con una cartella dell'host i cui permessi non corrispondono. Mantieni il volume denominato oppure allinea il proprietario della cartella all'ID utente 1000, quello di node nell'immagine.
- I workflow pianificati vengono eseguiti all'ora sbagliata
- GENERIC_TIMEZONE è assente o scritto in modo errato. Il valore atteso è un nome di fuso orario IANA come Europe/Paris. Ogni workflow può anche impostare il proprio fuso orario nelle impostazioni.
- I webhook mostrano un indirizzo localhost
- WEBHOOK_URL non è definita oppure non corrisponde all'indirizzo tramite il quale il servizio di terze parti vi raggiunge. Il valore deve terminare con una barra obliqua e includere il protocollo.
- Il database cresce senza fine
- La pulizia delle esecuzioni è disattivata o impostata su un periodo troppo lungo. Verificate EXECUTIONS_DATA_PRUNE e EXECUTIONS_DATA_MAX_AGE e ricordatevi anche dell'opzione che conserva i dati delle esecuzioni riuscite, disattivabile workflow per workflow.
- Dopo un aggiornamento, n8n rifiuta di avviarsi
- Leggi il log con docker compose logs n8n: il messaggio indica generalmente una variabile rimossa o una migrazione non riuscita. Confrontalo con le note di rilascio, poi ripristina il backup se necessario.
- n8n non vede Ollama sulla stessa macchina
- Da un container, localhost indica il container stesso, non l'host. L'indirizzo da utilizzare dipende dal sistema e dal modo in cui viene avviato Ollama; è questo l'argomento della guida su n8n e di Ollama citato qui sotto.
Per le domande che non trovano risposta nella documentazione, il forum community.n8n.io è attivo e l'editore risponde. Indicate la versione esatta, la modalità di installazione e le righe del log: sono le prime tre cose che vengono richieste.
#Per approfondire
L'istanza è configurata, sottoposta a backup e aggiornata. Il passo logico successivo è collegarla a un modello locale e poi integrarla in uno stack più ampio. Fonti ufficiali consultate per questa guida: la sezione sull'hosting della documentazione di n8n (docs.n8n.io/hosting/), la pagina sull'installazione Docker (docs.n8n.io/hosting/installation/docker/), la pagina sugli aggiornamenti, la pagina sulla licenza e quella sulle funzionalità dell'edizione community. Queste pagine cambiano con le versioni: in caso di divergenza con questa guida, fanno fede loro.
- n8n + Ollama: automatizzare con un'IA 100 % locale
- La guida successiva: nodi IA, connessione a Ollama dal container, primi workflow di traduzione e riepilogo. https://quelllm.fr/guide/n8n-ollama-automatisation-workflow
- Ollama con Docker
- Se volete anche eseguire Ollama in un container, accanto a n8n, con accesso alla GPU. https://quelllm.fr/guide/ollama-docker-installation-guide
- Mettere un LLM in produzione con Docker Compose
- Lo stack completo Ollama, Open WebUI, Qdrant, n8n e Traefik in un unico file Compose, per andare oltre l'istanza isolata. https://quelllm.fr/guide/deployer-llm-docker-compose-production
- Mettere in sicurezza il proprio server Ollama
- Autenticazione, firewall, reverse proxy: le regole di esposizione valgono per qualsiasi servizio auto-ospitato, compreso n8n. https://quelllm.fr/guide/securiser-serveur-ollama
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.