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 Node.js 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 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 24.04)
- Un nom de domaine fonctionnel pointant vers le serveur
- Un serveur Web Apache 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 :
sudo apt update
sudo apt install curl -ybashTé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 :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -bashInstallez ensuite Node.js :
sudo apt install -y nodejsbashCela 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.
sudo apt install -y build-essentialbashExemple 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 :
sudo mkdir /var/www/html/nodejsbashCréez le fichier hello.js dans ce répertoire :
sudo nano /var/www/html/nodejs/hello.jsbashEnsuite, insérez le contenu d’exemple suivant dans le fichier :
#!/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/’);javascriptEnregistrez et quittez le fichier, puis rendez-le exécutable avec la commande suivante :
sudo chmod 755 hello.jsbashVé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 :
sudo ufw allow 8080/tcpbashCette étape est particulièrement importante si vous souhaitez accéder à votre serveur directement via l’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 redirige le trafic.
Installation de PM2
Utilisez npm pour installer PM2 avec la commande suivante :
sudo npm install -g pm2bashDémarrez le script d’exemple hello.js que vous venez de créer avec la commande :
sudo pm2 start hello.jsbashExé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 :
sudo pm2 startup systemd
sudo pm2 savebash
Configuration d’Apache
Pour accéder à l’application Node.js depuis le Web, installez les modules Apache proxy et proxy_http avec les commandes :
sudo a2enmod proxy
sudo a2enmod proxy_httpbashAprès avoir terminé l’installation, redémarrez Apache pour que les modifications prennent effet :
sudo systemctl restart apache2bashEnsuite, 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.
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 :
sudo nano /etc/apache2/sites-available/example.com.confbashFaites défiler le fichier jusqu’à ce que vous trouviez le bloc de commandes VirtualHost, qui ressemblera à ceci :
<VirtualHost *:80>
ServerName example.com
<Directory "/var/www/example.com/html">
AllowOverride All
</Directory>
</VirtualHost>Ajoutez ce qui suit au bloc de commandes 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>Assurez-vous que ces lignes sont placées en dehors des blocs de commande Directory. Par exemple :
<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, pour que les modifications prennent effet :
sudo systemctl restart apache2bashAprès le redémarrage d’Apache, vous pouvez tester l’application en l’ouvrant dans un navigateur. Vous devriez voir le message suivant à partir du fichier de test créé précédemment :
Hello World! Node.js is working correctly.
