Come installare n8n in locale: la risposta diretta
Installi Docker Desktop, crei una cartella di progetto con un file docker-compose.yml, esegui docker compose up -d e n8n è disponibile su localhost:5678. Il flag -d lo manda in background. Aggiungi restart: unless-stopped nel file e il container si riavvia da solo ogni volta che la macchina riparte.
Perché installare n8n in locale prima di andare in produzione
La versione cloud di n8n costa. Nella fase in cui stai ancora capendo quali workflow ti servono davvero, pagare un abbonamento per testare è uno spreco. L’installazione locale ti dà l’ambiente completo, senza limiti di esecuzioni, senza scadenze. Costruisci, rompi, ricomincia. Quando la macchina è pronta e genera valore, la sposti su un server.
C’è un altro motivo. Lavorare in locale ti costringe a capire come funziona l’infrastruttura: volumi, variabili d’ambiente, rete Docker. Chi salta questo passaggio e va diretto al cloud poi non sa cosa guardare quando qualcosa si rompe in silenzio. E si rompe, prima o poi.
In questo articolo ti mostro come installare n8n con Docker in locale, come configurarlo perché persista i dati e si riavvii da solo, e cosa controllare prima di considerare l’installazione finita.

Cosa ti serve prima di iniziare
Due cose sole: Docker Desktop installato sul tuo computer e un terminale. Se usi Mac o Windows, Docker Desktop include già tutto il necessario — il daemon, il CLI e la gestione dei volumi. Se usi Linux, installi Docker Engine e Docker Compose separatamente seguendo la documentazione ufficiale Docker.
Non serve Node.js, non serve npm, non serve sapere nulla di JavaScript. Docker scarica l’immagine n8n già pronta e la esegue in un container isolato. La tua macchina non viene toccata al di fuori di quello che dichiari nel file di configurazione.
Versione di Docker raccomandata
Qualunque versione stabile recente di Docker Desktop funziona. L’unico requisito è che docker compose (senza trattino) sia disponibile: dalla versione 20.10 in poi è incluso nel CLI base. Se il tuo Docker è più vecchio, aggiornalo prima di procedere.
Come installare n8n con Docker Compose: i passi
Questi sono i passi nell’ordine in cui li esegui. Uno alla volta, senza saltare.
- Crea una cartella sul tuo computer, ad esempio
n8n-local. - Dentro quella cartella, crea un file chiamato
docker-compose.yml. - Incolla questa configurazione nel file:
version: '3.8'
services:
n8n:
image: n8nio/n8n
restart: unless-stopped
ports:
- '5678:5678'
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=scegli-una-password
- GENERIC_TIMEZONE=Europe/Rome
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
- Apri il terminale, spostati nella cartella con
cd n8n-local. - Esegui
docker compose up -d. - Aspetta che Docker scarichi l’immagine e avvii il container. La prima volta può volerci qualche minuto a seconda della connessione.
- Apri il browser su
http://localhost:5678. Trovi n8n.
Dalla seconda volta in poi, il container parte da solo quando accendi il computer. Non devi fare nulla.

