Node.js est une plate-forme JavaScript gratuite et open source qui peut être utilisée pour diffuser du contenu côté serveur dynamique et réactif. Il s'appuie sur le moteur JavaScript V8 de Chrome et est capable d'exécuter du code JavaScript en dehors d'un navigateur Web. Il peut être exécuté sur plusieurs systèmes d'exploitation, notamment Linux, FreeBSD, Windows et macOS. Node.js fonctionne également sur d'autres serveurs Web comme Apache et Nginx.
Dans ce tutoriel, nous apprendrons comment installer et configurer Node.js pour gérer les requêtes backend et configurer Nginx pour gérer les requêtes frontend sur Debian 10.
Prérequis
- Un serveur exécutant Debian 10.
- Un mot de passe root est configuré sur votre serveur.
Mise en route
Tout d'abord, il est recommandé de mettre à jour votre système vers la dernière version. Vous pouvez le faire avec la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois votre serveur mis à jour, redémarrez-le pour appliquer les modifications.
Installer 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. Vous devrez donc l'installer à partir du script.
Tout d'abord, installez curl avec la commande suivante :
apt-get install curl -y
Ensuite, téléchargez et installez le script d'installation Node.js avec la commande suivante :
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Une fois l'installation terminée, vous pouvez installer le Node.js avec la commande suivante :
apt-get install nodejs -y
Une fois l'installation terminée avec succès, vous pouvez vérifier la version de Node.js avec la commande suivante :
nodejs --version
Vous devriez voir la version de Node.js dans la sortie suivante :
v12.16.1
Vous pouvez également vérifier la version de NPM en exécutant la commande suivante :
npm --version
Vous devriez voir la version NPM dans le résultat suivant :
6.13.4
Créer une application Node.js
Tout d'abord, vous devrez créer un répertoire pour votre application. Vous pouvez le créer en exécutant la commande suivante :
mkdir nodeapp
Ensuite, changez le répertoire en nodeapp et installez express avec la commande suivante :
cd nodeapp
npm install express
Ensuite, créez un exemple d'application Node.js avec express à l'aide de l'éditeur nano :
nano app.js
Ajoutez 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');
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, lancez votre application avec la commande suivante :
node app.js
Ensuite, ouvrez un autre terminal et vérifiez l'application avec la commande suivante :
netstat -antup | grep 8000
Vous devriez voir que votre application Node.js écoute sur le port 8000 :
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 26193/node
Vous pouvez également vérifier l'application à l'aide de la commande curl comme indiqué ci-dessous :
curl http://127.0.0.1:8000
Si tout va bien, vous devriez obtenir le résultat suivant :
Nginx as Frontend Server for Node.js!
Installer et configurer PM2
PM2 est un gestionnaire de processus pour gérer l'application Node.js. Vous pouvez facilement démarrer, arrêter et activer l'application Node.js pour qu'elle démarre au démarrage à l'aide de PM2.
Tout d'abord, installez la dernière version de PM2 à l'aide de NPM comme indiqué ci-dessous :
npm install pm2 -g
Une fois installé, changez le répertoire en nodeapp et votre application avec la commande suivante :
cd nodeapp
pm2 start app.js
Une fois l'application démarrée, vous devriez obtenir le résultat suivant :
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ 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, vous pouvez voir des informations très utiles telles que le PID de l'application, la disponibilité, l'état, l'utilisation du processeur et de la mémoire.
Ensuite, exécutez la commande suivante pour créer et configurer un script de démarrage pour l'application Node.js afin que votre application Node.js démarre automatiquement au démarrage.
pm2 startup
Vous devriez obtenir le résultat suivant :
[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émarrez le service PM2 avec la commande suivante :
systemctl start pm2-root
Ensuite, vérifiez l'état du service PM2 avec la commande suivante :
systemctl status pm2-root
Vous devriez 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 proxy inverse pour Node.js
À ce stade, votre application Node.js s'exécute et écoute sur l'hôte local. Ensuite, vous devrez configurer Nginx en tant que serveur proxy frontal pour l'application Node.js afin que tout utilisateur puisse accéder à votre application via Internet.
Tout d'abord, installez le serveur Web Nginx avec la commande suivante :
apt-get install nginx -y
Une fois installé, créez un fichier de configuration d'hôte virtuel Nginx pour l'application Node.js :
nano /etc/nginx/sites-enabled/myapp.conf
Ajoutez 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; } }
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le serveur Nginx pour appliquer les modifications :
systemctl restart nginx
Vous pouvez vérifier l'état du service Nginx avec la commande suivante :
systemctl status nginx
Vous devriez voir le résultat suivant :
? 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 vous avez terminé, vous pouvez passer à l'étape suivante.
Accéder à votre application Node.js
À ce stade, Nginx est configuré pour servir votre application Node.js.
Maintenant, ouvrez votre navigateur Web et tapez l'URL http://node.myserver.tld. Vous devriez voir votre application Node.js dans l'écran suivant :
Conclusion
Dans l'article ci-dessus, vous avez appris à configurer l'application Node.js sur Debian 10. Vous avez également appris à exécuter l'application Node.js en tant que démon et à configurer Nginx en tant que proxy inverse pour servir l'application. J'espère que vous pourrez désormais facilement héberger votre application Node.js dans un environnement de production.