Comment mettre en production une application Nodejs sur VPS-Cpanel

Comment mettre en production une application Nodejs sur VPS-Cpanel

j'ai récemment travailler sur la configuration d'un VPS utilisant Cpanel pour le déploiement d'une application NodeJs utilisant ExpressJs. et à ma grande surprise, ça m'a pris un temps fou et malgré toute la documentation disponible c’était pas vraiment évident. Après des longues heures de grattage de tête voici comme j'ai procédé.

Mise en production

Node.js est un moteur d'exécution JavaScript open source permettant de créer facilement des applications serveur et réseau. La plate-forme fonctionne sous Linux, OS X, FreeBSD et Windows. Les applications Node.js peuvent être exécutées en ligne de commande, mais nous nous concentrerons sur leur exécution en tant que service, afin qu'elles redémarrent automatiquement au redémarrage ou en cas d'échec, et puissent être utilisées en toute sécurité dans un environnement de production.

pour cela deux solutions sont envisageable :

  1. le reverse proxy
  2. la redirection de ports

Le Reverse Proxy

Un proxy inverse est un type de serveur, habituellement placé en frontal de serveurs web. Contrairement au serveur proxy qui permet à un utilisateur d'accéder au réseau Internet, le proxy inverse permet à un utilisateur d'Internet d'accéder à des serveurs internes.

le serveur interne dans notre cas est notre application Nodejs (elle n'est accessible que sur notre serveur pas depuis l’extérieur) le Proxy Inverse est le serveur apache 🤗

Cpanel et la configuration d'apache

Pour mettre en place notre proxy inverse, il faudrait toucher à la configuration apache (créer un virtual host). et cette configuration se situe à cette emplacement :

/etc/apache2/conf/httpd.conf

Sauf qu'avec l'utilisation du cpanel, les modifications directes apportées au fichier seront perdues lors de la régénération de ce fichier de configuration, ou une mise à jour d'Apache.

Écraser la configuration par défaut

Avec cpanel on peut écraser la configuration par défaut pour :

  • Un hôte virtuel individuel
  • Tous les hôtes virtuels sur le système
  • Tous les hôtes virtuels que possède un utilisateur

Exemple : Créer ou modifier un fichier à cet emplacement precis

user => votre username cpanel domain => le domaine pour la configuration 2_4 => la version d'apache includename.conf => votre configuration (vous pouvez nommer le fichier comme vous voulez)

/etc/apache2/conf.d/userdata/ssl/2_4/user/domain/includename.conf
/etc/apache2/conf.d/userdata/std/2_4/user/domain/includename.conf

👉🏽 pour les autres configurations voici le tableau complet

après avoir créer votre fichier, vous pouvez ajouter les lignes suivantes :

<Proxy "*">
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass / http://localhost:3000
ProxyPassReverse / http://localhost:3000

note ! : vous pouvez remplacer le port 3000 par celui que vous utiliser.

Erreur 502 Bad Gateway ! 😱😱😱

Il possible que vous tombiez sur cette erreur après la configuration du proxy, je m'investie encore pour comprendre la cause de cette erreur 🤦🏽‍♂️🤦🏽‍♂️🤦🏽‍♂️. sinon je vous propose une deuxième solution 😉 😊

Redirection de Port

Si la méthode avec le proxy pose problème, vous pouvez utiliser cette méthode, elle consiste tout simplement à rediriger toutes les requêtes (HTTP port 80, HTTPS port 443) au port de votre application nodejs, ce qui implique que votre application doit être accessible depuis l’extérieur.

cette fois, pas besoin de modifier la configuration globale, on peut tout simplement passer par un fichier .htaccess

DirectoryIndex disabled
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:3000/ [P,L]
RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]

simple non ? ceci dit pour des raisons de sécurités, je vous conseillerais de ne pas mettre votre application nodejs dans un dossier accessible depuis le web grace à apache.

cpanel crée par défaut un dossier /home/user/public_html placez le fichier .htaccess à cet emplacement et votre application nodejs un cran au dessus par exemple :

  • nodejs app : /home/user/my-node-app
  • htaccess : /home/user/public_html/.htaccess

Gérer l'application en production

pour demarrer l'application en locale vous utilisez surement :

$ npm run start

en production je vous conseillerais d'utiliser un outil adapter comme PM2.

PM2 list

PM2 est un gestionnaire de processus de production pour les applications Node.js avec un équilibreur de charge intégré. Il vous permet de maintenir les applications en vie pour toujours, de les recharger sans interruption et de faciliter les tâches courantes d'administration du système.

pm2 monit

👉🏽 pour plus d'infos voir la Documentation