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 :