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.