Workflow Automation: Installazione di n8n in locale e su un server

Negli ultimi anni stanno nascendo tante piattaforme di automazione (workflow automation) “no-code” o “low-code” che permettono di collegare applicazioni (web e desktop), API e servizi senza dover scrivere codice complesso. n8n è una di queste ed è open source, gratuita,  facile da usare e molto flessibile. Con pochi clic si possono creare flussi che scambiano dati tra applicazioni, API o database, automatizzando attività ripetitive come inviare email, aggiornare fogli di calcolo o integrare sistemi aziendali.

Nelle prossime settimane lo userò per fare dei test di automazione di alcuni processi e per verificare se alcuni flussi, che attualmente girano su un ESB di Mulesoft, possono essere migrati su questa piattaforma.

Per questo motivo ho dovuto installarlo sia in locale sul mio PC Windows (utilizzando l’interprete Node.js già presente), sia un server Ubuntu (utilizzando un container Docker), in questo post descrivo i passi da eseguire per portare a termine queste installazioni.

1. Workflow Automation: differenze con NodeRed e Mulesoft ESB

Per quanto riguarda l’automazione di processi, mi è capitato di lavorare con diversi prodotti, tra questi: n8n, Node-RED e MuleSoft ESB. Per quanto abbiano alcune funzionalità che potrebbero essere simili c’è da dire che sono strumenti con filosofie molto diverse.

  • n8n è pensato per essere leggero e flessibile, consente di creare flussi di automazione collegando API, servizi e script, senza scrivere troppo codice. È perfetto per test, integrazioni rapide o automazioni personali con programmi come Gmail, app di social (Facebook, X, ecc.) , Gdrive, piattaforme di comunicazione (Slack, Discord), app di messaggistica (WhatsApp, Telegram, ecc.), API di IA, ecc.
  • Node-RED è un prodotto usato in ambito IoT, come interfaccia grafica per disegnare flussi che elaborino eventi e dati in tempo reale. È ideale per sensori, Raspberry Pi o sistemi che reagiscono a input esterni continui.
  • MuleSoft ESB è un prodotto commerciale (anche se ha una versione CE) che funziona come Enterprise Service Bus, cioè una piattaforma per orchestrare integrazioni complesse tra sistemi aziendali, con gestione di API, sicurezza, logging, ecc. in modo centralizzato. Mule ESB è ottimo: per far comunicare applicazioni scritti con linguaggi diversi o che usano dati in formati diversi, per mascherare e modernizzare gradualmente sistemi obsoleti e per impedire che applicazioni parlino tra di loro con connessioni punto-punto ma lo facciano tramite un “bus” centralizzato.

Tutti e tre questi prodotti propongono una dasdhboard nella quale è possibile collegare usando il drag and drop dei “bloccchettini“, ognuno di quali svolge una certa attività o elabora dei dati che poi sono passati al blocchettino successivo. Tutti e tre hanno la possibilità di recuperare questi blocchettini da una libreria che ne contiene moltissimi già fatti e pronti per essere configurati ed utilizzati.

 La scelta di uno di questi tre prodotti dipende dalla complessità, dall’ambito e dallo scopo del progetto.

2. Installazione  e configurazione locale con Node.js e PM2

Qui di seguito riporto i passaggi che ho seguito per installare n8n su Windows 11,

