Mise en production
Introduction
Ce chapitre est dédié aux outils aidant à l’utilisation de Node en environnement de production, c’est-à-dire avec de nouvelles contraintes (par exemple, avoir un processus lancé en permanence, superviser des applications ou encore lancer Node au démarrage des machines, utiliser un proxy inverse, etc.). Le but ici est de vous fournir des exemples concrets de solutions ; bien entendu, il en existe des centaines ! Comme vous le verrez au début de cette partie, Node peut être épaulé par des compagnons pour s’assurer qu’il tourne en permanence. Vous découvrirez aussi comment il s’intègre au sein de serveurs web existants, et enfin les possibilités de déploiement automatisé.
Forever
Forever est un outil en ligne de commande permettant de faire fonctionner un processus Node de manière continue (c’est-à-dire « pour toujours », d’où le nom forever en anglais).
L’installation est on ne peut plus simple :
$ npm install forever -g
Voici quelques cas d’utilisation courants.
Le premier consiste à démarrer une application Node « pour toujours ». Dans le cas où le processus s’arrêterait (pour cause d’erreur ou autre), Forever le relancera automatiquement. L’instruction est la suivante :
$ forever start index.js
On peut maintenant voir l’état du processus grâce à la commande suivante :
$ forever list
info: Forever processes running
data: uid command script forever pid logfile
uptime
data: [0] 2kNS /usr/local/bin/node index.js 24769 24787
/home/me/.forever/2kNS.log 0:0:0:5.49
Si plusieurs scripts sont lancés, la sortie de la commande forever list comporte logiquement plusieurs lignes.
Pour interagir avec un script lancé, on utilise soit son identifiant numérique soit son uid. Par exemple, pour redémarrer le script donné dans l’exemple précédemment :
$ forever restart 0
0 correspond...
Supervision
Superviser une nouvelle infrastructure Node est capital. Que ce soit pour vérifier les performances ou s’assurer que tout va bien. Node s’intégrant facilement dans une architecture existante, il n’est pas complexe à superviser. Des solutions comme Nagios et NPRE peuvent facilement donner beaucoup d’informations.
Cette partie s’adresse principalement aux devops connaissant un minimum Nagios. Cependant, les concepts restent identiques quels que soitent les outils, lorsqu’il s’agit de s’assurer que le processus Node tourne en permanence.
Le cas le plus courant est de s’assurer que les processus Node sont bien lancés. Voici un court exemple de configuration du service depuis un serveur Nagios :
define service {
hostgroup_name nodejs-nrpe-servers
service_description Node process
check_command check_nrpe!check_node_procs
use generic-service
notification_interval 0 ;
}
Ici, le serveur Nagios interroge tous les hôtes distants...
Recettes
1. Reverse proxy
Le proxy inverse (reverse proxy) est un concept simple et fort utile. Au lieu qu’un client fasse une requête directement sur l’application Node, il existe un intermédiaire entre les deux. Cette façon de faire est courante parce que très puissante. En effet, l’utilisation d’un proxy inverse ouvre de nombreuses possibilités.
Tout d’abord, on peut intégrer des applications Node dans l’infrastructure existante (si l’on a déjà des serveurs web « classiques », comme Apache/Nginx ou autre). Ensuite, cela rend possible l’utilisation de cache au niveau de ce proxy afin d’accélérer les traitements et de réduire la charge. De surcroît, les proxies inverses peuvent être placés à différents endroits, afin de délivrer du contenu au plus près des clients par exemple, ou encore d’avoir de la répartition de charge. Enfin, cela permet aussi d’avoir autant d’applications Node que l’on souhaite sur la même machine (sur différents ports) et d’avoir un seul point unique pour les consulter : le serveur web qui écoute sur les ports 80 et 443.
Les exemples qui suivent partent du principe que l’on a un domaine mondomaine.tld et que l’application Node, un site web dynamique écoutant sur le port 9000, doit être accessible depuis ce nom de domaine.
a. Avec Apache
Tout d’abord, on vérifie que les modules mod_proxy et mod_proxy_http sont bien activés dans l’installation.
Puis on ajoute les entrées ProxyPreserveHost, ProxyPass et ProxyPassReverse dans la configuration de VirtualHost comme dans l’exemple suivant :
<VirtualHost *:80>
ServerAdmin monemail@mondomaine.tld
ServerName mondomaine.tld
# Demande à Apache de conserver l'en-tête HTTP Host intact.
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
# Associe le chemin courant (/) au proxy HTTP...