Node.js est un en­vi­ron­ne­ment d’exécution Ja­vaS­cript qui vous permet de créer fa­ci­le­ment des ap­pli­ca­tions côté serveur. Avec le ges­tion­naire de processus PM2, vous pouvez con­fi­gu­rer une ap­pli­ca­tion 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’en­vi­ron­ne­ment d’exécution Ja­vaS­cript open source Node.js puissent être lancés di­rec­te­ment depuis la ligne de commande, leur exécution sous forme de service avec le ges­tion­naire de processus PM2 se révèle plus robuste. Con­fi­gu­rés comme service, les scripts re­dé­mar­rent au­to­ma­ti­que­ment en cas de re­dé­mar­rage du serveur ou de plantage de l’ap­pli­ca­tion, ce qui est par­ti­cu­liè­re­ment utile lorsque vous exécutez Node.js avec Apache sur Ubuntu pour héberger des sites Web en pro­duc­tion.

PM2 est un ges­tion­naire de processus pour Node.js avec une variété de fonc­tion­na­li­tés per­met­tant de contrôler et de gérer les scripts Node.js. Rendez-vous sur le site officiel de PM2 pour plus d’in­for­ma­tions sur son uti­li­sa­tion.

Exigences préa­lables avant le dé­ploie­ment

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 fonc­tion­nel pointant vers le serveur
  • Un serveur Web Apache fonc­tion­nel et opé­ra­tion­nel

Ins­tal­la­tion 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 -y
bash

Té­lé­char­gez l’archive de packages per­son­nelle (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 -
bash

Installez ensuite Node.js :

sudo apt install -y nodejs
bash

Cela ins­tal­lera également npm au­to­ma­ti­que­ment.

Enfin, installez le paquet build-essential pour npm. build-essential installe des outils de dé­ve­lop­pe­ment es­sen­tiels comme des com­pi­la­teurs et Make, né­ces­saires pour que Node.js puisse compiler et exécuter les modules npm avec des ex­ten­sions natives.

sudo apt install -y build-essential
bash

Exemple d’ap­pli­ca­tion Node.js

Pour cet exemple, nous com­men­çons par créer un ré­per­toire séparé dans la racine de votre site Web afin d’héberger les ap­pli­ca­tions Node.js :

sudo mkdir /var/www/html/nodejs
bash

Créez le fichier hello.js dans ce ré­per­toire :

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

Ensuite, 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/’);
ja­vas­cript

En­re­gis­trez et quittez le fichier, puis rendez-le exé­cu­table avec la commande suivante :

sudo chmod 755 hello.js
bash

Vé­ri­fi­ca­tion du pare-feu

Ubuntu 24.04 active par défaut le pare-feu UFW. Pour pouvoir tester di­rec­te­ment votre ap­pli­ca­tion Node.js, assurez-vous que le port 8080 est ouvert :

sudo ufw allow 8080/tcp
bash

Cette étape est par­ti­cu­liè­re­ment im­por­tante si vous souhaitez accéder à votre serveur di­rec­te­ment via l’adresse IP ou un na­vi­ga­teur en dehors du serveur. Si Node.js est uni­que­ment ac­ces­sible via Apache et le proxy, cette étape est fa­cul­ta­tive car le proxy redirige le trafic.

Ins­tal­la­tion de PM2

Utilisez npm pour installer PM2 avec la commande suivante :

sudo npm install -g pm2
bash

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

sudo pm2 start hello.js
bash

Exécutez ensuite la commande suivante en tant que root pour ajouter PM2 aux scripts de démarrage, puis en­re­gis­trez les processus ac­tuel­le­ment en cours d’exécution :

sudo pm2 startup systemd
sudo pm2 save
bash

Con­fi­gu­ra­tion d’Apache

Pour accéder à l’ap­pli­ca­tion Node.js depuis le Web, installez les modules Apache proxy et proxy_http avec les commandes :

sudo a2enmod proxy
sudo a2enmod proxy_http
bash

Après avoir terminé l’ins­tal­la­tion, re­dé­mar­rez Apache pour que les mo­di­fi­ca­tions prennent effet :

sudo systemctl restart apache2
bash

Ensuite, ajustez les con­fi­gu­ra­tions de proxy Apache. Insérez les ins­truc­tions suivantes dans le bloc de commandes Vir­tual­Host du fichier de con­fi­gu­ra­tion principal du serveur Apache.

Ce fichier de con­fi­gu­ra­tion Apache se trouve gé­né­ra­le­ment dans le chemin d’accès /etc/apache2/sites-available/example.com.conf sur Ubuntu.

Note

L’em­pla­ce­ment et le nom du fichier de con­fi­gu­ra­tion 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.conf
bash

Faites défiler le fichier jusqu’à ce que vous trouviez le bloc de commandes Vir­tual­Host, qui res­sem­blera à ceci :

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

Ajoutez ce qui suit au bloc de commandes Vir­tual­Host :

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>

En­re­gis­trez et fermez le fichier, puis re­dé­mar­rez Apache, pour que les mo­di­fi­ca­tions prennent effet :

sudo systemctl restart apache2
bash

Après le re­dé­mar­rage d’Apache, vous pouvez tester l’ap­pli­ca­tion en l’ouvrant dans un na­vi­ga­teur. Vous devriez voir le message suivant à partir du fichier de test créé pré­cé­dem­ment :

Hello World! Node.js is working correctly.
Aller au menu principal