Comment installer Node.js sur Debian et configurer Nginx comme serveur proxy frontal

Node.js est une plateforme JavaScript gratuite et open-source qui peut être utilisée pour servir du contenu dynamique et réactif côté serveur. Elle est construite sur le moteur JavaScript V8 de Chrome et peut exécuter du code JavaScript en dehors d’un navigateur Web. Elle peut être exécutée sur plusieurs systèmes d’exploitation, notamment Linux, FreeBSD, Windows et macOS. Node.js fonctionne aussi sur d’autres serveurs Web comme Apache et Nginx.

Dans ce tutoriel, nous allons apprendre à installer et à configurer Node.js pour gérer les demandes du backend et à configurer Nginx pour gérer les demandes du front-end sur Debian 10.

Conditions préalables

  • Un serveur fonctionnant sous Debian 10.
  • Un mot de passe root est configuré sur ton serveur.

Pour commencer

Tout d’abord, il est recommandé de mettre à jour ton système à la dernière version. Tu peux le faire avec la commande suivante :

apt-get update -y
 apt-get upgrade -y

Une fois que ton serveur est mis à jour, redémarre-le pour appliquer les modifications.

Installe Node.js

Par défaut, la dernière version de Node.js n’est pas disponible dans le référentiel par défaut de Debian 10. Tu devras donc l’installer à partir du script.

Tout d’abord, installe curl avec la commande suivante :

apt-get install curl -y

Ensuite, télécharge et installe le script d’installation de Node.js avec la commande suivante :

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Une fois l’installation terminée, tu peux installer Node.js avec la commande suivante :

apt-get install nodejs -y

Une fois l’installation terminée avec succès, tu peux vérifier la version de Node.js avec la commande suivante :

nodejs --version

Tu devrais voir la version de Node.js dans la sortie suivante :

v12.16.1

Tu peux aussi vérifier la version de NPM en exécutant la commande suivante: :

npm --version

Tu devrais voir la version de NPM dans la sortie suivante :

6.13.4

Créer une application Node.js

Tout d’abord, tu dois créer un répertoire pour ton application. Tu peux le créer en exécutant la commande suivante :

mkdir nodeapp

Ensuite, change le répertoire en nodeapp et installe express avec la commande suivante :

cd nodeapp
 npm install express

Ensuite, crée un exemple d’application Node.js avec express en utilisant l’éditeur nano :

nano app.js

Ajoute le contenu suivant :

var express = require('express');
var app = express();
app.get('/', function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

Sauvegarde et ferme le fichier lorsque tu as terminé.

Ensuite, exécute ton application avec la commande suivante :

node app.js

Ensuite, ouvre un autre terminal et vérifie l’application avec la commande suivante :

netstat -antup | grep 8000

Tu devrais voir que ton application Node.js écoute sur le port 8000 :

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

Tu peux aussi vérifier l’application en utilisant la commande curl comme indiqué ci-dessous :

curl http://127.0.0.1:8000

Si tout va bien, tu devrais obtenir la sortie suivante :

Nginx as Frontend Server for Node.js!

Installer et configurer PM2

PM2 est un gestionnaire de processus pour gérer les applications Node.js. Tu peux facilement démarrer, arrêter et permettre à l’application Node.js de démarrer au démarrage en utilisant PM2.

Tout d’abord, installe la dernière version de PM2 en utilisant NPM comme indiqué ci-dessous :

npm install pm2 -g

Une fois installé, change le répertoire en nodeapp et ton application avec la commande suivante :

cd nodeapp
 pm2 start app.js

Une fois que l’application a été lancée, tu devrais obtenir la sortie suivante :

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Dans la sortie ci-dessus, tu peux voir des informations très utiles comme le PID de l’application, le temps de fonctionnement, le statut, l’utilisation du CPU et de la mémoire.

Ensuite, exécute la commande suivante pour créer et configurer un script de démarrage pour l’application Node.js afin que ton application Node.js démarre automatiquement au démarrage.

pm2 startup

Tu devrais obtenir la sortie suivante :

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

Ensuite, démarre le service PM2 avec la commande suivante :

systemctl start pm2-root

Ensuite, vérifie l’état du service PM2 avec la commande suivante :

systemctl status pm2-root

Tu devrais obtenir le résultat suivant :

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

Configurer Nginx en tant que Reverse Proxy pour Node.js

À ce stade, ton application Node.js est en cours d’exécution et écoute sur le localhost. Ensuite, tu devras configurer Nginx comme serveur proxy frontal pour l’application Node.js afin que tout utilisateur puisse accéder à ton application sur Internet.

Tout d’abord, installe le serveur Web Nginx avec la commande suivante :

apt-get install nginx -y

Une fois installé, crée un fichier de configuration d’hôte virtuel Nginx pour l’application Node.js :

nano /etc/nginx/sites-enabled/myapp.conf

Ajoute le contenu suivant :

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
}

Enregistre et ferme le fichier lorsque tu as terminé. Ensuite, redémarre le serveur Nginx pour appliquer les modifications :

systemctl restart nginx

Tu peux vérifier l’état du service Nginx avec la commande suivante :

systemctl status nginx

Tu devrais voir la sortie suivante :

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Accède à ton application Node.js

À ce stade, Nginx est configuré pour servir ton application Node.js.

Maintenant, ouvre ton navigateur Web et tape l’URL http://node.myserver.tld. Tu devrais voir ton application Node.js dans l’écran suivant :

Node.js page

 

Vous aimerez aussi...