Procédure
Qu'est-ce que Node.js ?
Node.js est un environnement d'exécution open-source et multiplateforme vous permettant de créer un site web ou une application et de l'héberger sur un serveur, avec le langage JavaScript. Sur nos formules cPanel L, cPanel XL, cPanel 2XL, cPanel 3XL et CloudCP, nous vous mettons à disposition le gestionnaire d'application Node.js vous permettant de mettre en place une application Node.js sur votre formule d'hébergement web cPanel. Vous avez à disposition de la version 6 jusqu'à la version 24 de Node.js.
Qu'est-ce que Phusion Passenger ?
Pour mettre à disposition à nos clients un environnement stable et robuste pour Node.js, nous intégrons vos applications Node.js avec le serveur web Apache grâce à l'outil Phusion Passenger.
Nous ne mettons pas en place un reverse proxy, et les applications Node.js ne peuvent pas s'exécuter en standalone avec son propre serveur web. Si vous avez l'habitude d'exécuter votre serveur Node.js avec une commande tel que node server, npm run start ou pm2 start myapp, vous ne serez pas en mesure de faire cela sur nos formules d'hébergement cPanel. Si vous utilisez un framework, renseignez-vous de sa compatibilité avec Phusion Passenger.
L'exécution de votre application Node.js sera géré par Phusion Passenger, il se chargera d'exécuter votre fichier .js avec la bonne version de node, et il capturera l'appel à la fonction listen() de http.Server pour configurer lui-même la connexion entre votre application et le serveur web Apache.
Comment installer une application Node.js ?
Connectez-vous à votre interface de gestion cPanel et cliquez sur l'icône "Setup Node.js App".

Dans la page qui s'ensuit, cliquer sur le bouton "Create Application" pour ajouter une nouvelle application.

Remplissez ensuite les champs conformément aux besoins de votre application :
- Node.js version : la version de Node.js que votre application requiert.
- Application mode : permet de définir le mode d'exécution de votre application, soit en mode développeur, soit en mode production. Cela manipule la variable d'environnement NODE_ENV et permet ainsi, en mode développeur, d'afficher les erreurs (ce qui est utile pour des fins de débogage, mais peut également être problématique pour une application en production).
- Application root : l'emplacement de votre application Node.js, par rapport à votre racine FTP. Nous vous recommandons de ne pas mettre votre application Node.js dans le dossier public_html.
- Application URL : l'URL racine de votre application Node.js.
- Application startup file : le nom du fichier .js que Passenger communiquera à Node.js pour démarrer votre application.

Cliquez ensuite sur le bouton "Create" une fois que votre application a été paramétrée.
Si votre application startup file n'existe pas encore, l'outil va créer immédiatement ce fichier avec un contenu à titre d'exemple. Cet exemple affichera « It works! » sur toutes les requêtes HTTP associés à celui-ci.
Voici le contenu de ce script d'exemple :
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
var message = 'It works!\n',
version = 'NodeJS ' + process.versions.node + '\n',
response = [message, version].join('\n');
res.end(response);
});
server.listen();
Vous pouvez également éditer le fichier package.json depuis l'interface pour ajouter des dépendances et installer ces dépendances avec le bouton « Run NPM Install » :

Notez qu'il faut redémarrer votre application si ses dépendances ont été modifiées.
Vous pouvez également définir des variables d'environnement dans la section Environment variables si votre application repose sur ces derniers pour obtenir certains paramètres.
Accéder à votre application depuis le terminal
L'utilisation du terminal en ligne de commande est partie intégrante de l'écosystème Node.js. Pour accéder à l'environnement de votre application depuis le terminal, connectez-vous à celui-ci (depuis le terminal web cPanel ou depuis un client SSH) et copiez la commande indiquée pour entrer dans l'environnement de votre application :

Cette action activera automatiquement le bon environnement virtuel pour votre application, incluant ainsi la bonne version de Node.js et NPM, ainsi que les dépendances installées dans l'environnement (au lieu d'être installé dans le dossier « node_modules » de votre dossier d'applications).
Déboguer une application Node.js
Pour déboguer une application Node.js, vous pouvez consulter le log d'erreur Apache. Le fichier log d'erreurs Apache contient :
- La sortie STDOUT et STDERR de l'application Node.js
- Les erreurs liées à Passenger
- Les erreurs liées à Apache
Si vous avez défini manuellement la valeur PassengerLogFile dans le fichier .htaccess de votre site, la sortie STDOUT et STDERR ainsi que les erreurs liées à Passenger sont envoyés dans ce fichier au lieu du fichier log Apache.
Vous pouvez aussi mettre la valeur PassengerFriendlyErrorPages sur on dans votre fichier .htaccess pour afficher directement sur le navigateur web les erreurs liés au démarrage de votre application Node.js.
Erreurs courantes sur Node.js
Processus arrêté lors de l'exécution de npm install
Raisons possibles : Votre processus peut être arrêté par le serveur si celui-ci s'exécute au-delà du temps d'exécution et/ou quantité de ressource (CPU, RAM ...) autorisé sur votre formule d'hébergement. Vous pouvez consulter l'historique d'arrêt de processus depuis notre outil « Journaux » disponible depuis votre interface cPanel.
Solution : Vous pouvez limiter la mémoire RAM utilisée par npm avec la variable d'environnement NODE_OPTIONS comme suit :
NODE_OPTIONS='--max-old-space-size=2048' npm install
Cet exemple montre, par exemple, une limitation à 2048 Mio (2 Gio).
Specified directory already used by /home/$USER/public_html/monapp lors de la création depuis Setup Node.js App
Raisons possibles :
- Une application Node.js, Python ou Ruby publiée sur le dossier indiqué existe déjà.
- L'application root et l'application URL spécifié pointe sur le même dossier.
Solutions :
- Vérifiez qu'aucune application Node.js, Python ou Ruby n'est publiée sur le dossier indiqué. Vous pouvez consulter le fichier .htaccess du dossier en question depuis le gestionnaire de fichiers ou votre client FTP habituel pour identifier rapidement cela.
- Assurez-vous que les fichiers de votre application (les fichiers .js, package.json ...) indiqué par application root ne se trouvent pas dans le dossier de publication indiqué par application URL. Contrairement aux applications PHP, les fichiers d'une application Node.js n'a pas besoin et ne devrait pas se trouver dans public_html.