Introduzione
n8n è uno dei più potenti strumenti open source per l’automazione dei flussi di lavoro attualmente disponibili. A differenza delle alternative SaaS come Zapier o Make, n8n ti offre il pieno controllo sui tuoi dati e sulle automazioni, ma solo se lo ospiti autonomamente. Un VPS Linux è l’ambiente ideale per questo scopo: sempre attivo, conveniente e completamente sotto il tuo controllo.
Questa guida ti accompagna attraverso l’intero processo di configurazione di un’istanza n8n self-hosted e pronta per la produzione su un VPS Linux. Partirai da un server vuoto per arrivare a un’implementazione di n8n completamente sicura e con SSL abilitato, con Docker, Nginx, PostgreSQL, backup automatici e una configurazione di sicurezza rinforzata.
Punti chiave
- n8n su un VPS offre flussi di lavoro illimitati, nessun limite di utilizzo e piena proprietà dei dati
- Docker è il metodo di installazione consigliato per facilitare gli aggiornamenti e l’isolamento
- PostgreSQL è il database consigliato per i carichi di lavoro in produzione (non SQLite)
- Per l’uso in produzione è necessario un proxy inverso (Nginx) con certificato SSL Let’s Encrypt
- Il tuo VPS dovrebbe avere almeno 1 vCPU e 2 GB di RAM per un'esperienza n8n fluida con PostgreSQL
- I backup automatici regolari proteggono i dati dei tuoi flussi di lavoro e le tue credenziali
Che cos’è n8n?
n8n (si pronuncia “n-eight-n”) è una piattaforma open source per l’automazione dei flussi di lavoro che consente di collegare app, API e servizi utilizzando un editor visivo basato su nodi. Supporta oltre 400 integrazioni pronte all’uso e permette di eseguire codice JavaScript o Python personalizzato all’interno dei flussi di lavoro.
La differenza fondamentale tra n8n e i suoi concorrenti si riassume in tre aspetti: proprietà, costo e flessibilità.
**Proprietà: **Quando si ospita autonomamente n8n, i dati dei flussi di lavoro, le credenziali e i log di esecuzione non lasciano mai il proprio server. Per i team che gestiscono dati sensibili dei clienti, registrazioni finanziarie o logiche aziendali proprietarie, questo aspetto è di enorme importanza. Le piattaforme cloud memorizzano la logica di automazione sulla propria infrastruttura, soggetta alle loro politiche di conservazione dei dati e al loro livello di sicurezza.
**Costo: **Il piano cloud di n8n prevede un addebito per ogni esecuzione di flusso di lavoro, il che comporta un aumento rapido dei costi in caso di automazioni ad alto volume. Un team di medie dimensioni che esegue migliaia di operazioni al giorno può spendere centinaia di dollari al mese. Sul proprio VPS, una volta pagato il server, le esecuzioni sono illimitate senza costi aggiuntivi.
**Flessibilità: **n8n self-hosted consente di installare nodi della community, eseguire codice arbitrario all’interno dei flussi di lavoro, connettersi a servizi interni non accessibili da Internet pubblico e configurare ogni aspetto della distribuzione secondo le proprie preferenze. I piani cloud limitano molte di queste funzionalità.
Prerequisiti
Prima di iniziare, assicurati di disporre di:
- Un VPS Linux con Ubuntu 22.04 o 24.04 (consigliato). Verifica che il tuo provider offra Ubuntu per il piano che scegli, poiché alcuni piani entry-level offrono solo altre distribuzioni
- Un utente non root con privilegi sudo
- Un nome di dominio puntato all’indirizzo IP del tuo VPS (ad es., n8n.tuodominio.com)
- Accesso SSH al tuo server
- Conoscenza di base della riga di comando di Linux
Scegliere il VPS giusto
Il server che scegli influisce direttamente sulle prestazioni di n8n. Come minimo, ti servono 1 vCPU, 2 GB di RAM e 20 GB di spazio di archiviazione su SSD. La RAM aggiuntiva rispetto a un’installazione minima basata su SQLite è necessaria perché PostgreSQL, Nginx e n8n girano tutti contemporaneamente.
La piattaforma all-in-one per un SEO efficace
Dietro ogni azienda di successo c'è una forte campagna SEO. Ma con innumerevoli strumenti e tecniche di ottimizzazione tra cui scegliere, può essere difficile sapere da dove iniziare. Ebbene, non temete più, perché ho quello che fa per voi. Vi presento la piattaforma Ranktracker all-in-one per una SEO efficace.
Abbiamo finalmente aperto la registrazione a Ranktracker in modo assolutamente gratuito!
Creare un account gratuitoOppure accedi con le tue credenziali
Per i team con più utenti, flussi di lavoro complessi in più fasi o un elevato throughput di webhook, è consigliabile passare a 2 vCPU e 4 GB di RAM. Lo spazio di archiviazione dovrebbe essere di almeno 40 GB se si intende conservare log di esecuzione di lunga durata.
PetroSky offre piani VPS NVMe a Parigi e Montreal, con n8n disponibile come applicazione installabile con un clic al momento del pagamento: uno script di installazione open source distribuisce n8n con Docker Compose e configura automaticamente HTTPS tramite Caddy e Let’s Encrypt. Questa guida illustra la procedura manuale, che funziona con qualsiasi provider.
Nella scelta di un provider VPS, considera anche la posizione geografica. Ospita la tua istanza di n8n nella regione più vicina ai servizi a cui si connetterà più spesso: ciò riduce la latenza delle API durante l’esecuzione dei flussi di lavoro.
Passo 1: Aggiorna il tuo server
Accedete via SSH al vostro VPS ed eseguite un aggiornamento completo del sistema prima di installare qualsiasi cosa:
sudo apt update && sudo apt upgrade -y
In questo modo vi assicurate di disporre delle patch di sicurezza più recenti e che tutte le librerie di sistema siano aggiornate prima di aggiungere Docker e altri software.
Riavvia il sistema se è stato applicato un aggiornamento del kernel:
sudo reboot
Dopo esserti ricollegato tramite SSH, crea un utente di sistema dedicato per l’esecuzione di n8n. L’esecuzione dei servizi come root rappresenta un rischio per la sicurezza:
sudo adduser n8nuser
sudo usermod -aG sudo n8nuser
su - n8nuser
Passaggio 2: Installare Docker e Docker Compose
Il metodo di installazione ufficiale raccomandato da n8n è Docker. Docker isola n8n e le sue dipendenze dal resto del sistema, rendendo semplici gli aggiornamenti e i rollback.
Installa Docker utilizzando lo script ufficiale:
curl -fsSL https://get.docker.com | sudo sh
La documentazione di Docker sottolinea che lo script di installazione automatica non è consigliato per gli ambienti di produzione, poiché installa l’ultima versione disponibile senza consentire di sceglierne una specifica. Se si desidera fissare una versione specifica di Docker, utilizzare invece il metodo del repository apt descritto nella guida all’installazione di Docker su Ubuntu (docs.docker.com/engine/install/ubuntu/).
Aggiungi il tuo utente al gruppo Docker in modo da poter eseguire i comandi Docker senza sudo:
sudo usermod -aG docker $USER
newgrp docker
Verifica che Docker funzioni correttamente:
docker --version
docker compose version
Entrambi i comandi dovrebbero restituire le stringhe di versione senza errori. Se Docker Compose non viene trovato, installalo manualmente:
sudo apt install docker-compose-plugin -y
Passaggio 3: configurare PostgreSQL per l’ambiente di produzione
Per impostazione predefinita, n8n utilizza SQLite come database. SQLite va bene per l’uso personale e per flussi di lavoro leggeri, ma gestisce male le scritture simultanee, il che si traduce in rallentamenti ed errori del tipo “database bloccato” quando molti flussi di lavoro vengono eseguiti contemporaneamente. Per una distribuzione in produzione, PostgreSQL è la scelta giusta.
La piattaforma all-in-one per un SEO efficace
Dietro ogni azienda di successo c'è una forte campagna SEO. Ma con innumerevoli strumenti e tecniche di ottimizzazione tra cui scegliere, può essere difficile sapere da dove iniziare. Ebbene, non temete più, perché ho quello che fa per voi. Vi presento la piattaforma Ranktracker all-in-one per una SEO efficace.
Abbiamo finalmente aperto la registrazione a Ranktracker in modo assolutamente gratuito!
Creare un account gratuitoOppure accedi con le tue credenziali
Esegui PostgreSQL all’interno di Docker insieme a n8n:
mkdir ~/n8n && cd ~/n8n
Crea un file di ambiente per archiviare in modo sicuro le tue credenziali. Non inserire mai le password in modo statico nel tuo file compose:
nano ~/n8n/.env
Aggiungi quanto segue, sostituendo i valori segnaposto con password complesse e uniche:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=la_tua_password_sicura_per_il_database
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=la_tua_stringa_casuale_di_32_caratteri
Genera una chiave di crittografia sicura con:
openssl rand -hex 16
Utilizza l’output come N8N_ENCRYPTION_KEY. Questa chiave crittografa le credenziali memorizzate in n8n: se la perdi, tutte le credenziali salvate diventeranno irrecuperabili.
Passaggio 4: Crea il file Docker Compose di n8n
Crea il file docker-compose.yml nella tua directory n8n:
nano ~/n8n/docker-compose.yml
Inserisci la seguente configurazione:
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
tentativi: 10
n8n:
immagine: docker.n8n.io/n8nio/n8n
riavvio: sempre
porte:
- "127.0.0.1:5678:5678"
ambiente:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Europe/London
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- EXECUTIONS_MODE=regular
- N8N_LOG_LEVEL=info
volumi:
- n8n_data:/home/node/.n8n
dipende da:
postgres:
condizione: service_healthy
volumi:
postgres_data:
n8n_data:
Note sulla configurazione:
- Il binding della porta 127.0.0.1:5678:5678 garantisce che n8n sia accessibile solo localmente. Nginx gestirà tutto il traffico esterno: non esporre mai la porta 5678 direttamente a Internet.
- L'uso di `depends_on` con la condizione `service_healthy` garantisce che n8n attenda che PostgreSQL sia completamente pronto prima di avviarsi. Senza questa impostazione, n8n fallirà al primo avvio se il database non accetta ancora connessioni.
- N8N_LOG_LEVEL=info fornisce log operativi utili senza intasare lo spazio su disco come farebbe l’opzione debug.
Passaggio 5: Installazione e configurazione di Nginx
Nginx fungerà da proxy inverso, inoltrando il traffico HTTPS dalla porta 443 al tuo container n8n sulla porta 5678. Gestisce inoltre la terminazione SSL, il che significa che n8n stesso non dovrà occuparsi della gestione dei certificati.
sudo apt install nginx -y
Rimuovere il sito predefinito e creare un nuovo blocco server per n8n:
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/n8n
Inserisci quanto segue:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name n8n.tuodominio.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
chunked_transfer_encoding on;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 90s;
client_max_body_size 50m;
}
}
Il blocco `map` all'inizio gestisce correttamente le intestazioni di aggiornamento WebSocket. n8n utilizza i WebSocket per gli aggiornamenti in tempo reale nell'editor, quindi questa configurazione è importante: senza di essa, l'editor visivo non funzionerà correttamente.
La direttiva `client_max_body_size 50m` consente ai flussi di lavoro di ricevere payload di webhook di grandi dimensioni. Il limite predefinito di Nginx è di 1 MB, troppo piccolo per i flussi di lavoro che elaborano caricamenti di file o risposte JSON di grandi dimensioni.
Abilita la configurazione e provala:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Passaggio 6: Emettere un certificato SSL con Let’s Encrypt
Installare Certbot e il plugin per Nginx:
sudo apt install certbot python3-certbot-nginx -y
Richiedi un certificato per il tuo dominio:
sudo certbot --nginx -d n8n.yourdomain.com
Segui le istruzioni. Quando ti viene chiesto se reindirizzare il traffico HTTP a HTTPS, scegli Sì (opzione 2). Certbot aggiornerà automaticamente la configurazione di Nginx per gestire questo reindirizzamento e installerà la catena completa di certificati.
Verifica che il rinnovo automatico sia configurato correttamente:
sudo certbot renew --dry-run
Certbot installa un timer systemd che rinnova automaticamente i certificati ogni 12 ore. I certificati vengono rinnovati quando mancano meno di 30 giorni alla scadenza. Non dovresti mai doverli rinnovare manualmente.
Passaggio 7: Avvia n8n
Torna alla directory di n8n e avvia tutti i servizi:
cd ~/n8n
docker compose up -d
Docker scaricherà le immagini di PostgreSQL e n8n, creerà i volumi, avvierà prima PostgreSQL, attenderà che il controllo di integrità venga superato, quindi avvierà n8n. Questo processo richiede da 1 a 3 minuti al primo avvio.
Verifica che entrambi i container siano in esecuzione:
docker compose ps
Dovresti vedere sia postgres che n8n elencati con lo stato Up. Se n8n mostra lo stato Restarting, controlla i log:
docker compose logs n8n --tail=50
Una volta che entrambi i container sono in stato di funzionamento, apri il browser e vai su https://n8n.yourdomain.com. Ti verrà richiesto di creare un account proprietario con un indirizzo e-mail e una password. Questo account dispone di accesso amministrativo completo alla tua istanza di n8n.
Passaggio 8: Configurare n8n per l’avvio all’avvio del sistema
La direttiva restart: always nel file docker-compose.yml garantisce che tutti i container si riavviino automaticamente in caso di arresto anomalo o riavvio del server.
Verificalo riavviando il server:
sudo reboot
Dopo esserti ricollegato tramite SSH, verifica che n8n sia ripartito automaticamente:
docker compose -f ~/n8n/docker-compose.yml ps
Entrambi i container dovrebbero risultare in esecuzione senza alcun intervento manuale.
Passaggio 9: Configurazione dei backup automatici
I dati di n8n — flussi di lavoro, credenziali e cronologia delle esecuzioni — risiedono in due posizioni: il database PostgreSQL e il volume Docker n8n_data (che memorizza le chiavi di crittografia e alcune impostazioni di configurazione). Eseguire regolarmente il backup di entrambi.
Crea uno script di backup:
nano ~/n8n/backup.sh
Incolla quanto segue:
#!/bin/bash
BACKUP_DIR="/home/n8nuser/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
LOG_FILE="$BACKUP_DIR/backup.log"
# Assicurati che la directory di backup esista prima di qualsiasi altra operazione
mkdir -p "$BACKUP_DIR"
# Eseguire il dump di PostgreSQL
DUMP_FILE="$BACKUP_DIR/n8n_db_$DATE.sql"
docker compose -f /home/n8nuser/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n > "$DUMP_FILE"
# Verifica che il dump sia andato a buon fine e che il file non sia vuoto
if [ $? -ne 0 ] || [ ! -s "$DUMP_FILE" ]; then
echo "ERRORE: backup del database fallito in data $DATE" >> "$LOG_FILE"
rm -f "$DUMP_FILE"
exit 1
fi
# Eseguire il backup della chiave di crittografia e delle variabili d'ambiente
cp /home/n8nuser/n8n/.env "$BACKUP_DIR/n8n_env_$DATE.bak"
# Eseguire il backup del volume n8n_data (configurazione dell'istanza e nodi della community installati)
docker run --rm -v n8n_n8n_data:/data -v "$BACKUP_DIR":/backup alpine \
tar czf /backup/n8n_data_$DATE.tar.gz -C /data .
# Comprimere il dump del database
gzip "$DUMP_FILE"
# Conserva solo i backup degli ultimi 7 giorni
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.bak" -mtime +7 -delete
find "$BACKUP_DIR" -name "n8n_data_*.tar.gz" -mtime +7 -delete
echo "Backup completato: n8n_db_$DATE.sql.gz" >> "$LOG_FILE"
Il nome del volume n8n_n8n_data deriva dal fatto che Docker Compose antepone al volume il nome della cartella del progetto (n8n). Verificate il vostro con docker volume ls.
Rendi lo script eseguibile e pianificalo con cron:
chmod +x ~/n8n/backup.sh
crontab -e
Aggiungi questa riga per eseguire il backup ogni giorno alle 2 del mattino:
0 2 * * * /home/n8nuser/n8n/backup.sh >> /home/n8nuser/backups/backup.log 2>&1
Per garantire la ridondanza offsite, valuta la possibilità di sincronizzare la tua directory di backup con un provider di archiviazione a oggetti compatibile con S3 utilizzando rclone o aws s3 sync.
Passaggio 10: Abilitare le misure di sicurezza di base
Configurare un firewall
Installa UFW e consenti solo le porte necessarie al tuo server:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Verifica che le regole siano attive:
sudo ufw status verbose
Dovresti vedere che le porte 22 (SSH), 80 (HTTP) e 443 (HTTPS) sono consentite. Un avvertimento: Docker scrive le proprie regole firewall e bypassa UFW per le porte dei container pubblicate. La porta 5678 rimane privata perché il file compose la associa a 127.0.0.1, non a causa di UFW, quindi non modificare mai tale associazione impostandola su 0.0.0.0.
Disattiva l’autenticazione tramite password per SSH
Se utilizzi le chiavi SSH (come dovresti), disabilita completamente l’accesso SSH basato su password. Innanzitutto, assicurati che l’account n8nuser possa effettuare l’accesso con la tua chiave. Dal tuo computer locale, esegui:
ssh-copy-id n8nuser@il_tuo_server_ip
Quindi modifica la configurazione del server SSH:
sudo nano /etc/ssh/sshd_config
Imposta i seguenti valori:
PasswordAuthentication no
PermitRootLogin no
sudo systemctl restart ssh
Su molte immagini cloud di Ubuntu, un file in /etc/ssh/sshd_config.d/ (spesso 50-cloud-init.conf) imposta PasswordAuthentication yes, e questa impostazione ha la precedenza perché sshd utilizza il primo valore che legge. Verifica l'impostazione effettivamente in vigore:
sudo sshd -T | grep -i passwordauthentication
Dovrebbe visualizzare "passwordauthentication no". In caso contrario, modificare il valore nel file di override e riavviare nuovamente SSH.
Non chiudere la sessione SSH corrente finché non avrai verificato che l’accesso basato su chiave funzioni in una nuova finestra di terminale.
Limitare la frequenza di accesso alla pagina di login di n8n
Aggiungi un limite di velocità per rallentare gli attacchi di forza bruta contro l’endpoint di accesso a n8n.
La piattaforma all-in-one per un SEO efficace
Dietro ogni azienda di successo c'è una forte campagna SEO. Ma con innumerevoli strumenti e tecniche di ottimizzazione tra cui scegliere, può essere difficile sapere da dove iniziare. Ebbene, non temete più, perché ho quello che fa per voi. Vi presento la piattaforma Ranktracker all-in-one per una SEO efficace.
Abbiamo finalmente aperto la registrazione a Ranktracker in modo assolutamente gratuito!
Creare un account gratuitoOppure accedi con le tue credenziali
**Importante: **La direttiva limit_req_zone deve essere inserita all’interno del blocco http {} nella configurazione principale di Nginx — non all’interno del blocco server. Aprire la configurazione principale:
sudo nano /etc/nginx/nginx.conf
Aggiungi questa riga all’interno del blocco http {} esistente:
http {
...
limit_req_zone $binary_remote_addr zone=n8n_login:10m rate=5r/m;
...
}
Quindi, nel file di configurazione del sito n8n (/etc/nginx/sites-available/n8n), aggiungi questo blocco `location` all’interno del blocco `server` che ascolta sulla porta 443 (creato da Certbot nel Passo 6), accanto alla `location` esistente `/`. Nginx non trasferisce le intestazioni proxy dalla `location` `/`, quindi vengono ripetute qui:
location /rest/login {
limit_req zone=n8n_login burst=5 nodelay;
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Ricaricare Nginx per applicare le modifiche:
sudo nginx -t && sudo systemctl reload nginx
Questo limita ogni indirizzo IP a circa 5 tentativi di accesso al minuto, con una piccola tolleranza per i picchi.
Mantenere aggiornati n8n e PostgreSQL
Scaricare e riavviare regolarmente con le immagini più recenti:
cd ~/n8n
docker compose pull
docker compose up -d
Docker scaricherà le immagini più recenti di n8nio/n8n e postgres e riavvierà solo i container per i quali è disponibile una versione più recente.
Per l’ambiente di produzione, si consiglia di fissare l’immagine n8n a un tag di versione specifico (docker.n8n.io/n8nio/n8n:<versione>, tratto dalle note di rilascio di n8n) e di effettuare gli aggiornamenti in modo mirato, in modo che un’operazione di pull di routine non salti mai una versione principale prima di aver letto il changelog.
Risoluzione dei problemi più comuni
Il container n8n continua a riavviarsi
Controllare i log del container immediatamente dopo l’inizio del ciclo di riavvio:
docker compose logs n8n --tail=100
Cause comuni:
- Errore di connessione al database: assicurati che PostgreSQL sia funzionante con il comando `docker compose ps`. Verifica che la variabile `POSTGRES_PASSWORD` nel tuo file `.env` corrisponda a quella utilizzata per l’inizializzazione del database.
- Chiave di crittografia mancante o modificata: se N8N_ENCRYPTION_KEY non è impostata o è stata modificata dopo la prima esecuzione, n8n non può decrittografare le credenziali memorizzate e andrà in crash.
- RAM insufficiente: PostgreSQL e n8n insieme possono utilizzare da 1 a 1,5 GB di RAM. Verifica la memoria disponibile con il comando `free -h`.
I webhook non funzionano
I webhook richiedono che n8n sia raggiungibile da Internet sul proprio dominio. Verificare:
- Il record DNS A del tuo dominio punta all’IP del tuo VPS: dig n8n.tuodominio.com
- Nginx è in esecuzione: sudo systemctl status nginx
- La porta 443 è aperta: sudo ufw status
- La variabile d’ambiente WEBHOOK_URL corrisponde esattamente al tuo dominio pubblico, compresa la barra finale
L'editor di n8n non si carica correttamente
Se l'editor visivo si carica ma mostra un'area di lavoro vuota o gli aggiornamenti in tempo reale smettono di funzionare, la connessione WebSocket non va a buon fine. Verifica che il blocco $http_upgrade sia presente nella configurazione di Nginx e che tu stia utilizzando la variabile $connection_upgrade — non la stringa letterale “upgrade” — nella riga proxy_set_header Connection.
Errori relativi al certificato SSL
Se Certbot fallisce con un errore di convalida del dominio, verifica che la porta 80 sia accessibile da Internet:
curl -I http://n8n.yourdomain.com
Se la richiesta va in timeout, è possibile che il firewall del tuo provider VPS stia bloccando la porta 80. Controlla le regole del firewall nella console cloud oltre a quelle di UFW.
Conclusione
L'hosting autonomo di n8n su un VPS Linux offre una piattaforma di automazione del flusso di lavoro pronta per la produzione, senza limiti di esecuzione, con piena riservatezza dei dati e la flessibilità necessaria per eseguire qualsiasi integrazione richiesta. La configurazione descritta in questa guida — Docker, PostgreSQL, proxy inverso Nginx, certificato SSL Let’s Encrypt, backup automatici e rafforzamento della sicurezza — è lo stesso stack utilizzato negli ambienti di produzione e fornisce una base stabile e sicura su cui costruire.
A differenza di un’installazione minima tramite il comando `docker run`, questa configurazione è progettata per resistere ai riavvii del server, gestire l’esecuzione simultanea dei flussi di lavoro e riprendersi in modo corretto in caso di guasti. Le tue credenziali sono crittografate, i tuoi dati vengono sottoposti a backup notturni e il tuo endpoint di accesso è soggetto a limitazioni di frequenza per proteggersi dagli attacchi di forza bruta.
Una volta che la tua istanza è in esecuzione, esplora i nodi integrati di n8n per database, API, webhook e integrazioni con l’intelligenza artificiale per iniziare subito ad automatizzare i tuoi flussi di lavoro. Il forum della community self-hosted all’indirizzo community.n8n.io è inoltre un’ottima risorsa per idee sui flussi di lavoro, risoluzione dei problemi relativi ai nodi e consigli sull’implementazione.

