n8n self-hosted: guida per Ubuntu 24.04 con Docker e HTTPS
Installare n8n self-hosted su un server VPS: Docker, Docker Compose e Caddy con HTTPS, variabili d’ambiente, aggiornamenti, backup e sicurezza.

Per installare n8n sul suo server le servono un VPS con Ubuntu 24.04, un sottodominio come n8n.sua-azienda.ch, Docker con Docker Compose e un reverse proxy che ottenga il certificato HTTPS. Questa guida segue la documentazione ufficiale di n8n (stato: ottobre 2026, n8n 2.x) e usa Caddy come reverse proxy. Con un po’ di esperienza Linux, n8n è online in circa un’ora; dopo, aggiornamenti, backup e sicurezza sono compito suo.
Che cos’è n8n?
n8n è uno strumento per l’automazione dei workflow. In un editor grafico collega servizi come e-mail, Google Sheets, CRM, contabilità, webhook o modelli di IA in processi automatici: un nuovo modulo di contatto arriva da solo nel CRM, una fattura viene archiviata in PDF, un report parte via e-mail ogni lunedì. Dove non esiste un nodo pronto, aiutano le richieste HTTP e il suo codice JavaScript o Python.
Perché ospitare n8n in proprio?
- Controllo dei dati: workflow, credenziali e dati delle esecuzioni restano sul suo server. Così è più semplice rispettare i requisiti della legge sulla protezione dei dati (LPD) e dei contratti con i clienti.
- Costi: la Community Edition è gratuita. Paga il server, non il numero di esecuzioni.
- Libertà: nodi della community propri, qualsiasi variabile d’ambiente e accesso diretto ai sistemi interni nella stessa rete.
- Però: è lei responsabile di esercizio, aggiornamenti, backup e sicurezza. n8n stessa raccomanda espressamente il self-hosting a chi ha esperienza con i server.
| Criterio | n8n Cloud | Self-hosted (VPS) |
|---|---|---|
| Esercizio e aggiornamenti | n8n | Lei |
| Dove sono i dati | Infrastruttura di n8n | Il suo server |
| Modello di costo | Abbonamento per piano, con limiti di esecuzioni | Costo del server, nessuna licenza per la Community Edition |
| Limiti | Limiti del piano per esecuzioni e RAM | Capacità del suo server |
| Competenze necessarie | nessuna per l’esercizio | Linux, Docker, DNS, backup |
Requisiti
- Un server VPS con Ubuntu 24.04 LTS e accesso root o sudo via SSH.
- Memoria: 2 GB di RAM e da 1 a 2 vCPU bastano per iniziare. Per n8n Assistant con sandbox la documentazione indica almeno 4 GB di RAM e 2 vCPU.
- Spazio: 25 GB bastano per partire. Per impostazione predefinita n8n elimina i dati delle esecuzioni dopo 336 ore (14 giorni); si può modificare con la variabile EXECUTIONS_DATA_MAX_AGE.
- Un dominio di cui può gestire i record DNS, ad esempio per n8n.sua-azienda.ch.
- Un indirizzo e-mail per il certificato Let’s Encrypt.
Passo 1: preparare il server e il firewall
Acceda via SSH, aggiorni il sistema e crei un utente proprio, per non lavorare sempre come root:
- sudo apt update && sudo apt upgrade -y
- sudo adduser nomeutente
- sudo usermod -aG sudo nomeutente
- Aggiungere una chiave SSH per il nuovo utente e poi accedere di nuovo come nomeutente.
- sudo ufw allow OpenSSH
- sudo ufw allow 80
- sudo ufw allow 443
- sudo ufw enable
Passo 2: installare Docker e Docker Compose
Installi Docker dal repository ufficiale di Docker, non dal vecchio pacchetto Ubuntu docker.io. I comandi corrispondono alla guida di docs.docker.com per Ubuntu 24.04 (Noble):
- sudo apt install ca-certificates curl git
- sudo install -m 0755 -d /etc/apt/keyrings
- sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
- sudo chmod a+r /etc/apt/keyrings/docker.asc
- Creare il file /etc/apt/sources.list.d/docker.sources (sudo nano /etc/apt/sources.list.d/docker.sources) con queste cinque righe: Types: deb / URIs: https://download.docker.com/linux/ubuntu / Suites: noble / Components: stable / Signed-By: /etc/apt/keyrings/docker.asc
- sudo apt update
- sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Verifica: docker --version e docker compose version, poi sudo docker run hello-world
Passo 3: impostare il record DNS
Presso il suo fornitore DNS crei un record A per il sottodominio, ad esempio n8n.sua-azienda.ch, che punti all’indirizzo IPv4 del VPS. Attenda che il record venga risolto (test con ping n8n.sua-azienda.ch). Solo allora Caddy può ottenere il certificato.
Passo 4: installare n8n con Caddy
n8n mette a disposizione un repository di configurazione pronto con Docker Compose e Caddy. Caddy ottiene e rinnova automaticamente il certificato Let’s Encrypt.
- cd ~ && git clone https://github.com/n8n-io/n8n-docker-caddy.git
- cd n8n-docker-caddy
- sudo docker volume create caddy_data
- sudo docker volume create n8n_data
- nano .env e adattare i valori (vedi sotto).
- nano caddy_config/Caddyfile e sostituire il segnaposto nella prima riga con n8n.sua-azienda.ch.
- nano docker-compose.yml e, nel servizio n8n, cambiare la riga della porta 5678:5678 in 127.0.0.1:5678:5678.
- sudo docker compose up -d
- Aprire https://n8n.sua-azienda.ch nel browser e creare l’account proprietario.
Consiglio: La modifica in 127.0.0.1:5678 è importante: Docker pubblica le porte aggirando il firewall UFW. Senza questa modifica, n8n sarebbe raggiungibile anche senza cifratura su http://indirizzo-IP:5678. Caddy raggiunge n8n internamente tramite la rete Docker e non ha bisogno della porta.
Le variabili d’ambiente più importanti
- DATA_FOLDER=/home/nomeutente/n8n-docker-caddy – percorso della cartella clonata.
- DOMAIN_NAME=sua-azienda.ch e SUBDOMAIN=n8n – insieme formano l’indirizzo https://n8n.sua-azienda.ch.
- GENERIC_TIMEZONE=Europe/Zurich – fuso orario per le pianificazioni (Schedule Trigger).
- SSL_EMAIL=it@sua-azienda.ch – indirizzo di contatto per il certificato.
- In docker-compose.yml il repository imposta già N8N_HOST, N8N_PROTOCOL=https e WEBHOOK_URL, così gli indirizzi dei webhook iniziano correttamente con https.
- Facoltativo, sotto environment: TZ=Europe/Zurich, N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (come nel modello Compose ufficiale) e N8N_DIAGNOSTICS_ENABLED=false se non vuole inviare telemetria a n8n.
Aggiornamenti: n8n e server sempre aggiornati
n8n pubblica una nuova versione minore quasi ogni settimana. L’immagine senza indicazione di versione (latest) è la versione stabile per la produzione; il tag next è una versione preliminare instabile. Per aggiornare:
- Prima creare un backup (vedi sezione successiva).
- cd ~/n8n-docker-caddy
- sudo docker compose pull
- sudo docker compose down
- sudo docker compose up -d
- Testare brevemente i workflow. Prima di salti di versione importanti, leggere le note di rilascio e i breaking change.
Anche Ubuntu ha bisogno di aggiornamenti. Installi automaticamente gli aggiornamenti di sicurezza con sudo apt install unattended-upgrades e verifichi regolarmente se serve un riavvio.
Backup dei dati di n8n
Tutto ciò che conta si trova nel volume Docker n8n_data: il database SQLite con workflow ed esecuzioni e la chiave di cifratura con cui n8n protegge le sue credenziali. Senza questa chiave, le credenziali salvate sono inutilizzabili. Faccia quindi un doppio backup:
- Esportazione in file: sudo docker compose exec -u node n8n n8n export:workflow --backup --output=/files/backup/workflows/
- sudo docker compose exec -u node n8n n8n export:credentials --backup --output=/files/backup/credentials/
- Le esportazioni finiscono sul server nella cartella local_files/backup. Le credenziali restano cifrate.
- Volume completo: sudo docker compose stop, poi sudo docker run --rm -v n8n_data:/data -v $(pwd):/backup alpine tar czf /backup/n8n_data-$(date +%F).tar.gz -C /data . e infine sudo docker compose start.
- Copiare i backup su un altro sistema con rsync o scp, senza lasciarli solo sul VPS.
Consiglio: Annoti la chiave di cifratura anche nel suo gestore di password. Si trova nel file config del volume n8n_data (visualizzabile con sudo docker compose exec n8n cat /home/node/.n8n/config).
Sicurezza: cosa deve proteggere lei
- Firewall: aprire solo le porte 22, 80 e 443; collegare la porta 5678 solo a 127.0.0.1.
- SSH: accesso solo con chiave; in /etc/ssh/sshd_config impostare PasswordAuthentication no.
- La basic auth non serve: da n8n 1.0 la gestione utenti integrata protegge l’interfaccia. Attivi l’autenticazione a due fattori nelle impostazioni personali.
- Aggiornamenti: aggiornare regolarmente l’immagine n8n, l’immagine Caddy e Ubuntu. Le falle di sicurezza di n8n vengono chiuse con le nuove versioni.
- Webhook: proteggere i webhook di produzione con un controllo di header o token, perché sono raggiungibili senza accesso.
- Nodi della community: installarli solo da fonti affidabili, perché girano con i permessi di n8n.
Quale server VPS scegliere per n8n?
Per qualche decina di workflow basta un server piccolo. Da HostOn sceglie Ubuntu 24.04 direttamente al momento dell’ordine. VPS CORE 1 (1 vCPU, 2 GB di RAM, 25 GB SSD) a CHF 11.90 al mese basta per iniziare; con VPS CORE 2 (2 vCPU, 4 GB di RAM, 50 GB SSD) a CHF 19.90 al mese ha margine per molti workflow o per n8n Assistant. Entrambi sono unmanaged e disdicibili ogni mese: installazione, aggiornamenti e backup di n8n restano a suo carico, come descritto sopra.
Domande frequenti sul tema
Sì. La Community Edition self-hosted di n8n funziona senza chiave di licenza, gratuitamente e con quasi tutte le funzioni. Paga solo il server; alcune funzioni per team più grandi fanno parte delle edizioni a pagamento Business ed Enterprise.
n8n di per sé è leggero: i piani più piccoli di n8n Cloud funzionano con 320 MiB di RAM. Con sistema operativo, Docker e reverse proxy, 2 GB di RAM sono un buon punto di partenza; per molti workflow in parallelo o per n8n Assistant (la documentazione richiede almeno 4 GB di RAM e 2 vCPU) preveda di più.
No. Da n8n 1.0 la gestione utenti è integrata e la basic auth è stata rimossa. Al primo accesso crea un account proprietario (owner); in più è consigliabile attivare l’autenticazione a due fattori.
Nella cartella del progetto esegua in sequenza docker compose pull, docker compose down e docker compose up -d. Prima faccia un backup e, in caso di salti di versione importanti, legga le note di rilascio.
Le credenziali salvate non si possono più decifrare e vanno reinserite. Per questo conviene salvare il volume Docker n8n_data, o la chiave stessa, in un luogo sicuro.
Per iniziare basta il database SQLite integrato. Con molte esecuzioni, più utenti o se in futuro vuole usare la modalità queue con più worker, PostgreSQL è la scelta migliore.



