GNU/Linux >> Tutoriels Linux >  >> Debian

Comment installer Node.js sur Debian 10 et configurer Nginx en tant que serveur proxy frontal

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.


Debian
  1. Comment installer et configurer OpenVPN Server sur Debian 10

  2. Comment installer Node.js et npm sur Debian 11

  3. Comment installer et configurer le serveur VNC sur Debian 10

  4. Comment installer et configurer docker sur Debian 11

  5. Comment installer et configurer Mariadb 10 dans Debian 11

Comment installer et configurer le serveur Web OpenLiteSpeed ​​sur Debian 10

Comment installer et configurer le serveur NFS sur Debian 11

Comment installer et configurer le serveur VNC sur Debian 9 Stretch

Comment installer et configurer le serveur Web Apache sur Debian 11

Comment installer et configurer Git dans Debian 11

Comment installer et configurer LAMP sur Debian 11 (Bullseye)