Node.js è un ambiente di runtime JavaScript che ti permette di creare facilmente applicazioni lato server. Con il gestore di processi PM2 puoi configurare un’app Node.js che viene eseguita come servizio su Ubuntu 24.04.

Eseguire script Node.js come servizio

Sebbene gli script dell’ambiente di runtime JavaScript open source Node.js possano essere eseguiti dalla riga di comando direttamente dallo schermo, eseguirli come servizio tramite il gestore di processi PM2 offre agli script un comportamento più robusto. Se gli script vengono eseguiti in questo modo come servizio, si riavviano automaticamente quando il server viene riavviato o lo script va in crash.

PM2 è un gestore di processi per Node.js con un’ampia gamma di funzionalità che ti permettono di controllare e gestire i tuoi script Node.js. Visita il sito ufficiale di PM2 per ulteriori informazioni sull’uso di PM2.

Requisiti

Prima di iniziare con i passaggi successivi per l’installazione di Node.js con Apache e PM2, assicurati che siano soddisfatti i seguenti requisiti:

  • Un server Linux (Ubuntu 24.04).
  • Un nome di dominio funzionante che punta al server.
  • Un server web Apache funzionante e operativo

Installazione di Node.js

Per installare Node.js, ti serve lo strumento da riga di comando curl. Aggiorna i pacchetti del server e installa curl con i seguenti comandi:

sudo apt update
sudo apt install curl -y
bash

Scarica l’archivio personale dei pacchetti (PPA) di Node.js e aggiungilo alla cache dei pacchetti del server. L’archivio contiene una versione di Node.js più aggiornata rispetto ai repository di Ubuntu:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
bash

Installa quindi Node.js:

sudo apt install -y nodejs
bash

In questo modo verrà installato automaticamente anche npm.

Infine, installa il pacchetto build-essential per npm. build-essential installa strumenti di sviluppo essenziali come il compilatore e Make, necessari affinché Node.js possa compilare ed eseguire correttamente i moduli npm con estensioni native.

sudo apt install -y build-essential
bash

Creare un’applicazione Node.js di esempio

Per questo esempio, per prima cosa creeremo una directory separata nella root dei documenti del tuo sito web per ospitare le applicazioni Node.js:

sudo mkdir /var/www/html/nodejs
bash

Crea il file hello.js in questa directory:

sudo nano /var/www/html/nodejs/hello.js
bash

Poi inserisci nella pagina il seguente contenuto di esempio:

#!/usr/bin/env node
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World! Node.js is working correctly.\n');
}).listen(8080, '0.0.0.0');
console.log('Server running at http://127.0.0.1:8080/');
javascript

Salva e chiudi il file, quindi rendilo eseguibile con il seguente comando:

sudo chmod 755 hello.js
bash

Verifica del firewall

Ubuntu 24.04 in alcuni casi attiva per impostazione predefinita il firewall ufw. Per poter testare subito la tua applicazione Node.js, devi assicurarti che la porta 8080 sia aperta:

sudo ufw allow 8080/tcp
bash

Questo passaggio è particolarmente importante se desideri accedere al tuo server direttamente tramite indirizzo IP oppure con un browser al di fuori del server. Se Node.js viene reso disponibile esclusivamente tramite Apache e il proxy, questo passaggio è facoltativo, perché il proxy inoltra il traffico.

Installazione di PM2

Usa npm per installare PM2 con il seguente comando:

sudo npm install -g pm2
bash

Avvia lo script di esempio hello.js, appena creato, con il comando:

sudo pm2 start hello.js
bash

Come root, aggiungi PM2 agli script di avvio, in modo che venga riavviato automaticamente al riavvio del server, e salva i processi attualmente in esecuzione:

sudo pm2 startup systemd
sudo pm2 save
bash
Cloud Backup powered by Acronis
Riduci i tempi di inattività e proteggi i carichi di lavoro
  • Backup automatici e recupero dei dati
  • Pianificazione e gestione intuitive delle attività
  • Protezione dalle minacce basata sull'intelligenza artificiale

Configurazione di Apache

Per accedere allo script Node.js dal web, installa i moduli Apache proxy e proxy_http con i comandi:

sudo a2enmod proxy
sudo a2enmod proxy_http
bash

Dopo aver completato l’installazione, riavvia Apache per applicare le modifiche:

sudo systemctl restart apache2
bash

Successivamente devi adattare le configurazioni proxy di Apache. Inserisci le seguenti istruzioni nel blocco di direttive VirtualHost, nel file di configurazione principale del server Apache.

Di solito trovi questo file di configurazione di Apache nel percorso /etc/apache2/sites-available/example.com.conf su Ubuntu.

N.B.

Il percorso e il nome del file di configurazione di Apache per un sito web possono variare.

Modifica questo file con un editor a tua scelta, ad esempio con il comando:

sudo nano /etc/apache2/sites-available/example.com.conf
bash

Scorri il file finché non trovi il blocco di direttive VirtualHost, che si presenterà così:

<VirtualHost *:80>
ServerName example.com
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>

Aggiungi quanto segue al blocco di direttive VirtualHost:

ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>

Assicurati che queste righe siano posizionate al di fuori dei blocchi delle direttive delle directory. Per esempio:

<VirtualHost *:80>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /nodejs>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>

Salva e chiudi il file e poi riavvia Apache, in modo che le modifiche diventino effettive:

sudo systemctl restart apache2
bash

Dopo il riavvio di Apache, puoi testare l’applicazione visualizzandola in un browser. A questo punto dovresti vedere il seguente messaggio dal file di test creato in precedenza:

Hello World! Node.js is working correctly.
Vai al menu principale