NodeJS Et Express En Proxy Apache Sur VPS – Guide Complet

Cet article part du principe que l’installation détaillée dans : Installation d’un VPS Multisite WordPress a été réalisée. Du moins jusqu’à l’installation d’Apache.

Ainsi les pré-requis sont :

  1. Disposer d’un serveur VPS : Comment obtenir un serveur VPS.
  2. Configuration et sécurisation du serveur VPS.
  3. Installer Apache sur son VPS.

L’objectif est de pouvoir, en parallèle d’une installation multisite WordPress, installer NodeJS pour déployer une application, quelle qu’elle soit, sur notre serveur VPS.

Cet article fait appel à plusieurs documentations externes, notamment pour tout ce qui concerne l’installation basique d’Express et la mise en route d’un simple serveur.

Pour en savoir plus : A propos de NodeJS

Installer NodeJS sur un serveur VPS

L’installation de NodeJS sur un serveur VPS se fait via le Package Manager une fois connecté via SSH.

  1. Se connecter au serveur VPS via SSH.
  2. Accéder à l’utilisateur « Super User » via la commande « su ».
  3. Mettre à jour la liste des package.
  4. Lancer la commande d’installation de NodeJS. On installera également en même temps le gestionnaire de package NPM.
su
apt-get update
apt-get install nodejs npm

Lancer un serveur Express (NodeJS) sur un serveur VPS

Une fois NodeJS et NPM installés, nous allons pouvoir créer une application NodeJS simple avec un serveur Express en Localhost.

En savoir plus sur ExpressJS.

La création d’une nouvelle application avec installation d’Express est suffisament documentée sur le site d’Express.

  1. Créer un nouveau répertoire pour l’application NodeJS et se placer dans ce répertoire.
  2. Lancer l’initialisation du projet NodeJS avec NPM.
  3. Installer Express avec NPM.
mkdir test-vps
cd test-vps
npm init
npm install express

Et nous allons directement utiliser le code « Hello World » fourni par Express sur cette page.

  1. Créer un fichier « app.js ».
  2. Ajouter le code « Hello World » d’Express.
nano app.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})

Une fois ces étapes effectuées, nous pouvons lancer notre serveur basique via la commande :

node app.js

et théoriquement y accéder sur le localhost du VPS (port 3000) via la commande :

curl localhost:3000

Mais le serveur Express (et notre application NodeJS) est pour l’instant uniquement accessible en local sur le VPS.

Les étapes suivantes vont nous permettre de lancer indépendemment, et automatiquement au démarrage de notre VPS, notre application NodeJS.

Automatisation du démarrage de l’application NodeJS avec PM2

PM2 est un gestionnaire de processus pour NodeJS que nous utiliserons pour faciliter le démarrage de notre application NodeJS.

Nous allons donc commencer par terminer notre application NodeJS précedemment lancée et installer PM2 via NPM avec la commande :

npm install -g pm2

Pour lancer notre application NodeJS, et l’ajouter à la liste de nos processus dans PM2, on lance ensuite la commande :

pm2 start /chemin_vers_notre_application_nodejs/test-vps/app.js

PM2 va désormais se charger de gérer automatiquement notre serveur Express. Ce dernier est désormais à nouveau lancé et accessible sur localhost:3000

Pour finir, en cas de redémarrage de notre VPS, il serait intéressant que notre application NodeJS soit relancée automatiquement – pour ce faire, il suffit d’ajouter PM2 à la liste des services qui s’executent au démarrage d’Ubuntu, et PM2 se chargera par lui-même de lancer l’ensemble des processus qui lui sont attribués.

pm2 startup systemd

Notre application NodeJS est maintenant accessible et automatiquement démarrée via PM2. Pour finir, nous allons maintenant utiliser le proxy Apache pour rendre notre application accessible depuis Internet.

Configuration du Proxy Apache pour rendre l’application NodeJS accessible depuis Internet

Avant toute chose nous allons activer deux modules Apache et le redémarrer :

a2enmod proxy 
a2enmod proxy_http 
service apache2 restart

Ces deux modules vont permettre l’activation de la passerelle pour les requêtes HTTP(S) reçues et de permettre la redirection que nous allons effectuer dans les étapes suivantes.

Nous allons maintenant configurer le Virtual Host pour effectuer la redirection et l’activer. Pour ce faire, nous allons créer notre fichier conf :

nano /etc/apache2/sites-available/node.guillaumelemoine.eu.conf

Dans lequel nous allons ajouter les lignes suivantes en veillant à remplacer les termes en gras (votre nom de domaine et/ou sous-domaine qui permettra d’accéder à l’application via internet – il faudra également prendre soin de rediriger ce domaine/sous-domaine vers le serveur VPS voir ici pour la création et redirection de sous-domaines) :

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName guillaumelemoine.eu
ServerAlias node.guillaumelemoine.eu
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Nous allons ensuite activer notre fichier conf Apache et redémarrer le serveur Apache.

a2ensite node.guillaumelemoine.eu
service apache2 restart

Notre Application NodeJS/Express « Hello World » est désormais accessible par Internet :

Ces étapes pourront ainsi être appliquées pour tout type d’application NodeJS gérées par votre serveur VPS.