Node.js è un ambiente di runtime Ja­va­Script che ti permette di creare fa­cil­men­te ap­pli­ca­zio­ni lato server. Con il gestore di processi PM2 puoi con­fi­gu­ra­re 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 Ja­va­Script open source Node.js possano essere eseguiti dalla riga di comando di­ret­ta­men­te dallo schermo, eseguirli come servizio tramite il gestore di processi PM2 offre agli script un com­por­ta­men­to più robusto. Se gli script vengono eseguiti in questo modo come servizio, si riavviano au­to­ma­ti­ca­men­te quando il server viene riavviato o lo script va in crash.

PM2 è un gestore di processi per Node.js con un’ampia gamma di fun­zio­na­li­tà che ti per­met­to­no di con­trol­la­re e gestire i tuoi script Node.js. Visita il sito ufficiale di PM2 per ulteriori in­for­ma­zio­ni sull’uso di PM2.

Requisiti

Prima di iniziare con i passaggi suc­ces­si­vi per l’in­stal­la­zio­ne di Node.js con Apache e PM2, as­si­cu­ra­ti che siano sod­di­sfat­ti i seguenti requisiti:

  • Un server Linux (Ubuntu 24.04).
  • Un nome di dominio fun­zio­nan­te che punta al server.
  • Un server web Apache fun­zio­nan­te e operativo

In­stal­la­zio­ne di Node.js

Per in­stal­la­re 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 ag­giun­gi­lo alla cache dei pacchetti del server. L’archivio contiene una versione di Node.js più ag­gior­na­ta rispetto ai re­po­si­to­ry 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à in­stal­la­to au­to­ma­ti­ca­men­te anche npm.

Infine, installa il pacchetto build-essential per npm. build-essential installa strumenti di sviluppo es­sen­zia­li come il com­pi­la­to­re e Make, necessari affinché Node.js possa compilare ed eseguire cor­ret­ta­men­te i moduli npm con esten­sio­ni native.

sudo apt install -y build-essential
bash

Creare un’ap­pli­ca­zio­ne 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 ap­pli­ca­zio­ni 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/');
ja­va­script

Salva e chiudi il file, quindi rendilo ese­gui­bi­le con il seguente comando:

sudo chmod 755 hello.js
bash

Verifica del firewall

Ubuntu 24.04 in alcuni casi attiva per im­po­sta­zio­ne pre­de­fi­ni­ta il firewall ufw. Per poter testare subito la tua ap­pli­ca­zio­ne Node.js, devi as­si­cu­rar­ti che la porta 8080 sia aperta:

sudo ufw allow 8080/tcp
bash

Questo passaggio è par­ti­co­lar­men­te im­por­tan­te se desideri accedere al tuo server di­ret­ta­men­te tramite indirizzo IP oppure con un browser al di fuori del server. Se Node.js viene reso di­spo­ni­bi­le esclu­si­va­men­te tramite Apache e il proxy, questo passaggio è fa­col­ta­ti­vo, perché il proxy inoltra il traffico.

In­stal­la­zio­ne di PM2

Usa npm per in­stal­la­re 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 au­to­ma­ti­ca­men­te al riavvio del server, e salva i processi at­tual­men­te in ese­cu­zio­ne:

sudo pm2 startup systemd
sudo pm2 save
bash
Cloud Backup powered by Acronis
Riduci i tempi di inat­ti­vi­tà e proteggi i carichi di lavoro
  • Backup au­to­ma­ti­ci e recupero dei dati
  • Pia­ni­fi­ca­zio­ne e gestione intuitive delle attività
  • Pro­te­zio­ne dalle minacce basata sul­l'in­tel­li­gen­za ar­ti­fi­cia­le

Con­fi­gu­ra­zio­ne 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 com­ple­ta­to l’in­stal­la­zio­ne, riavvia Apache per applicare le modifiche:

sudo systemctl restart apache2
bash

Suc­ces­si­va­men­te devi adattare le con­fi­gu­ra­zio­ni proxy di Apache. Inserisci le seguenti istru­zio­ni nel blocco di direttive Vir­tua­lHo­st, nel file di con­fi­gu­ra­zio­ne prin­ci­pa­le del server Apache.

Di solito trovi questo file di con­fi­gu­ra­zio­ne di Apache nel percorso /etc/apache2/sites-available/example.com.conf su Ubuntu.

N.B.

Il percorso e il nome del file di con­fi­gu­ra­zio­ne 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 Vir­tua­lHo­st, che si pre­sen­te­rà così:

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

Aggiungi quanto segue al blocco di direttive Vir­tua­lHo­st:

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>

As­si­cu­ra­ti che queste righe siano po­si­zio­na­te 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’ap­pli­ca­zio­ne vi­sua­liz­zan­do­la in un browser. A questo punto dovresti vedere il seguente messaggio dal file di test creato in pre­ce­den­za:

Hello World! Node.js is working correctly.
Vai al menu prin­ci­pa­le