Serveur Web avec Node.js et Apache, Automatisation avec PM2

Web

Serveur Web avec Node.js et Apache, Automatisation avec PM2
Post by Clément, le Friday 20 April 18

Mise en place d'un site web avec Node.js et Apache

Introduction :

Node.js est une plateforme de développement pour des applications réseaux et est très utilisé pour des sites web. Le développement d'application Node ce fait en JavaScript, sauf qu'au lieu d'être coté client cela est coté serveur.
Node.js permet de développer des programmes évènementiels, contrairement à la programmation séquentielle tel que le PHP par exemple, ce qui permet d'exécuter des tâches de manière asynchrone.

Je ne m'y connais pas beaucoup donc je ne peux expliquer de manière approfondie le fonctionnement, cet article permet d'expliquer comment installer une base de travail fonctionnelle et pratique.

Installation :

Installation sur un serveur debian 8 en super-utilisateur :

$ curl -sL https://deb.nodesource.com/setup_8.x | bash -
$ apt-get install -y nodejs build-essential

Durant cette installation, node.js a été installer ainsi que son gestionnaire de modules npm permettant d'installer et de partager du code et des programmes très simplement.

Pour vérifier que l'installation c'est correctement effectué, il suffit de taper les commandes suivantes :

$ node --version
v8.11.1
$ npm --version
5.6.0

Si les versions sont bien affichées alors les installations sont réussies.

Premier site :

Le site de base en Node.js sur le port 8080 car le port 80 est déjà utilisé :

const http = require('http');
const port = 8080;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World ! well
');
});

server.listen(port, () => {
  console.log(`Server running sur le port ${port}/`);
});

Ce programme ce situe dans le fichier app.js dans mon répertoire de sites web /var/www/. Et pour le lancer il suffit de taper la commande :

$ node app.js

Et il suffit ensuite de taper dans l'url du navigateur : http://<mon-ip>:8080.

Node.js avec Apache :

Si je veux que mon site web réalisé en Node.JS soit accessible sur le port 80 avec le sous-domaine nodejs, or j'ai déjà d'autres sites web de mis en place, donc il faut configurer un host avec un proxy qui redirige la connexion vers le serveur Node.js, de plus je souhaite utiliser des sockets pour ma communication clients serveur :

<VirtualHost *:80>
        ServerName tchat.boissard.info
        DocumentRoot /var/www/Tchat

        <Directory /var/www/Tchat>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        RewriteEngine On
        RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
        RewriteCond %{QUERY_STRING} transport=websocket    [NC]
        RewriteRule /(.*)           ws://127.0.0.1:20381/$1 [P,L]

        ProxyPass / http://127.0.0.1:20381/
        ProxyPassReverse / http://127.0.0.1:20381/
</VirtualHost>

Verifier que les modules apache proxy sont bien installés et démarrés :

$ a2enmod proxy
$ a2enmod proxy_http

Ceci me permet donc d'avoir mon site web développé avec Node.JS accessible sur le port 80 avec le nom de domaine nodejs.boissard.info et cela sans redirection d'URL.

Installation de l'outil PM2 :

Un problème se pose avec le développement d'application Node.js car il faut redémarrer le server à chaque modification mais il faut aussi démarrer le serveur lors de l'allumage.

Pour résoudre ce problème il y a le module PM2 qui est un gestionnaire de processus pour Node.js qui permet de redémarrer les applications Node après un plantages, un redémarrage et surtout après la modifications de fichiers.

Installation de PM2 :

Commençons donc par installer le module PM2 grâce au gestionnaire de modules npm de node puis vérifions sa bonne installation :

$ npm install pm2 -g
$ pm2 -V
2.10.2

Ajout d'un projet à PM2 :

Ensuite il faut démarrer pm2 pour notre application :

`$ pm2 start app.js --watch --name "my app"

L'option --watch permet de dire à pm2 de redémarrer en cas de modification.

Créer le script "startup" :

Puis il faut générer un script de démarrage pour le serveur, dans mon cas la plateforme est systemd :

$ pm2 startup systemd

Maintenant il faut ordonner à PM2 de sauvegarder tous les processus en cours afin qu'il puisse les mémoriser et les ressusciter après le redémarrage du serveur :

$ pm2 save

Vous pouvez redémarrer votre système pour tester le bon fonctionnement avec la commande reboot.

Quelques commandes pratiques :

  • Lister les applications NodeJS : pm2 list.
  • Afficher détails d'une app : pm2 show app.
  • Afficher les logs d'une app : pm2 logs app.
  • Pour démarrer une app : pm2 start app.
  • Pour arrêter une app : pm2 stop app.
  • Pour redémarrer une app : pm2 restart app.
  • Pour supprimer une app : pm2 delete app.
  • Pour créer le script d'initialisation : pm2 startup systemd.
  • Pour supprimer le script d'initialisation : pm2 unstartup systemd.
  • Pour mettre à jour PM2 : npm install pm2@latest -g ; pm2 update.

Conclusion :

Maintenant que tout est en place, il y a à disposition un serveur node.js pleinement fonctionnel qui se lance automatiquement et qui facile à développer car à chaque modification du code le serveur redémarre pour pouvoir tester.


Commenter