GNU/Linux >> Linux Esercitazione >  >> Debian

Come installare Node.js su Debian 10 e configurare Nginx come server proxy frontend

Node.js è una piattaforma JavaScript gratuita e open source che può essere utilizzata per fornire contenuti lato server dinamici e reattivi. Si basa sul motore JavaScript V8 di Chrome ed è in grado di eseguire codice JavaScript al di fuori di un browser web. Può essere eseguito su diversi sistemi operativi tra cui Linux, FreeBSD, Windows e macOS. Node.js funziona anche su altri server web come Apache e Nginx.

In questo tutorial impareremo come installare e configurare Node.js per gestire le richieste di back-end e configurare Nginx per gestire le richieste di front-end su Debian 10.

Prerequisiti

  • Un server che esegue Debian 10.
  • Sul tuo server è configurata una password di root.

Per iniziare

Innanzitutto, si consiglia di aggiornare il sistema all'ultima versione. Puoi farlo con il seguente comando:

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

Una volta aggiornato il server, riavvialo per applicare le modifiche.

Installa Node.js

Per impostazione predefinita, l'ultima versione di Node.js non è disponibile nel repository predefinito di Debian 10. Quindi dovrai installarlo dallo script.

Innanzitutto, installa curl con il seguente comando:

apt-get install curl -y

Quindi, scarica e installa lo script di installazione di Node.js con il seguente comando:

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

Una volta completata l'installazione, puoi installare Node.js con il seguente comando:

apt-get install nodejs -y

Una volta completata l'installazione, puoi verificare la versione di Node.js con il seguente comando:

nodejs --version

Dovresti vedere la versione di Node.js nel seguente output:

v12.16.1

Puoi anche controllare la versione NPM eseguendo il comando seguente:

npm --version

Dovresti vedere la versione NPM nel  seguente output:

6.13.4

Crea applicazione Node.js

Innanzitutto, dovrai creare una directory per la tua applicazione. Puoi crearlo eseguendo il seguente comando:

mkdir nodeapp

Quindi, cambia la directory in nodeapp e installa express con il seguente comando:

cd nodeapp
npm install express

Quindi, crea un'applicazione Node.js di esempio con express utilizzando l'editor nano:

nano app.js

Aggiungi i seguenti contenuti:

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');

Salva e chiudi il file quando hai finito.

Quindi, esegui la tua applicazione con il seguente comando:

node app.js

Quindi, apri un altro terminale e verifica l'applicazione con il seguente comando:

netstat -antup | grep 8000

Dovresti vedere che la tua applicazione Node.js è in ascolto sulla porta 8000:

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

Puoi anche verificare l'applicazione usando il comando curl come mostrato di seguito:

curl http://127.0.0.1:8000

Se tutto va bene, dovresti ottenere il seguente output:

Nginx as Frontend Server for Node.js!

Installa e configura PM2

PM2 è un process manager per gestire l'applicazione Node.js. Puoi facilmente avviare, interrompere e abilitare l'avvio dell'applicazione Node.js all'avvio utilizzando PM2.

Innanzitutto, installa l'ultima versione di PM2 utilizzando NPM come mostrato di seguito:

npm install pm2 -g

Una volta installato, cambia la directory in nodeapp e la tua applicazione con il seguente comando:

cd nodeapp
pm2 start app.js

Una volta avviata l'applicazione, dovresti ottenere il seguente output:

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

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


                          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 ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Nell'output sopra, puoi vedere informazioni molto utili come PID dell'applicazione, tempo di attività, stato, CPU e utilizzo della memoria.

Quindi, esegui il comando seguente per creare e configurare uno script di avvio per l'applicazione Node.js in modo che l'applicazione Node.js venga avviata automaticamente all'avvio.

pm2 startup

Dovresti ottenere il seguente output:

[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

Successivamente, avvia il servizio PM2 con il seguente comando:

systemctl start pm2-root

Successivamente, verifica lo stato del servizio PM2 con il seguente comando:

systemctl status pm2-root

Dovresti ottenere il seguente output:

? 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.

Configura Nginx come proxy inverso per Node.js

A questo punto, l'applicazione Node.js è in esecuzione e in ascolto su localhost. Successivamente, dovrai configurare Nginx come server proxy front-end per l'applicazione Node.js in modo che qualsiasi utente possa accedere alla tua applicazione su Internet.

Innanzitutto, installa il server web Nginx con il seguente comando:

apt-get install nginx -y

Una volta installato, crea un file di configurazione dell'host virtuale Nginx per l'applicazione Node.js:

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

Aggiungi il seguente contenuto:

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;
     }
}

Salva e chiudi il file quando hai finito. Quindi, riavvia il server Nginx per applicare le modifiche:

systemctl restart nginx

Puoi verificare lo stato del servizio Nginx con il seguente comando:

systemctl status nginx

Dovresti vedere il seguente output:

? 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.

Una volta terminato, puoi procedere al passaggio successivo.

Accedi alla tua applicazione Node.js

A questo punto, Nginx è configurato per servire la tua applicazione Node.js.

Ora apri il tuo browser web e digita l'URL http://node.myserver.tld. Dovresti vedere la tua applicazione Node.js nella schermata seguente:

Conclusione

Nell'articolo precedente, hai imparato come configurare l'applicazione Node.js su Debian 10. Hai anche imparato come eseguire l'applicazione Node.js come demone e configurare Nginx come proxy inverso per servire l'applicazione. Spero che ora tu possa ospitare facilmente la tua applicazione Node.js in un ambiente di produzione.


Debian
  1. Come installare e configurare OpenVPN Server su Debian 10

  2. Come installare Node.js e npm su Debian 11

  3. Come installare e configurare il server VNC su Debian 10

  4. Come installare e configurare la finestra mobile su Debian 11

  5. Come installare e configurare Mariadb 10 in Debian 11

Come installare e configurare il server Web OpenLiteSpeed ​​su Debian 10

Come installare e configurare il server NFS su Debian 11

Come installare e configurare il server VNC su Debian 9 Stretch

Come installare e configurare Apache Web Server su Debian 11

Come installare e configurare Git in Debian 11

Come installare e configurare LAMP su Debian 11 (Bullseye)