Le variabili d’ambiente che contano davvero
La configurazione minima funziona, ma ci sono tre impostazioni che evitano problemi futuri.
Autenticazione base
N8N_BASIC_AUTH_ACTIVE=true attiva un layer di autenticazione HTTP sull’interfaccia. In locale potrebbe sembrarti superfluo, ma se il tuo computer è in una rete condivisa o usi un tunnel come ngrok per esporre n8n a webhook esterni, senza autenticazione chiunque può accedere all’interfaccia. Imposta username e password prima ancora di aprire il browser la prima volta.
Timezone
GENERIC_TIMEZONE=Europe/Rome allinea l’orologio del container al tuo fuso orario. Senza questa riga, i trigger programmati girano sull’UTC. I log mostrano orari sbagliati e i cron schedulati alle 9:00 partono alle 10:00. Non è un bug di n8n: è un container che non sa dove sei.
Webhook URL
Se vuoi ricevere webhook da servizi esterni mentre lavori in locale, il container non è raggiungibile dall’esterno per definizione. La soluzione più rapida è un tunnel: ngrok espone la porta 5678 su un URL pubblico temporaneo. Aggiungi poi WEBHOOK_URL=https://il-tuo-url-ngrok.ngrok.io nelle variabili d’ambiente e n8n usa quell’URL quando genera gli indirizzi webhook.
La regola
Un’automazione senza guardie esegue sbagliato con la stessa sicurezza con cui esegue giusto
Il container che gira in background non ti avvisa se smette di ricevere dati. Aggiungi almeno un workflow di monitoraggio che verifica periodicamente che i tuoi flow principali siano attivi.
- Restart policy — usa always o unless-stopped, mai il default che non riavvia
- Volume dichiarato — senza il volume i dati spariscono al riavvio del container
- Log attivi — docker compose logs -f n8n è il primo posto dove guardare quando qualcosa tace
Come verificare che l’installazione sia stabile
Far partire il container è la parte facile. La parte che quasi nessuno fa è verificare che la macchina regga nel tempo.
Controlla che il volume persista
Crea un workflow qualsiasi in n8n, salvalo. Poi esegui docker compose down e subito dopo docker compose up -d. Torna su localhost:5678: il workflow deve essere ancora lì. Se non c’è, il volume non è configurato correttamente. Guarda la sezione volumes nel file docker-compose.yml e assicurati che la sintassi sia identica a quella sopra.
Controlla i log
Il comando docker compose logs -f n8n mostra i log in tempo reale. Appena dopo l’avvio dovresti vedere righe che confermano che n8n è in ascolto sulla porta 5678 e che il database SQLite è stato inizializzato. Se vedi errori di permessi sui file, il problema è quasi sempre nel path del volume.
Controlla il riavvio automatico
Riavvia il computer. Aspetta due minuti. Apri localhost:5678. Se n8n risponde senza che tu abbia lanciato nessun comando, la policy restart: unless-stopped funziona correttamente.
Locale vs cloud: quando smettere di usare l’installazione locale
| Criterio | Locale (Docker Desktop) | Cloud / VPS |
|---|---|---|
| Costo | Zero | Da ~5€/mese (VPS) a ~20€/mese (n8n Cloud) |
| Webhook in entrata | Solo con tunnel (ngrok) | Nativi, URL fisso |
| Uptime | Solo quando il computer è acceso | 24/7 |
| Manutenzione | Aggiornamenti manuali | Automatica (n8n Cloud) o manuale (VPS) |
| Adatto a | Test, sviluppo, prototipazione | Workflow in produzione |
Il passaggio ha senso quando hai workflow che devono girare anche mentre il computer è spento, o quando ricevi webhook da terze parti e il tunnel è diventato un punto di fragilità. Per chi vuole restare su hosting condiviso senza gestire un VPS, ho scritto un tutorial specifico su come installare n8n su Hostinger a meno di 5€ al mese.
Alternativa senza server
Make: stessa automazione, zero infrastruttura da gestire
Se non vuoi occuparti di Docker, aggiornamenti e uptime, Make è la strada più diretta. Stessa logica visuale di n8n, nessun server da presidiare. Il piano gratuito include 1.000 operazioni al mese.
- Primi giorni — connetti due tool che già usi e costruisci il primo scenario in meno di 30 minuti
- Settimana uno — replica in Make un workflow che hai già in testa ma non hai mai costruito
- Settimana due — attiva le notifiche di errore per sapere quando uno scenario si ferma
Apri il piano gratuito di Make →
Link di affiliazione: se ti iscrivi da qui io prendo una commissione, tu paghi uguale. Lo linko perché ci lavoro dentro ogni giorno.
Aggiornare n8n senza perdere i dati
L’immagine n8nio/n8n senza tag di versione scarica sempre la latest al primo pull, poi smette di aggiornarsi. Per aggiornare n8n in locale esegui questi tre comandi in sequenza:
docker compose pull— scarica la versione più recente dell’immagine.docker compose down— ferma il container.docker compose up -d— riparte con la nuova immagine.
I dati sono nel volume nominato n8n_data: il down non lo cancella. Workflow, credenziali e esecuzioni restano intatti. Se vuoi una versione specifica invece della latest, sostituisci n8nio/n8n con n8nio/n8n:1.x.x nel file docker-compose.yml. La lista delle versioni disponibili è nella documentazione ufficiale di n8n.
Una volta che il tuo n8n locale gira stabile e hai capito cosa costruire, il passo successivo logico è un primo workflow reale. L’installazione è la condizione necessaria, non l’obiettivo. La macchina vale per quello che esegue, non per il fatto che gira.
Se da lì vuoi espandere con integrazioni non standard, il capitolo sui community nodes di n8n ti mostra come aggiungere nodi non inclusi nell’installazione base. Funzionano anche in locale: basta che il container abbia accesso a npm.
Domande frequenti
Posso usare n8n in locale senza Docker?
Sì, puoi installarlo direttamente con npm tramite npm install -g n8n e avviarlo con il comando n8n. Richiede Node.js 18 o superiore. Il vantaggio di Docker è l’isolamento: nessuna dipendenza da installare sulla macchina, aggiornamenti puliti, riavvio automatico configurabile.
Dove salva i dati n8n in locale?
Con la configurazione Docker Compose mostrata in questa guida, i dati finiscono nel volume nominato n8n_data gestito da Docker. Puoi trovare la posizione fisica con docker volume inspect n8n_data. Non toccare quei file direttamente: per il backup usa l’export dei workflow dall’interfaccia.
Come installare n8n in locale su Windows?
Identico al Mac: installi Docker Desktop per Windows, abiliti WSL2 se richiesto durante l’installazione, poi segui gli stessi passi. Il file docker-compose.yml è identico. L’unica differenza è che il terminale da usare è PowerShell o Windows Terminal, non bash.
n8n in locale può ricevere webhook da Stripe o da altri servizi?
Non direttamente, perché localhost non è raggiungibile da internet. La soluzione è un tunnel: ngrok espone la porta 5678 con un URL pubblico temporaneo. Imposti WEBHOOK_URL nelle variabili d’ambiente con quell’URL e n8n genera gli indirizzi webhook corretti. Per webhook in produzione continua, serve un server con IP pubblico fisso.
Trasparenza: in questo articolo c’è un link di affiliazione. Se ti iscrivi da lì io ricevo una commissione, per te non cambia niente. Linko solo strumenti che uso in produzione.


