Node.js je bezplatná a open source platforma JavaScript, kterou lze použít k poskytování dynamického a responzivního obsahu na straně serveru. Je postaven na JavaScriptovém enginu Chrome V8 a je schopen spouštět kód JavaScript mimo webový prohlížeč. Může být spuštěn na několika operačních systémech včetně Linuxu, FreeBSD, Windows a macOS. Node.js funguje také na jiných webových serverech, jako jsou Apache a Nginx.
V tomto tutoriálu se naučíme, jak nainstalovat a nakonfigurovat Node.js tak, aby zpracovával backendové požadavky, a jak nakonfigurovat Nginx pro zpracování frontendových požadavků v Debianu 10.
Předpoklady
- Server se systémem Debian 10.
- Na vašem serveru je nakonfigurováno heslo uživatele root.
Začínáme
Nejprve se doporučuje aktualizovat váš systém na nejnovější verzi. Můžete to udělat pomocí následujícího příkazu:
apt-get update -y
apt-get upgrade -y
Jakmile je váš server aktualizován, restartujte jej, aby se změny projevily.
Instalovat Node.js
Ve výchozím nastavení není nejnovější verze Node.js k dispozici ve výchozím úložišti Debian 10. Budete jej tedy muset nainstalovat ze skriptu.
Nejprve nainstalujte curl pomocí následujícího příkazu:
apt-get install curl -y
Dále si stáhněte a nainstalujte instalační skript Node.js pomocí následujícího příkazu:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Po dokončení instalace můžete soubor Node.js nainstalovat pomocí následujícího příkazu:
apt-get install nodejs -y
Po úspěšném dokončení instalace můžete ověřit verzi Node.js pomocí následujícího příkazu:
nodejs --version
Verzi Node.js byste měli vidět v následujícím výstupu:
v12.16.1
Verzi NPM můžete také zkontrolovat spuštěním následujícího příkazu:
npm --version
Verzi NPM byste měli vidět v následujícím výstupu:
6.13.4
Vytvořit aplikaci Node.js
Nejprve budete muset vytvořit adresář pro vaši aplikaci. Můžete jej vytvořit spuštěním následujícího příkazu:
mkdir nodeapp
Dále změňte adresář na nodeapp a nainstalujte express pomocí následujícího příkazu:
cd nodeapp
npm install express
Dále vytvořte ukázkovou aplikaci Node.js s express pomocí nano editoru:
nano app.js
Přidejte následující obsah:
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');
Po dokončení uložte a zavřete soubor.
Dále spusťte aplikaci pomocí následujícího příkazu:
node app.js
Dále otevřete další terminál a ověřte aplikaci pomocí následujícího příkazu:
netstat -antup | grep 8000
Měli byste vidět, že vaše aplikace Node.js naslouchá na portu 8000:
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 26193/node
Aplikaci můžete také ověřit pomocí příkazu curl, jak je ukázáno níže:
curl http://127.0.0.1:8000
Pokud je vše v pořádku, měli byste získat následující výstup:
Nginx as Frontend Server for Node.js!
Instalace a konfigurace PM2
PM2 je správce procesů pro správu aplikace Node.js. Aplikaci Node.js můžete snadno spustit, zastavit a povolit spuštění při startu pomocí PM2.
Nejprve nainstalujte nejnovější verzi PM2 pomocí NPM, jak je uvedeno níže:
npm install pm2 -g
Po instalaci změňte adresář na nodeapp a vaši aplikaci pomocí následujícího příkazu:
cd nodeapp
pm2 start app.js
Po spuštění aplikace byste měli získat následující výstup:
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ 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 ? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Ve výše uvedeném výstupu můžete vidět velmi užitečné informace, jako je PID aplikace, doba provozu, stav, CPU a využití paměti.
Dále spusťte následující příkaz pro vytvoření a konfiguraci spouštěcího skriptu pro aplikaci Node.js, aby se vaše aplikace Node.js spustila automaticky při spuštění.
pm2 startup
Měli byste získat následující výstup:
[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
Dále spusťte službu PM2 pomocí následujícího příkazu:
systemctl start pm2-root
Dále ověřte stav služby PM2 pomocí následujícího příkazu:
systemctl status pm2-root
Měli byste získat následující výstup:
? 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.
Nakonfigurujte Nginx jako reverzní proxy pro Node.js
V tomto okamžiku vaše aplikace Node.js běží a naslouchá na localhost. Dále budete muset nakonfigurovat Nginx jako front-end proxy server pro aplikaci Node.js, aby každý uživatel mohl přistupovat k vaší aplikaci přes internet.
Nejprve nainstalujte webový server Nginx pomocí následujícího příkazu:
apt-get install nginx -y
Po instalaci vytvořte konfigurační soubor virtuálního hostitele Nginx pro aplikaci Node.js:
nano /etc/nginx/sites-enabled/myapp.conf
Přidejte následující obsah:
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; } }
Po dokončení uložte a zavřete soubor. Poté restartujte server Nginx, aby se změny projevily:
systemctl restart nginx
Stav služby Nginx můžete ověřit pomocí následujícího příkazu:
systemctl status nginx
Měli byste vidět následující výstup:
? 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.
Jakmile budete hotovi, můžete přejít k dalšímu kroku.
Přístup k aplikaci Node.js
V tomto okamžiku je Nginx nakonfigurován tak, aby obsluhoval vaši aplikaci Node.js.
Nyní otevřete webový prohlížeč a zadejte adresu URL http://node.myserver.tld. Svou aplikaci Node.js byste měli vidět na následující obrazovce:
Závěr
Ve výše uvedeném článku jste se naučili, jak nastavit aplikaci Node.js v Debianu 10. Také jste se naučili, jak spustit aplikaci Node.js jako démona a nakonfigurovat Nginx jako reverzní proxy pro obsluhu aplikace. Doufám, že nyní můžete svou aplikaci Node.js snadno hostovat v produkčním prostředí.