# Configurer une application Node.js avec Apache sur Ubuntu 24.04

Node.js est un environnement d’exécution JavaScript qui vous permet de créer facilement des applications côté serveur. Avec le gestionnaire de processus PM2, vous pouvez configurer une application Node.js exécutée en tant que service sous Ubuntu 24.04.

## Exécution des scripts Node.js en tant que service

Bien que les scripts de l’environnement d’exécution JavaScript [open source](https://www.ionos.fr/digitalguide/serveur/know-how/quest-ce-que-lopen-source/) [Node.js](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/introduction-a-nodejs/) puissent être lancés directement depuis la ligne de commande, leur exécution sous forme de service avec le gestionnaire de processus PM2 se révèle **plus robuste**. Configurés comme service, les scripts redémarrent automatiquement en cas de redémarrage du serveur ou de plantage de l’application, ce qui est particulièrement utile lorsque vous exécutez Node.js avec Apache sur Ubuntu pour héberger des sites Web en production.

PM2 est un **gestionnaire de processus** pour Node.js avec une variété de fonctionnalités permettant de contrôler et de gérer les scripts Node.js. Rendez-vous sur le site officiel de [PM2](https://pm2.keymetrics.io/ "PM2 - Home") pour plus d’informations sur son utilisation.

## Exigences préalables avant le déploiement

Avant de commencer les étapes décrites ci-dessous pour installer Node.js avec Apache et PM2, assurez-vous que les exigences suivantes sont remplies :

- Un **serveur** sous Linux ([Ubuntu](https://www.ionos.fr/digitalguide/serveur/know-how/ubuntu-le-systeme-linux-pour-tous/) 24.04)
- Un **nom de domaine** fonctionnel pointant vers le serveur
- Un [serveur Web Apache](https://www.ionos.fr/digitalguide/serveur/configuration/installer-un-serveur-apache-nos-conseils/) fonctionnel et opérationnel

## Installation de Node.js étape par étape

Pour installer Node.js, vous aurez besoin de l’outil en ligne de commande `curl`. Mettez à jour les paquets de votre serveur et installez `curl` avec les commandes suivantes :

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

Téléchargez l’**archive de packages personnelle (PPA)** de Node.js et ajoutez le PPA au cache de paquets de votre serveur. L’archive contient une version de Node.js plus récente que celle des dépôts Ubuntu :

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

Installez ensuite Node.js :

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

Cela installera également `npm` automatiquement.

Enfin, installez le paquet `build-essential` pour npm. `build-essential` installe des outils de développement essentiels comme des compilateurs et Make, nécessaires pour que Node.js puisse **compiler et exécuter** les modules npm avec des extensions natives.

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

## Exemple d’application Node.js

Pour cet exemple, nous commençons par créer un **répertoire séparé** dans la racine de votre site Web afin d’héberger les applications Node.js :

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

Créez le fichier *hello.js* dans ce répertoire :

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

Ensuite, insérez le contenu d’exemple suivant dans le fichier :

```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/’);
```

Enregistrez et quittez le fichier, puis rendez-le **exécutable** avec la commande suivante :

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

## Vérification du pare-feu

Ubuntu 24.04 active par défaut le pare-feu UFW. Pour pouvoir tester directement votre application Node.js, assurez-vous que le **port 8080** est ouvert :

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

Cette étape est particulièrement importante si vous souhaitez accéder à votre serveur directement via l’[adresse IP](https://www.ionos.fr/digitalguide/serveur/know-how/quest-ce-quune-adresse-ip/) ou un navigateur en dehors du serveur. Si Node.js est uniquement accessible via Apache et le proxy, cette étape est facultative car le [proxy](https://www.ionos.fr/digitalguide/serveur/know-how/un-serveur-proxy-cest-quoi/) redirige le trafic.

## Installation de PM2

Utilisez `npm` pour installer PM2 avec la commande suivante :

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

Démarrez le script d’exemple `hello.js` que vous venez de créer avec la commande :

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

Exécutez ensuite la commande suivante en tant que root pour **ajouter PM2 aux scripts** de démarrage, puis enregistrez les processus actuellement en cours d’exécution :

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

## Configuration d’Apache

Pour accéder à l’application Node.js depuis le Web, installez les modules Apache `proxy` et `proxy_http` avec les commandes :

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

Après avoir terminé l’installation, redémarrez Apache pour que les modifications prennent effet :

```bash
sudo systemctl restart apache2
```

Ensuite, ajustez les **configurations de proxy Apache**. Insérez les instructions suivantes dans le bloc de commandes VirtualHost du fichier de configuration principal du serveur Apache.

Ce fichier de configuration Apache se trouve généralement dans le chemin d’accès `/etc/apache2/sites-available/example.com.conf` sur Ubuntu.

Note L’emplacement et le nom du fichier de configuration Apache d’un site peuvent varier.

Éditez ce fichier avec l’éditeur de votre choix, par exemple avec la commande :

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

Faites défiler le fichier jusqu’à ce que vous trouviez le bloc de commandes VirtualHost, qui ressemblera à ceci :

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

Ajoutez ce qui suit au bloc de commandes 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>
```

Assurez-vous que ces lignes sont placées **en dehors des blocs de commande Directory**. Par exemple :

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

Enregistrez et fermez le fichier, puis [redémarrez Apache](https://www.ionos.fr/digitalguide/serveur/configuration/redemarrage-dapache/), pour que les modifications prennent effet :

```bash
sudo systemctl restart apache2
```

Après le redémarrage d’Apache, vous pouvez tester l’application en l’ouvrant dans un [navigateur](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-quun-navigateur-web/). Vous devriez voir le message suivant à partir du fichier de test créé précédemment :

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


This is a markdown version of: [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/deployer-nodejs-avec-apache-sur-ubuntu/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/deployer-nodejs-avec-apache-sur-ubuntu/) for AI/LLM consumption.