Per proteggere la tua istanza n8n, ti consigliamo un reverse proxy come Nginx o Traefik. Questo ti permetterà di aggiungere un certificato SSL/TLS, spesso gestito gratuitamente tramite Let’s Encrypt. Questo livello di sicurezza è essenziale quando si espongono webhook o API a Internet, garantendo la riservatezza e l’integrità degli scambi. In produzione, l’utilizzo di un database PostgreSQL è preferibile all’opzione nativa SQLite, poiché garantisce una migliore scalabilità e una gestione più efficiente di numerose query. Ecco l’elenco dei prerequisiti essenziali:
Server Linux aggiornato
(Debian 11+, Ubuntu 22.04+ consigliati)
Docker e Docker Compose installati
con versioni compatibili (Docker 20.10+, Compose 2.x)
- Reverse proxy installato (Nginx o Traefik consigliati)
- Nome di dominio che punta al server per facilitare l’accesso e la configurazione SSL
- PostgreSQL configurato tramite Docker per gestire il database n8n
- Configurazione di rete idonea : porte 80, 443 (HTTP/S) e 5678 (n8n) aperte e reindirizzate se necessario
- Chiunque si avvicina per la prima volta a Linux trarrà beneficio dalla comprensione di questi elementi: Docker incapsula le applicazioni in container leggeri, isolati dal sistema host, mentre un reverse proxy come Nginx reindirizza e protegge l’accesso in ingresso a n8n. PostgreSQL è un potente database relazionale che dovrebbe essere preferito per un’istanza di produzione, grazie alla sua robustezza e compatibilità con il framework Node.js, su cui si basa n8n. Configurazione dell’ambiente Docker e personalizzazione di n8n con Docker Compose su Linux
- La magia del deployment di n8n su Linux risiede nella facilità d’uso di Docker Compose. Questo file YAML descrive tutti i container e le loro interazioni in un formato leggibile e modificabile. La configurazione iniziale consiste nella creazione di un albero n8n dedicato e nella definizione di due file essenziali: .env
per le variabili d’ambiente e
docker-compose.yml
per orchestrare i servizi. Un aspetto spesso trascurato è la segregazione dei dati persistenti. È necessario creare tre cartelle locali: una per i dati PostgreSQL, una per i file generati da n8n e un’ultima per i file temporanei o di swap. Queste directory verranno montate nei rispettivi contenitori, evitando la perdita di dati in caso di riavvio o aggiornamento. Esempio di creazione di directory: mkdir -p /opt/docker-compose/n8n/{postgresql,n8n_data,n8n_files} chmod 777 /opt/docker-compose/n8n/n8n_data (necessario per evitare errori di autorizzazione) Il file
.env
contiene variabili chiave:
- N8N_HOST
- : nome host che l’interfaccia visualizzerà e utilizzerà per generare URL
N8N_WEBHOOK_URL : URL accessibile pubblicamente per il corretto funzionamento dei webhook POSTGRES_DB
- , POSTGRES_USER
- , POSTGRES_PASSWORD
- : informazioni di connessione al database PostgreSQLN8N_GENERIC_TIMEZONE : fuso orario, che influisce sull’esecuzione del flusso di lavoroIl file docker-compose.yml include due servizi principali:
- postgres : basato sull’immagine ufficiale di PostgreSQL con impostazioni delle variabili d’ambiente, volumi di persistenza e controlli di integrità
n8n : Immagine Docker ufficiale di n8n, configurazione delle variabili d’ambiente per connettere l’applicazione al database, gestione delle porte, volume per la persistenza di dati e file e dipendenza di PostgreSQL per lo stato di salute. Configurando utilizzando questi due file, si crea un ambiente automatizzato, riproducibile e facilmente modificabile. Questa è la forza combinata di software open source, Docker e Linux. Questo metodo protegge anche da errori di dipendenza o incompatibilità tra le versioni.
- https://www.youtube.com/watch?v=NAzpMf50auI Avvio e gestione di container Docker per n8n su un sistema Linux
- Una volta che l’ambiente è pronto, è necessario assicurarsi che i permessi sulle cartelle montate siano corretti per evitare che il contenitore n8n abbia problemi di scrittura dei propri file. Nella maggior parte dei casi, è necessario impostare chmod 777 sulla cartella contenente i dati di n8n, sebbene questo approccio sia permissivo e richieda una conoscenza approfondita dei rischi associati. L’avvio dei contenitori con il seguente comando consente di avviare e distribuire i servizi in background:
sudo docker compose up -d Monitorare lo stato dei contenitori tramite:sudo docker compose ps
sudo docker compose logs -f
per visualizzare i log di output in tempo reale, essenziale in caso di problemi
Il contenitore PostgreSQL deve essere in uno stato “integro” affinché n8n possa connettersi correttamente e avviarsi senza errori. I log mostreranno messaggi come:
- “L’editor è ora accessibile tramite: https://n8n.it-connect.local”
Questo messaggio conferma che il servizio è operativo e pronto per l’uso tramite la porta 5678, accessibile dal browser tramite il nome di dominio configurato. L’utilizzo di un gestore di log semplifica notevolmente la diagnostica durante il deployment di soluzioni complesse basate su Node.js, database PostgreSQL e middleware.
- Configurare un reverse proxy Nginx per proteggere ed esporre n8n tramite HTTPS su Linux Un reverse proxy è un elemento fondamentale per proteggere l’accesso a n8n, soprattutto se si utilizzano webhook o si espone l’automazione tramite Internet. Nginx è la scelta ottimale su Linux grazie alla sua leggerezza, affidabilità e facilità di configurazione. Invece di esporre direttamente la porta Docker 5678, Nginx funge da intermediario, consentendo di applicare un certificato SSL/TLS e di gestire i reindirizzamenti e le intestazioni HTTP essenziali. Ecco i passaggi chiave:
- Installa Nginx tramite il gestore pacchetti, ad esempio, sudo apt install nginx su Debian/Ubuntu. Crea una directory per archiviare il certificato SSL autofirmato o generato da Let’s Encrypt.
Genera un certificato con OpenSSL (o tramite Certbot per Let’s Encrypt):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/nginx/ssl/n8n.key -out /etc/nginx/ssl/n8n.crt
La configurazione di Nginx deve includere due blocchi server:
Un blocco in ascolto sulla porta 80, che eseguirà un reindirizzamento 301 a HTTPS. Un blocco HTTPS, con un certificato, supporto per i protocolli TLS 1.2 e 1.3 e configurazione proxy_pass su
http://127.0.0.1:5678
dove viene eseguito n8n. Il file di configurazione essenziale apparirà così (il nome di dominio deve essere adattato):
- Snippet di configurazione di Nginx:
server {listen 80; - server_name n8n.example.com;
- return 301 https://$server_name$request_uri;
}
server {
- listen 443 ssl http2;
- server_name n8n.example.com;
ssl_certificate /etc/nginx/ssl/n8n.crt;ssl_certificate_key /etc/nginx/ssl/n8n.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
nserver {n listen 80;n server_name n8n.example.com;n return 301 https://$server_name$request_uri;n}nnserver {n listen 443 ssl http2;n server_name n8n.example.com;nn ssl_certificate /etc/nginx/ssl/n8n.crt;n ssl_certificate_key /etc/nginx/ssl/n8n.key;n ssl_protocols TLSv1.2 TLSv1.3;n ssl_prefer_server_ciphers off;n ssl_session_cache shared:SSL:10m;n ssl_session_timeout 10m;nn location / {n proxy_pass http://127.0.0.1:5678;n proxy_http_version 1.1;n proxy_set_header Upgrade $http_upgrade;n proxy_set_header Connection 'upgrade';n proxy_set_header Host $host;n proxy_set_header X-Real-IP $remote_addr;n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;n proxy_set_header X-Forwarded-Proto $scheme;nn proxy_buffering off;n proxy_read_timeout 300s;n }n}n“} –>
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
noleggio / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Aggiornamento $http_upgrade;
proxy_set_header Connessione 'aggiornamento';
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;
proxy_bufferingoff;
proxy_read_timeout 300s; }
}
È essenziale attivare questo sito tramite un link simbolico in
/etc/nginx/sites-enabled/
e quindi ricaricare Nginx:
sudo ln -s /etc/nginx/sites-available/n8n.example.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx
Accedendo a https://n8n.example.com, verrà visualizzata l'interfaccia di amministrazione di n8n, protetta da HTTPS. Potrebbe verificarsi un avviso relativo al certificato SSL se il certificato è autofirmato, ma questo problema può essere risolto tramite una CA riconosciuta.
Introduzione a n8n: gestione di flussi di lavoro, webhook e integrazioni API su Linux
Una volta installato e accessibile n8n, la configurazione dei flussi di lavoro consente di sfruttare appieno l'automazione. n8n è basato su Node.js e offre supporto nativo per centinaia di servizi tramite le sue API, semplificando complesse catene di automazione. I concetti chiave includono:
Flussi di lavoro
: sequenze di attività automatizzate che possono includere script, chiamate API e vari trigger.
Webhook
: punti di ingresso HTTP per l'attivazione esterna di un flusso di lavoro, fondamentali per reagire a eventi esterni.
Integrazioni : connettori nativi per MySQL, PostgreSQL, Redis e molti altri, che facilitano l'interconnessione dei dati. Esempio pratico: sincronizzazione automatica dei dati CRM con un database MySQL dopo la ricezione di un webhook attivato da un modulo cliente. Questa orchestrazione evita errori manuali, riduce i tempi di elaborazione e libera risorse umane. n8n offre inoltre un’interfaccia grafica intuitiva e template pronti all’uso, accessibili tramite GitHub o il sito web ufficiale, velocizzando il processo anche per i meno esperti. Si consiglia di utilizzare Redis come cache intermedia per migliorare la gestione delle code nei flussi di lavoro di produzione di grandi dimensioni. La sinergia tra Docker, Linux e n8n semplifica le distribuzioni tradizionalmente complesse. Questa architettura modulare facilita gli aggiornamenti e il debug e offre una scalabilità controllata per supportare la crescita delle applicazioni di automazione.