È necessario che sul nostro PC ci sia Node.js che contiene il gestore di pacchetti npm, se già c’è il primo passo della lista che segue può essere saltato:

  1. Installazione di Node.js: Per Windows esiste un pacchetto di installazione da scaricare ed eseguire.[5]
  2. Installazione di n8n e pm2 (è un gestore di processi comodo per avviare programmi che usano Node.js). Da terminale (per esempio PowerShell) digitare il comando:
    npm install -g n8n pm2
  3. Sempre dal terminale, possiamo avviare n8n con il comando seguente:
    n8n
  4.  Se il programma è partito sarà anche possibile aprilro nel browser digitando la lettera “o” nella tastiera, come dice il messaggio seguente:
  5. A questo punto il programma è in esecuzione sulla porta 5678 (http://localhost:5678) e compare una form per impostare l’account dell’amministratore.
  6. Premiamo CTRL+C per arrestare l’esecuzione.
  7. Vediamo in che directory è stato installato n8n (ci servirà per configurare pm2):
    PS C:\SPAZIODATI> where.exe n8n
    C:\Users\claudio\AppData\Roaming\npm\n8n
    C:\Users\claudio\AppData\Roaming\npm\n8n.cmd
  8. A questo punto possiamo introdurre pm2 che è un programma che facilita l’avvio e il monitoraggio delle applicazioni Node.js. Quindi, creiamo in una directory di lavoro il file ecosystem.config.json e ci scriviamo dentro il comando per avviare n8n:
    {
      "apps": [
        {
          "name": "n8n",
          "script": "C:\\Users\\claudio\\AppData\\Roaming\\npm\\node_modules\\n8n\\bin\\n8n",
          "env": {
            "N8N_PORT": 5678,
            "N8N_EDITOR_BASE_URL": "http://localhost:5678"
          }
        }
      ]
    }
  9.  Dopo aver salvato e chiuso il file, possiamo lanciare uno dei due comandi seguenti per avviare n8n:
    pm2 start C:\SPAZIODATI\ecosystem.config.js #Da una qualsiasi cartella.
    pm2 start ecosystem.config.js #Dalla cartella in cui si trova il file.

  10. Questo è un elenco di comandi per gestire i processi:
    pm2 list        #Mostra la lista dei processi gestiti da PM2 con stato, uptime e CPU/RAM.
    pm2 stop n8n    #Ferma n8n 
    pm2 restart n8n #Riavvia n8n pm2 delete n8n # Rimuove n8n pm2 logs n8n # Mostra i log in tempo reale
    pm2 show n8n    #Dettagli completi sul processo “n8n” (path, log, variabili d’ambiente, ecc.
    pm2 monit       #Apre un’interfaccia interattiva per monitorare risorse e log.
    pm2 reload all  #Ricarica tutti i processi senza downtime (utile in produzione).
    pm2 env 0       #Mostra le variabili d’ambiente del processo con ID 0.
    pm2 update      #Aggiorna PM2 e ricarica tutti i processi.
    pm2 save        #Salva lo stato corrente dei processi per il riavvio automatico al boot.
    pm2 startup     #Configura PM2 per avviarsi automaticamente al riavvio del sistema. Ti mostrerà un comando da copiare e incollare.

Da notare che, se ci servissero altre applicazioni basate su Node.js, potremmo inserire i comandi di avvio in ecosystem.config.json e gestire tutte queste applicazioni con i comandi pm2 e utilizzando, per ciascuna di esse, il nome che le abbiamo dato nel file JSON nell’attributo “name“. È anche possibile fare in modo che le applicazioni partano all’avvio del sistema operativo.

 

2. Installazione su server Ubuntu con Docker compose

Ho installato n8n anche sul mio server in modo da averne una versione raggiungibile da Internet. Come tutti ormai sanno, su Aruba ho un server virtuale con Ubuntu sul quale faccio varie prove e test.

Su questo server ho installato Docker per poter eseguire dei container. Nel seguito elenco i comandi che ho usato, da tenere presente che:

  • Ho scelto di usare come volume (disco) persistente una cartella raggiungibile senza entrare nel container (Bind Mounts): /home/n8n/data.
  • Per facilità Docker sul server gira come root, questa non è un’installazione di produzione e i container sono accesi solo mentre li uso.

Procedura:

  1. Ho creato la cartella /home/n8n/data e ho dato i permessi di scrittura l’utente 1000 che sul container è l’utente con cui gira n8n, mentre sul mio server è l’utente Ubuntu:
    sudo mkdir /home/n8n
    sudo mkdir /home/data
    sudo chown -R 1000:1000 /home/n8n
    cd /home/n8n
    sudo vi docker-compose.yml
  2. In /home/data ho creato il file docker-compose.yml con questo contenuto:
    services:
      n8n:
        image: n8nio/n8n:latest
        container_name: n8n
        ports:
          - "127.0.0.1:5678:5678"   # esposto solo in localhost, passa da Apache
        environment:
          - N8N_HOST=n8n.claudiobattaglino.it
          - N8N_PROTOCOL=https
          - WEBHOOK_URL=https://n8n.claudiobattaglino.it
          - N8N_EDITOR_BASE_URL=https://n8n.claudiobattaglino.it
          - N8N_PORT=5678
          - N8N_USER_MANAGEMENT_DISABLED=false
          - N8N_SECURE_COOKIE=true
          - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
          - N8N_PROXY_HOPS=1
        volumes:
          - /home/n8n/data:/home/node/.n8n   # SQLite, config, chiavi
    volumes: {}
    
  3. Dopo aver salvato e chiuso il file ho eseguito questo comando per creare una chiave di cifratura:
    root@quercia:/home/n8n# openssl rand -base64 32
  4. L’output di questo comando va salvato e copiato nel file /home/n8n/.env in modo che abbia un contenuto di questo tipo
    root@quercia:/home/n8n# cat .env 
    N8N_ENCRYPTION_KEY=eGKkIs......Myd7cOmQ=
    
  5. A questo punto si può creare il container che si metterà in ascolto sulla porta 5678 (http://127.0.0.1:5678).
    docker compose up -d
  6. Ora il container è in esecuzione.
  7. Questi sono dei comandi che possono essere usati nella sua gestione:
    docker ps           # Mostra i container attivi.
    docker ps -a        # Mostra tutti i container, anche quelli fermati.
    docker start n8n    # Avvia il container n8n (se già creato).
    docker stop n8n     # Ferma il container.
    docker restart n8n  # Riavvia il container.
    docker rm n8n       # Elimina il container (deve essere fermo).
    docker logs -f n8n  # Mostra i log in tempo reale del container.
    

Questi sono invece altri comandi utiliper la gestione, la manutenzione e il debug di container Docker:

ATT!!! Quelle che ho indicato sono le istruzioni per mettere su una istanza per provare n8n, non di certo per creare un servizio in produzione.

 

3. Configurazione di Apache per rendere accessibile n8n da Internet

Dopo aver installato n8n in un container sul server Ubuntu il programma è accessibile solo localmente all’indirizzo: http://127.0.0.1:5678.

Sul server è installato Apache 2 e i certificati sono gestiti con Certbot di Let’s Encrypt.

Per renderlo visibile da Internet è stato necessario eseguire i seguenti passaggi:

  1. Modifica del DNS: Aggiunta di un record A per far puntare l’inidirizzo n8n.claudiobattaglino.it all’indirizzo IP di questo server.
  2. Moduli Apache: Installazione sul server dei seguenti moduli:
    sudo a2enmod proxy proxy_http proxy_wstunnel headers rewrite
    sudo apachectl configtest
    sudo systemctl reload apache2
  3. Installazione certificati SSL:
    sudo certbot --apache
    
  4. Configurazione Virtual Host: creazione del file 004-n8n.claudiobattaglino.it.conf e del file 004-n8n.claudiobattaglino.it-le-ssl.conf: 
    root@quercia:/etc/apache2/sites-available# cat 004-n8n.claudiobattaglino.it.conf
    <VirtualHost *:80>
        ServerName n8n.claudiobattaglino.it
    
        RewriteEngine On
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    
        ErrorLog ${APACHE_LOG_DIR}/n8n_error.log
        CustomLog ${APACHE_LOG_DIR}/n8n_access.log combined
    </VirtualHost>
    
    root@quercia:/etc/apache2/sites-available# cat 004-n8n.claudiobattaglino.it-le-ssl.conf
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName n8n.claudiobattaglino.it
    
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyAddHeaders On
        RequestHeader set X-Forwarded-Proto "https"
    
        # --- WebSocket per il canale Push di n8n ---
        ProxyPass        /rest/push  ws://127.0.0.1:5678/rest/push
        ProxyPassReverse /rest/push  ws://127.0.0.1:5678/rest/push
    
        # --- Traffico HTTP normale ---
        ProxyPass        / http://127.0.0.1:5678/ connectiontimeout=5 timeout=600
        ProxyPassReverse / http://127.0.0.1:5678/
    
        ErrorLog ${APACHE_LOG_DIR}/n8n_error.log
        CustomLog ${APACHE_LOG_DIR}/n8n_access.log combined
    
        SSLCertificateFile /etc/letsencrypt/live/n8n.claudiobattaglino.it/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/n8n.claudiobattaglino.it/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
    </IfModule>
  5. Riavvio di Apache: controlliamo che la configurazioe sia corretta e riavviamo Apache:
    sudo apachectl configtest
    sudo systemctl reload apache2
  6. Il sito a questo punto è accessibile all’indirizzo: https://n8n.claudiobattaglino.it.

Alcuni screenshot dell’applicazione:

Fonti e riferimenti

  1. n8n, sito ufficiale.
  2. Community n8n:Connect, Learn, and Share Automation Insights, sito ufficiale.
  3. Playlist di tutorial su n8n, canale Youtube ufficiale.
  4. Installazione di Node-RED per la progettazione di flussi in ambito IoT, su questo blog.
  5. Node.js, sito ufficiale.
  6. PM2, sito ufficiale.
  7. PM2 Process Management Quick Start, sito ufficiale.
  8. What is Mule ESB?, sito ufficiale.
  9. Node Red, sito ufficiale.
  10. Introduction – Node-RED Essentials, Youtube.
  11. Node-RED Corso base italiano – Introduzione – 1, RobotProjects, Youtube.
21 ore ago

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.