# Configurare un’app Node.js con Apache su Ubuntu 24.04

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](https://www.ionos.it/digitalguide/server/know-how/il-concetto-di-open-source/) [Node.js](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/introduzione-a-nodejs/) 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](https://pm2.keymetrics.io/ "Sito 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](https://www.ionos.it/digitalguide/server/know-how/ubuntu-il-sistema-linux-per-tutti/) 24.04).
- Un **nome di dominio** funzionante che punta al server.
- Un [server web Apache](https://www.ionos.it/digitalguide/server/configurazione/come-configurare-il-web-server-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:

```bash
sudo apt update
sudo apt install curl -y
```

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:

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

Installa quindi Node.js:

```bash
sudo apt install -y nodejs
```

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.

```bash
sudo apt install -y build-essential
```

## 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:

```bash
sudo mkdir /var/www/html/nodejs
```

Crea il file hello.js in questa directory:

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

Poi inserisci nella pagina il seguente contenuto di esempio:

```javascript
#!/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/');
```

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

```bash
sudo chmod 755 hello.js
```

## 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:

```bash
sudo ufw allow 8080/tcp
```

Questo passaggio è particolarmente importante se desideri accedere al tuo server direttamente tramite [indirizzo IP](https://www.ionos.it/digitalguide/server/know-how/cose-un-indirizzo-di-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](https://www.ionos.it/digitalguide/server/know-how/che-cose-un-proxy/) inoltra il traffico.

## Installazione di PM2

Usa `npm` per installare PM2 con il seguente comando:

```bash
sudo npm install -g pm2
```

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

```bash
sudo pm2 start hello.js
```

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:

```bash
sudo pm2 startup systemd
sudo pm2 save
```

## Configurazione di Apache

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

```bash
sudo a2enmod proxy
sudo a2enmod proxy_http
```

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

```bash
sudo systemctl restart apache2
```

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:

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

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

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

Aggiungi quanto segue al blocco di direttive VirtualHost:

```none
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:

```none
<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](https://www.ionos.it/digitalguide/server/configurazione/riavvio-di-apache/), in modo che le modifiche diventino effettive:

```bash
sudo systemctl restart apache2
```

Dopo il riavvio di Apache, puoi testare l’applicazione visualizzandola in un [browser](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cosa-sono-i-browser/). A questo punto dovresti vedere il seguente messaggio dal file di test creato in precedenza:

```none
Hello World! Node.js is working correctly.
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/nodejs-per-un-sito-web-con-apache-su-ubuntu/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/nodejs-per-un-sito-web-con-apache-su-ubuntu/) for AI/LLM consumption.