Ako nastaviť aplikáciu Node.js pre produkciu na Ubuntu
Úvod
Spustenie aplikácie Node.js lokálne je len prvý krok. Aby bola pripravená na produkciu, je potrebné ju nakonfigurovať pre reálne podmienky, ktoré vyžadujú stabilitu, bezpečnosť a výkon. Správne nakonfigurované produkčné prostredie zabezpečí, že vaša aplikácia sa dokáže zotaviť po pádoch, bezpečne obsluhovať prevádzku a zvládnuť zvýšený dopyt bez výpadkov.
V tomto návode si vytvoríte kompletné produkčné prostredie na Ubuntu pomocou Node.js, PM2, Nginx, Let’s Encrypt a UFW. Node.js spúšťa aplikáciu, PM2 spravuje procesy a automaticky ich reštartuje, Nginx spracováva prichádzajúce požiadavky a poskytuje prevádzku cez HTTPS, Let’s Encrypt poskytuje bezplatné SSL certifikáty a UFW zabezpečuje server riadením prístupu k sieti. Spolu tieto nástroje tvoria silný základ pre nasadzovanie aplikácií, ktoré sú spoľahlivé, efektívne a bezpečné.
Nasadzujte svoje Node aplikácie z GitHubu pomocou platformy Linux-Console.net App. Nechajte Linux-Console.net, aby sa postaral o škálovanie vašej aplikácie.
Hlavné body:
- Použite správcu procesov ako PM2, aby Node.js aplikácie bežali nepretržite, automaticky sa reštartovali po zlyhaní a spúšťali sa pri štarte systému pomocou
pm2 startupapm2 save. - Spúšťajte aplikácie za Nginx ako reverzným proxy namiesto priameho vystavenia Node.js. Nginx efektívne spravuje SSL, statické súbory a vyrovnávanie záťaže.
- Vždy viažte Node.js na localhost (
127.0.0.1) v produkcii, aby ste zabránili priamemu verejnému prístupu a spoliehali sa na Nginx pre externú prevádzku. - Povoliť HTTPS s Let’s Encrypt a Certbot. Nechajte Nginx automaticky spravovať SSL ukončenie a obnovovanie certifikátov pomocou
sudo certbot renew --dry-run. - Zabezpečte server pomocou UFW. Povoliť len SSH a „Nginx Full“ (HTTP/HTTPS) prenos, všetko ostatné blokovať.
- Spravujte tajomstvá cez environmentálne premenné alebo
.envsúbory načítané pomocoudotenva udržiavajte ich mimo správy verzií. - Povoľte kompresiu a ukladanie do vyrovnávacej pamäte v Nginx (gzip a Brotli) na zlepšenie rýchlosti načítania a zníženie používania šírky pásma.
- Monitorujte pomocou PM2 a systémových nástrojov (
pm2 monit,htopalebo integrácia s nástrojmi ako Grafana/Prometheus) na včasné odhalenie problémov s výkonom. - Pravidelne aplikujte aktualizácie a kontroly (
sudo apt update && sudo apt upgrade,npm audit) na udržanie bezpečnosti systému a závislostí. - Dodržiavajte osvedčené postupy, ako napríklad spúšťanie pod neprivilegovaným používateľom, automatizovanie záloh, rotáciu logov a používanie HTTPS všade pre stabilné a bezpečné nasadenie.
Predpoklady
Tento návod predpokladá, že máte nasledovné:
- Nastavenie servera Ubuntu, ako je opísané v počiatočnom nastavení servera s Ubuntu. Mali by ste mať používateľa bez práv root s oprávneniami sudo a aktívny firewall.
- Doménové meno smerujúce na verejnú IP adresu vášho servera. V tomto návode sa bude používať doménové meno example.com.
- Nainštalovaný Nginx, ako je popísané v návode Ako nainštalovať a nakonfigurovať Nginx na Ubuntu.
- Nginx nakonfigurovaný so SSL pomocou certifikátov Let’s Encrypt. Ako zabezpečiť Nginx s Let’s Encrypt na Ubuntu vás prevedie týmto procesom.
Keď splníte predpoklady, budete mať server, ktorý bude slúžiť predvolenú zástupnú stránku vašej domény na https://example.com/.
Nainštalujte a overte Node.js
V tomto kroku nainštalujete Node.js pomocou NodeSource PPA a overíte, či bola inštalácia úspešná. Táto metóda zabezpečuje, že budete mať prístup k najnovšej verzii Node.js s dlhodobou podporou (LTS) a jej prislúchajúcemu správcovi balíkov, npm.
Nainštalujte Node.js cez PPA NodeSource
Najprv nainštalujte PPA NodeSource, aby ste získali prístup k jeho úložisku. Uistite sa, že ste vo svojom domovskom adresári, a použite curl na stiahnutie inštalačného skriptu pre najnovšiu LTS verziu Node.js.
cd ~
curl -sL https://deb.nodesource.com/setup_24.x -o nodesource_setup.shPred spustením môžete obsah skriptu skontrolovať pomocou nano:
nano nodesource_setup.shKeď budete pripravení, spustite skript s sudo:
sudo bash nodesource_setup.shTýmto sa PPA pridá do vašej konfigurácie a automaticky sa aktualizuje lokálna vyrovnávacia pamäť balíkov.
Teraz môžete nainštalovať Node.js:
sudo apt install nodejsAk chcete overiť inštaláciu a skontrolovať verziu Node.js, spustite:
node -vMali by ste vidieť výstup podobný tomuto:
v24.11.1Nainštalujte npm a build-essential
Balík nodejs tiež inštaluje npm, správcu balíkov Node.js. Ak chcete potvrdiť jeho inštaláciu a inicializovať konfiguračný súbor, spustite:
npm -vMali by ste vidieť podobný výstup:
11.6.2Aby niektoré balíky npm fungovali (tie, ktoré vyžadujú kompiláciu kódu zo zdroja, napríklad), budete musieť nainštalovať balík build-essential:
sudo apt install build-essentialS úspešne nainštalovaným Node.js a npm máte teraz k dispozícii potrebné nástroje na vývoj a správu závislostí vašej aplikácie. V nasledujúcej časti si vytvoríte jednoduchú Node.js aplikáciu na otestovanie spúšťacieho prostredia.
Vytvorte ukážkovú aplikáciu Node.js
Pozrime sa na napísanie jednoduchého Node.js programu, ktorý odpovie "Hello World" na akékoľvek HTTP požiadavky. Táto ukážková aplikácia overí, že Node.js je nainštalovaný správne, a ukáže, ako by mali byť aplikácie nakonfigurované na bezpečné počúvanie na localhost v produkčnom prostredí.
Vytvorte jednoduchý server v Node.js
Vytvorte nový súbor s názvom hello.js vo vašom domovskom adresári:
cd ~
nano hello.jsPridajte nasledujúci kód do súboru:
const http = require('http');
const hostname = 'localhost';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});Uložte súbor a po dokončení ho zatvorte.
Tento skript vytvára jednoduchý HTTP server, ktorý počúva na porte 3000 a odpovie Hello World! na akékoľvek prichádzajúce požiadavky. Pretože je viazaný na localhost, prijme pripojenia iba z toho istého počítača.
Otestujte aplikáciu
Spustite svoju aplikáciu pomocou Node.js:
node hello.js
Mali by ste vidieť výstup podobný tomu:
Server running at http://localhost:3000/V ďalšej terminálovej relácii otestujte vašu aplikáciu pomocou curl:
curl http://localhost:3000Mali by ste vidieť nasledujúci výstup:
Hello World!Ak nedostanete očakávaný výstup, uistite sa, že vaša aplikácia Node.js beží a je nakonfigurovaná na počúvanie na správnej adrese a porte.
Keď si už istý, že to funguje, ukonči aplikáciu stlačením CTRL+C v pôvodnom termináli, aby si zastavil server.
Prečo by sa aplikácie v produkcii mali pripájať na localhost
V produkčnom prostredí aplikácie Node.js zvyčajne bežia za reverzným proxy serverom, ako je Nginx. Aplikácia Node.js počúva na internej adrese (napr. localhost:3000) a Nginx spracováva prichádzajúcu webovú prevádzku, ukončenie TLS a smerovanie.
Priradenie vašej aplikácie k localhost poskytuje niekoľko bezpečnostných a spoľahlivostných výhod:
- Zabraňuje externému prístupu: Iba Nginx môže priamo pristupovať k procesu Node.js.
- Povoľuje offloading HTTPS: Nginx spravuje SSL certifikáty a šifrovanie, čím uvoľňuje túto prácu z Node.js.
- Zjednodušuje pravidlá brány firewall: Brána firewall môže blokovať prístup ku všetkým interným portom aplikácií a zároveň povoliť HTTP/HTTPS.
Táto konfigurácia zabezpečuje, že vaša aplikácia Node.js je izolovaná, zabezpečená a prístupná iba cez reverzný proxy server Nginx.
Nainštalujte a nakonfigurujte správcu procesov PM2
V tejto sekcii nainštalujete PM2, manažér procesov pre produkčné prostredie Node.js aplikácií. PM2 vám umožní udržiavať vaše aplikácie nepretržite spustené, automaticky ich reštartovať po zlyhaní a nastaviť ich tak, aby sa spúšťali pri štarte systému.
Inštalácia PM2
Použite npm na globálnu inštaláciu PM2:
sudo npm install -g pm2Prepínač -g inštaluje PM2 systémovo, takže je dostupný pre všetkých používateľov a aplikácie.
Keď je nainštalovaný, spustite svoju ukážkovú aplikáciu pomocou PM2:
pm2 start hello.jsUvidíte výstupnú tabuľku, ktorá ukazuje, že PM2 začal spravovať vašu aplikáciu:
[PM2] Spawning PM2 daemon with pm2_home=/home/user/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/hello.js in fork_mode (1 instance)
[PM2] Done.
┌────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ hello │ default │ N/A │ fork │ 3826 │ 0s │ 0 │ online │ 0% │ 33.3mb │ root │ disabled │
└────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘Ako je uvedené vyššie, PM2 automaticky priraďuje Meno aplikácie (na základe názvu súboru, bez prípony .js) a PM2 id. PM2 tiež uchováva ďalšie informácie, ako je PID procesu, jeho aktuálny stav a využitie pamäte.
Povolenie automatického reštartu pri zlyhaní a reštarte
PM2 automaticky reštartuje vašu aplikáciu, ak sa zrúti alebo je ukončená. Aby ste sa uistili, že PM2 sa sám automaticky spustí po reštarte servera, spustite:
pm2 startup systemdPM2 vygeneruje príkaz, ktorý bude vyzerať približne takto (nahraďte sammy svojim používateľským menom):
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/sammy/.nvm/versions/node/v24.11.1/bin /home/sammy/.nvm/versions/node/v24.11.1/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammyPoznámka: Vaša cesta sa bude líšiť v závislosti od verzie Node.js a používateľského mena.
Spusťte tento príkaz, potom uložte bežiace aplikácie, aby si ich PM2 zapamätal pri ďalšom reštarte:
pm2 saveAk chcete potvrdiť, že je všetko správne nastavené, skontrolujte stav služby:
systemctl status pm2-sammyPoznámka: Pre podrobný prehľad o systemd si prosím prečítajte Systemd Essentials: Práca so službami, jednotkami a denníkom.
Ak narazíte na problémy, reštartujte server a skontrolujte, či sa vaša aplikácia spúšťa automaticky.
Používanie súboru ekosystému PM2
Keď budete pripravení spúšťať viac ako jednu aplikáciu alebo spravovať rôzne prostredia, PM2 ecosystem súbor je veľkou pomocou. Je to jednoduchý konfiguračný súbor, ktorý vám umožňuje definovať premenné prostredia, porty a nastavenia nasadenia všetko na jednom mieste.
Vytvorte štartovací súbor spustením:
pm2 ecosystemPotom upravte vygenerovaný súbor ecosystem.config.js:
module.exports = {
apps: [
{
name: 'hello',
script: 'hello.js',
env: {
NODE_ENV: 'development',
PORT: 3001
},
env_production: {
NODE_ENV: 'production',
PORT: 3000
}
}
]
};Ak chcete spustiť svoju aplikáciu v produkčnom režime, použite:
pm2 start ecosystem.config.js --env productionSúbor ekosystému uľahčuje správu viacerých prostredí a bezpečné uchovávanie premenných prostredia mimo vášho zdrojového kódu. S nainštalovaným PM2 vaša aplikácia prežije pády, reštarty a aktualizácie, pričom bude ticho bežať na pozadí.
Ďalšie príkazy PM2
Okrem tých, o ktorých sme už hovorili, PM2 poskytuje mnoho podpríkazov, ktoré vám umožňujú spravovať alebo zisťovať informácie o vašich aplikáciách.
Zastavte aplikáciu týmto príkazom (uvedte PM2 názov aplikácie alebo id):
pm2 stop app_name_or_idReštartovať aplikáciu:
pm2 restart app_name_or_idZoznam aplikácií aktuálne spravovaných PM2:
pm2 listZískajte informácie o konkrétnej aplikácii pomocou jej Názov aplikácie:
pm2 info app_nameAk chcete zobraziť živé záznamy pre vašu aplikáciu:
pm2 logsMonitorovací proces PM2 je možné zobraziť pomocou podpríkazu monit. Zobrazuje stav aplikácie, využitie CPU a pamäte:
pm2 monitVšimnite si, že spustenie pm2 bez akýchkoľvek argumentov zobrazí aj stránku s nápovedou s príkladmi použitia.
Teraz, keď vaša aplikácia Node.js beží a je spravovaná pomocou PM2, nastavme reverzný proxy server.
Nastavenie Nginx ako reverzného proxy servera
S vašou aplikáciou Node.js bežiacou pod PM2 je ďalším krokom sprístupniť ju používateľom cez web. Namiesto priameho vystavenia aplikácie na porte 3000 použijete Nginx ako reverzný proxy server. Nginx bude spracovávať všetky prichádzajúce požiadavky HTTP a HTTPS a odovzdávať ich vašej aplikácii Node.js bežiacej na localhost.
Základná konfigurácia reverzného proxy
Otvorte konfiguračný súbor Nginx vášho webu. Ak ste postupovali podľa nastavenia z časti predpoklady, tento súbor by mal byť umiestnený v /etc/nginx/sites-available/example.com:
sudo nano /etc/nginx/sites-available/example.comVnútri bloku server nájdite (alebo vytvorte) sekciu location / a nahraďte jej obsah nasledujúcou konfiguráciou. Ak vaša aplikácia Node.js počúva na inom porte, podľa toho upravte zvýraznenú hodnotu.
server {
...
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000;
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;
}
...
}Týmto sa Nginx prikazuje počúvať na porte 80 (HTTP) a presmerovať všetku prichádzajúcu prevádzku na vašu aplikáciu Node.js bežiacu na porte 3000.
Ak chcete testovať viacero aplikácií, môžete definovať ďalšie bloky location. Napríklad, ak máte ďalšiu aplikáciu Node.js bežiacu na porte 3001, pridajte toto do toho istého serverového bloku:
server {
...
location /app2 {
proxy_pass http://localhost:3001;
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;
}
...
}Uložte súbor a potom otestujte konfiguráciu na syntaktické chyby spustením:
sudo nginx -tAk je všetko v poriadku, reštartujte Nginx:
sudo systemctl reload nginxV tomto bode by návšteva domény vášho servera (napríklad http://example.com) mala načítať aplikáciu Node.js bežiacu cez Nginx proxy.
Pridanie konfigurácie HTTPS (SSL)
Na zabezpečenie vašej aplikácie nakonfigurujte Nginx tak, aby spracovával HTTPS prevádzku. Ak už máte SSL certifikáty od Let’s Encrypt, uistite sa, že sú definované vo vašej konfigurácii Nginx. Tu je príklad, ako môže vyzerať aktualizovaný serverový blok:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000;
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;
}
}Prvý serverový blok automaticky presmeruje všetky HTTP požiadavky na HTTPS a druhý blok spracováva zabezpečenú prevádzku na porte 443.
Viacnásobné smerovanie aplikácií (voliteľné)
Ak váš server hostí viacero aplikácií, Nginx ich môže všetky zvládnuť definovaním rôznych ciest alebo subdomén. Napríklad môžete mať:
https://example.com/presmeruje na port 3000https://example.com/app2smeruje na port 3001https://api.example.com/smeruje na port 4000
Každá aplikácia môže byť spravovaná vlastným procesom PM2 a poskytovaná cez Nginx.
Keď potvrdíte, že všetko funguje, vaša aplikácia Node.js by mala byť teraz bezpečne prístupná cez Nginx.
Konfigurácia firewallu UFW pre produkciu
Teraz, keď vaša aplikácia Node.js beží za Nginxom, pridajme poslednú vrstvu sieťovej bezpečnosti. Ubuntu obsahuje vstavaný firewall s názvom UFW (Jednoduchý firewall). Je ľahký, jednoduchý na konfiguráciu a ideálny na blokovanie neželaného prístupu k vášmu serveru.
Kontrola stavu brány firewall
Pred vykonaním akýchkoľvek zmien skontrolujte, či je UFW už povolený:
sudo ufw statusAk je napísané neaktívne, nebojte sa, čoskoro ho povolíme. Najprv však určíme, aké typy prenosu by mali byť povolené. Je vždy najlepšie nastaviť pravidlá pred jeho zapnutím.
Povoliť základnú prevádzku
Minimálne budete musieť povoliť SSH, aby ste sa stále mohli pripojiť k svojmu serveru, a HTTP/HTTPS, aby Nginx mohol poskytovať webovú prevádzku. Na to spustite nasledujúce príkazy:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'Teraz môžeme povoliť firewall:
sudo ufw enableBudete vyzvaný na potvrdenie: napíšte y a stlačte Enter.
Skontrolujte firewall znova, aby ste sa uistili, že vaše pravidlá sú aktívne:
sudo ufw statusMali by ste vidieť niečo takéto:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)To je všetko! Teraz sú povolené len SSH a webový prenos; všetko ostatné je zablokované.
Prečo je firewall dôležitý v produkcii
Firewally sú základom bezpečnosti servera, pretože stanovujú prísnu kontrolu nad tým, aká sieťová prevádzka môže dosiahnuť váš systém. Aj dobre nakonfigurované aplikácie a webové servery môžu byť zraniteľné, ak zostanú otvorené nepotrebné porty.
Tu je niekoľko kľúčových dôvodov, prečo sú firewally kritické v produkcii:
- Minimalizujte expozíciu: Prístupné sú iba výslovne povolené porty, čím sa znižuje počet potenciálnych vektorov útoku.
- Obmedzenie: V prípade narušenia alebo nesprávnej konfigurácie firewall obmedzuje, ako ďaleko sa útočník môže pohybovať vo vašom systéme alebo sieti.
- Dodržiavanie predpisov a audity: Mnohé bezpečnostné štandardy vyžadujú aktívnu ochranu firewallom s kontrolovateľnými pravidlami prístupu.
- Hĺbková obrana: Firewally dopĺňajú ďalšie bezpečnostné vrstvy, ako sú TLS, autentifikácia a spevňovanie aplikácií.
Pre väčšinu produkčných serverov je udržiavanie aktívneho firewallu s otvorenými len nevyhnutnými portami správnou rovnováhou medzi dostupnosťou a ochranou. Je to nízkoúdržbový bezpečnostný opatrenie, ktoré poskytuje ďalšiu vrstvu kontroly a pomáha predchádzať neoprávnenému prístupu do siete.
S nakonfigurovaným UFW je váš systém teraz na úrovni siete bezpečnejší.
Povoliť SSL s Let’s Encrypt
Teraz, keď je vaša aplikácia verejne prístupná cez Nginx, je čas pridať HTTPS pre bezpečnú komunikáciu. SSL šifruje celý prenos medzi vaším serverom a používateľmi, čím zabezpečuje súkromie a integritu dát. Najjednoduchší spôsob, ako pridať SSL na vašu stránku, je použitie Let's Encrypt, bezplatnej a automatizovanej certifikačnej autority.
Nainštalujte Certbot a plugin pre Nginx
Let’s Encrypt funguje cez nástroj nazývaný Certbot, ktorý zabezpečuje celý proces žiadania, inštalácie a obnovovania certifikátov. Na Ubuntu môžete nainštalovať Certbot spolu s jeho Nginx pluginom v jednom kroku:
sudo apt update
sudo apt install certbot python3-certbot-nginx -yToto nainštaluje klienta Certbot aj jeho plugin pre integráciu s Nginx, ktorý automaticky nakonfiguruje HTTPS vo vašom existujúcom serverovom bloku Nginx.
Získať SSL certifikáty
Po nainštalovaní Certbotu ho môžete použiť na získanie nového SSL certifikátu pre vašu doménu. Nahraďte example.com a www.example.com vašimi skutočnými názvami domén:
sudo certbot --nginx -d example.com -d www.example.comPočas procesu bude Certbot:
- Overte, či vaša doména smeruje na tento server (pomocou HTTP výzvy)
- Získajte SSL certifikát od Let’s Encrypt
- Automaticky upravte svoju konfiguráciu Nginx na povolenie HTTPS
- Znova načítajte Nginx, aby sa nové nastavenia prejavili
Budete vyzvaný na zadanie e-mailovej adresy (použitej na oznámenia o obnove) a budete požiadaný o súhlas s podmienkami služby. Po dokončení nastavenia by ste mali vidieť potvrdzujúcu správu, že váš certifikát bol úspešne nainštalovaný.
Môžete si overiť údaje o svojom certifikáte u:
sudo certbot certificatesPotom navštívte svoju doménu, aby ste overili, že stránka sa teraz načítava bezpečne.
Automatické obnovenie
Certifikáty Let’s Encrypt sú platné iba 90 dní, ale nie je potrebné sa obávať ručných obnovení. Certbot nainštaluje systémový časovač, ktorý beží dvakrát denne a kontroluje expiráciu certifikátov a ich automatické obnovenie.
Tento proces obnovenia môžete kedykoľvek otestovať pomocou:
sudo certbot renew --dry-runAk suchý test prebehne bez chýb, vaše certifikáty sa automaticky obnovia na pozadí a Nginx sa znovu načíta, aby ich použil.
Prečo je HTTPS dôležité
Spustenie vašej aplikácie cez HTTPS už nie je voliteľné, je to základná súčasť prevádzky akéhokoľvek produkčného systému. SSL/TLS zabezpečuje, že všetka komunikácia medzi vaším serverom a klientmi je šifrovaná a odolná voči manipulácii, čím chránite pred odpočúvaním a manipuláciou s údajmi.
Okrem bezpečnosti HTTPS ponúka aj niekoľko ďalších výhod:
- Dôvera a dôveryhodnosť: Prehliadače označujú stránky bez HTTPS ako „Nezabezpečené“, čo môže oslabiť dôveru používateľov.
- Zlepšené hodnotenie vo vyhľadávaní: Hlavné vyhľadávače používajú HTTPS ako signál pre hodnotenie.
- Prístup k moderným webovým funkciám: HTTP/2, QUIC a ďalšie vylepšenia výkonnosti vyžadujú TLS.
- Zhoda: Mnohé predpisy o ochrane súkromia a štandardy v odvetví vyžadujú šifrovanie prenášaných údajov.
Použitím Let’s Encrypt získate tieto výhody s minimálnym nastavením a zadarmo. Certifikáty sa obnovujú automaticky, čo z neho robí jednoduché dlhodobé riešenie pre bezpečné nasadenia.
S HTTPS je váš server teraz schopný poskytovať šifrovanú a dôveryhodnú prevádzku.
Spravujte premenné prostredia bezpečne
Každá produkčná aplikácia potrebuje spoľahlivý spôsob, ako spravovať konfiguračné údaje, ako sú kľúče API, prihlasovacie údaje do databázy alebo tajné tokeny. Ukladanie týchto hodnôt priamo do zdrojového kódu môže viesť k ich odhaleniu cez verziovací systém, logy alebo dokonca úniky na strane klienta. Bezpečnejším prístupom je použitie premenných prostredia, ktoré uchovávajú citlivé informácie oddelene od vášho kódového základu.
Používanie súborov .env s dotenv
Bežnou a jednoduchou metódou na správu environmentálnych premenných v Node.js je použitie súboru .env spolu s balíkom dotenv. Tento spôsob umožňuje vašej aplikácii načítavať konfiguračné hodnoty počas behu programu a zároveň ich uchováva mimo zdrojového kódu.
Spustite nasledujúce na inštaláciu balíka dotenv:
npm install dotenvĎalej vytvorte v adresári projektu súbor .env:
nano .envPridajte svoje konfiguračné hodnoty vo formáte kľúč-hodnota, takto:
PORT=3000
NODE_ENV=production
DB_HOST=localhost
DB_USER=myuser
DB_PASS=securepassword
JWT_SECRET=myjwtsecretkeyTeraz upravte hlavný súbor aplikácie (napríklad app.js), aby sa pri spustení načítali premenné prostredia:
require('dotenv').config();
const express = require('express');
const app = express();
app.listen(process.env.PORT, () => {
console.log(`Server running in ${process.env.NODE_ENV} mode on port ${process.env.PORT}`);
});Keď vaša aplikácia beží, načíta premenné definované v súbore .env a použije ich na konfiguráciu bežiaceho prostredia.
Premenné prostredia s PM2
Ak spúšťate svoju aplikáciu pomocou PM2, môžete definovať premenné prostredia priamo v príkazoch PM2 alebo v konfiguračných súboroch. To pomáha udržiavať konfigurácie konzistentné naprieč prostrediami, ako sú vývoj, testovanie a produkcia.
Premenné môžete nastaviť priamo pri spustení aplikácie:
pm2 start app.js --name "myapp" --env productionPre čistejšie a lepšie škálovateľné riešenie použite súbor konfigurácie ekosystému PM2. Vygenerujte ho pomocou:
pm2 ecosystemPotom upravte súbor ecosystem.config.js, aby obsahoval vaše premenné prostredia:
module.exports = {
apps: [
{
name: 'myapp',
script: 'app.js',
env: {
NODE_ENV: 'development',
PORT: 3001
},
env_production: {
NODE_ENV: 'production',
PORT: 3000,
DB_HOST: 'localhost',
DB_USER: 'myuser',
DB_PASS: 'securepassword'
}
}
]
};Spustite aplikáciu v produkčnom režime:
pm2 start ecosystem.config.js --env productionTýmto sa zabezpečí, že správne premenné sa automaticky načítajú vždy, keď sa aplikácia reštartuje.
Najlepšie postupy pri správe tajomstiev
Bezpečné spravovanie tajomstiev a premenných prostredia je kľúčové pre zachovanie integrity vašej infraštruktúry. Nasledujúce najlepšie postupy vám pomôžu minimalizovať riziká:
Uchovávajte tajomstvá mimo správy zdrojového kódu: Nikdy nezverejňujte súbory
.envvo svojom Git repozitári. Pridajte ich do.gitignore, aby ste predišli náhodnému zverejneniu.Obmedziť prístup: Povolenie na čítanie alebo úpravu konfiguračných súborov prostredia by mali mať iba dôveryhodní používatelia a automatizované systémy.
Používajte súbory špecifické pre prostredie: Udržiavajte samostatné konfigurácie pre vývoj, testovanie, staging a produkciu. Napríklad
.env.developmenta.env.production.Pravidelne otáčajte tajomstvá: Zmeňte API kľúče, tokeny a heslá podľa harmonogramu, aby ste znížili dopad potenciálnych únikov.
Použite správcu tajomstiev pre väčšie systémy: Pre zložité aplikácie alebo tímy zvážte používanie služieb ako HashiCorp Vault namiesto lokálnych súborov
.env.Vyhýbajte sa zapisovaniu citlivých údajov: Buďte opatrní, aby ste nezobrazovali ani nezaznamenávali tajné údaje vo vašej aplikácii alebo v logoch nasadenia.
Overte premenné prostredia pri spustení: Použite knižnice ako
joialeboenv-schema, aby ste zabezpečili, že všetky požadované premenné sú nastavené pred spustením aplikácie.Obmedziť oprávnenia súborov: Použite príkaz
chmodna obmedzenie prístupu k súborom.env. Napríklad:chmod 600 .env
Dodržiavanie týchto postupov pomáha chrániť citlivé informácie, zabraňuje náhodnému odhaleniu a uľahčuje správu konfigurácie naprieč viacerými prostrediami.
Techniky optimalizácie výroby
S vašou aplikáciou bežiacou v stabilnom produkčnom prostredí je dôležité zamerať sa na výkonnosť a efektívnosť. Optimalizácia nielenže zlepšuje používateľskú skúsenosť, ale tiež znižuje náklady na server a pomáha zabezpečiť hladkú škálovateľnosť. V tejto časti sa naučíte niekoľko techník, ako doladiť vaše nastavenie Node.js a Nginx pre lepšiu rýchlosť, spoľahlivosť a využitie zdrojov.
Povoliť kompresiu (gzip alebo Brotli)
Kompresia je jedným z najjednoduchších spôsobov, ako zlepšiť výkon. Zmenšuje veľkosť súborov odosielaných zo servera na klienta, čo urýchľuje načítanie stránok a znižuje spotrebu šírky pásma. Nginx podporuje dve populárne metódy kompresie: gzip a Brotli.
Používanie gzip
Ak chcete povoliť gzip kompresiu, otvorte hlavný konfiguračný súbor Nginx:
sudo nano /etc/nginx/nginx.confVo vnútri bloku http pridajte alebo odkomentujte nasledujúce direktívy:
gzip on;
gzip_types text/plain text/css application/javascript application/json application/xml;
gzip_min_length 256;
gzip_comp_level 5;Tieto nastavenia umožňujú používanie gzip pre bežné typy súborov, komprimujú súbory väčšie ako 256 bajtov a uplatňujú miernu úroveň kompresie na vyváženie zaťaženia CPU a výkonu.
Používanie Brotli
Ak máte nainštalovaný modul Brotli, môžete ho použiť pre ešte lepšie kompresné pomery:
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json application/xml;Brotli je obzvlášť účinný pre textové súbory ako CSS a JavaScript. Po vykonaní týchto zmien reštartujte Nginx, aby sa prejavili:
sudo systemctl reload nginxS povolenou kompresiou budú klienti sťahovať zdroje rýchlejšie, čo povedie k rýchlejšiemu načítaniu a lepšiemu výkonu na stolových aj mobilných zariadeniach.
Konfigurácia ukladaní do vyrovnávacej pamäte v Nginx
Cacheovanie umožňuje vašemu serveru znovu použiť predtým vygenerované odpovede namiesto ich opätovného generovania pri každom požiadavke. To výrazne znižuje záťaž na vašu aplikáciu Node.js a zrýchľuje reakčný čas pre koncových používateľov.
Na ukladanie statických súborov, ako sú obrázky, štýly a skripty, pridajte túto konfiguráciu do vášho Nginx server bloku:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}Táto konfigurácia inštruuje prehliadače, aby ukladali statické súbory do vyrovnávacej pamäte na sedem dní. Dĺžku ukladania môžete upraviť podľa toho, ako často sa menia vaše statické súbory.
Pre API alebo dynamický obsah je možné používať cache selektívnejšie. Napríklad môžete ukladať do cache odpovede pre často používané koncové body, pričom koncové body vracajúce údaje špecifické pre používateľa budú vylúčené. Nginx tiež podporuje mikrocaching (krátkodobé ukladanie do cache v sekundách) pre API s vysokou návštevnosťou.
Najlepšie praktiky zaznamenávania
Logy sú nezvyčajné pre monitorovanie, riešenie problémov a ladenie výkonu. Aj PM2, aj Nginx poskytujú komplexné nástroje na záznam logov, ktoré vám pomáhajú sledovať, čo sa deje vo vašom systéme.
Záznamy PM2
PM2 automaticky spravuje záznamy vašej aplikácie. Ak ich chcete sledovať v reálnom čase, použite:
pm2 logsPostupom času môžu logy narásť a zabrať veľa miesta na disku. Aby ste tomu predišli, nainštalujte modul pre rotáciu logov PM2:
pm2 install pm2-logrotatePotom nastavte politiku otáčania:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7Toto nastavenie uchováva logovacie súbory každý pod 10 MB a uchováva sedem dní logov. Tieto hodnoty si môžete upraviť podľa kapacity úložiska a potrieb zaznamenávania logov.
Nginx protokoly
Nginx uchováva prístupové záznamy (záznamy o každom požiadavke) aj chybové záznamy (informácie o problémoch a zlyhaniach). Tieto záznamy sa zvyčajne ukladajú do /var/log/nginx/.
Prístupové protokoly môžete kontrolovať manuálne alebo vytvoriť podrobnú správu o prevádzke pomocou nástrojov ako goaccess:
sudo apt install goaccess
sudo goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINEDTáto príkaz vytvára interaktívnu HTML správu s metrikami o miestach návštevníkov, objeme návštevnosti a časoch odozvy.
Dobre spravované logy sú kľúčové pre identifikáciu výkonových úzkych miest, neúspešných požiadaviek alebo bezpečnostných anomálií skôr, ako ovplyvnia používateľov.
Správa zdrojov a ladenie Node.js
Aplikácie Node.js bežia podľa predvoleného nastavenia na jednom vlákne. Na využitie všetkých dostupných jadier CPU a zlepšenie súbežnosti môžete použiť klastrovanie a iné techniky správy procesov.
Použiť zhlukovanie
PM2 môže automaticky spustiť viacero procesov Node.js, aby využil viacjadrové CPU:
pm2 start app.js -i maxTento príkaz spustí toľko inštancií vašej aplikácie, koľko jadier CPU má váš server. PM2 bude riadiť vyrovnávanie záťaže a reštartovať procesy, ak zlyhajú.
Sledovať využitie pamäte a CPU
Pravidelne sledujte využívanie zdrojov vašej aplikácie, aby ste predišli únikom pamäte alebo nadmernému využívaniu CPU:
pm2 monitToto otvorí interaktívny panel zobrazenia s aktuálnymi metrikami pamäte a CPU pre každý proces.
Presuňte statické súbory na Nginx
Nechajte Nginx priamo servovať statické súbory namiesto ich presmerovania cez Node.js. To výrazne znižuje využitie CPU na strane Node.js a zabezpečuje rýchlejšie doručovanie uložených súborov do cache.
Konfigurácia prostredia
Použite premenné prostredia na dolaďovanie nastavení výkonu, ako je úroveň podrobnosti logov, limity rýchlosti API alebo doby cachovania. Správa konfigurácie pomocou premenných prostredia udržuje vašu aplikáciu flexibilnú a ľahšie škálovateľnú.
Monitorovanie a metriky
Po optimalizácii vášho produkčného prostredia je ďalším nevyhnutným krokom nastavenie efektívneho monitorovania a zberu metrík. Monitorovanie vám poskytuje prehľad o výkonnosti vašej aplikácie, využití zdrojov a stave systému. Pomáha vám včas odhaliť problémy, sledovať dlhodobé trendy a robiť rozhodnutia založené na údajoch.
Pozrime sa, ako môžete monitorovať svoju aplikáciu Node.js, webový server Nginx a systémové zdroje pomocou vstavaných nástrojov a externých služieb.
Prečo je monitorovanie dôležité
Vo výrobe každá sekunda hrá rolu. Bez monitorovania môžu problémy s výkonom alebo prerušenia služby zostať nepovšimnuté, až kým neovplyvnia používateľov. Monitorovanie vám pomáha:
- Rýchlo zistite poruchy a automaticky vás upozornite, keď nastanú.
- Analyzujte výkon systému pri rôznych zaťaženiach prenosu.
- Identifikujte pomalé koncové body, úzke miesta alebo úniky pamäte.
- Robte informované rozhodnutia o škálovaní a optimalizácii.
- Zabezpečte prevádzkovú dostupnosť a spoľahlivosť naprieč nasadeniami.
Dobre navrhnuté monitorovacie nastavenie zahŕňa monitorovanie v reálnom čase pre okamžité upozornenia a historické metriky pre analýzu výkonu v priebehu času.
Monitorovanie aplikácií Node.js pomocou PM2
PM2, správca procesov používaný na spustenie vašej aplikácie Node.js, obsahuje silné monitorovacie funkcie.
Monitorovanie v reálnom čase
Ak chcete získať prehľad o bežiacich procesoch, použite:
pm2 listToto zobrazuje všetky aktívne aplikácie spolu s ich stavom, uptime, využitím CPU a pamäte. Pre podrobnejší, živý pohľad použite:
pm2 monitToto otvorí interaktívny panel, ktorý zobrazuje kľúčové výkonnostné metriky, ako je využitie CPU a pamäte na proces. Sledovanie týchto metrík vám pomáha odhaliť vyčerpanie zdrojov, nekontrolované procesy alebo úniky pamäte.
Monitorovanie protokolov
PM2 tiež poskytuje centralizovanú správu logov. Ak chcete skontrolovať logy svojej aplikácie, spustite:
pm2 logsZáznamy pre konkrétnu aplikáciu si môžete pozrieť pomocou:
pm2 logs myappAk si všimnete časté reštarty, skontrolujte zoznam procesov PM2 pomocou:
pm2 statusUkáže, koľkokrát sa každý proces reštartoval, čo môže byť indikátorom chýb alebo havárií.
Pokročilé monitorovanie (PM2 Plus)
Pre väčšie nasadenia ponúka PM2 PM2 Plus, webovú dashboard, ktorá sleduje metriky ako využitie CPU, spotrebu pamäte a dobu prevádzky aplikácie na všetkých serveroch. Môžete nastaviť upozornenia pri prekročení hraníc a sledovať vývoj výkonu v priebehu času.
PM2 sa môže tiež integrovať s populárnymi monitorovacími systémami tretích strán, ako sú Datadog, New Relic a Prometheus, pre jednotný prehľad.
Monitoring Nginx
Nginx stojí na čele vašej produkčnej vrstvy a spravuje HTTP požiadavky a ukončenie SSL. Monitorovanie Nginx je nevyhnutné na pochopenie toho, ako používatelia interagujú s vaším systémom a ako efektívne sa požiadavky spracúvajú.
Prístupové a chybové záznamy
Nginx zaznamenáva každú požiadavku, ktorú spracuje, do prístupového záznamu, ktorý sa zvyčajne nachádza na:
/var/log/nginx/access.logChyby sú zaznamenávané samostatne v:
/var/log/nginx/error.logTieto záznamy si môžete prezerať v reálnom čase:
sudo tail -f /var/log/nginx/access.logZáznamy prístupu obsahujú cenné informácie, ako sú IP adresy klientov, doby odozvy, stavové kódy a používateľské agenti. Tieto záznamy sú užitočné pri identifikovaní vzorcov, ako je vysoká latencia, časté chyby 404 alebo abnormálne objemy požiadaviek.
Pre zhrnutú a vizuálnu správu môžete použiť goaccess. Vytvára interaktívny panel, ktorý zvýrazňuje zdroje návštevnosti, populárne koncové body a rozdelenie odpovedí.
Povoliť stránku stavu Nginx
Nginx obsahuje ľahký modul stub_status, ktorý zobrazuje aktuálne metriky servera, ako sú aktuálne pripojenia a počet požiadaviek. Do konfigurácie Nginx pridajte nasledujúci blok:
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}Po reštartovaní Nginx môžete zobraziť metriky návštevou:
http://localhost/nginx_statusTieto metriky je možné integrovať do monitorovacích panelov alebo použiť na automatické upozornenia.
Zber aplikačných metrík v Node.js
Pre podrobnejšie sledovanie na úrovni aplikácie môžete zhromažďovať vlastné metriky priamo z vašej aplikácie Node.js. Tieto metriky môžu sledovať časy odozvy API, počet požiadaviek alebo trvanie dotazov do databázy.
Spustite nasledujúci príkaz na inštaláciu knižnice klienta Prometheus:
npm install prom-client expressPridajte do svojej aplikácie endpoint /metrics:
const express = require('express');
const client = require('prom-client');
const app = express();
client.collectDefaultMetrics({ timeout: 5000 });
app.get('/metrics', async (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(await client.register.metrics());
});
app.listen(3000, () => {
console.log('Metrics available at /metrics');
});Tento koncový bod môžete pripojiť k Prometheus alebo Grafana, aby ste vizualizovali metriky ako oneskorenie požiadaviek, využitie pamäte a výkon správy odpadu.
Monitorovanie na úrovni systému
Okrem monitorovania aplikácií sledujte aj celkový výkon servera. Linux poskytuje niekoľko nástrojov na tento účel:
- htop alebo top: Zobrazuje aktuálne využitie CPU a pamäte.
- iostat: Sleduje operácie vstupu/výstupu na disku.
- netstat alebo ss: Zobrazuje otvorené sieťové pripojenia.
- vmstat: Sleduje procesy, pamäť a štatistiky vstupu/výstupu.
Sledovanie systému môžete automatizovať pomocou nástrojov, ako sú Netdata, Glances alebo Grafana Agent, ktoré zhromažďujú metriky naprieč vašou infraštruktúrou a vizualizujú ich na paneloch.
Bežné chyby, riešenie problémov a najlepšie postupy
Aj dobre nakonfigurované produkčné prostredie môže občas naraziť na problémy. Pochopenie toho, ako tieto problémy identifikovať, diagnostikovať a vyriešiť, je kľúčové pre udržanie spoľahlivosti a minimalizáciu výpadkov. Táto časť poskytuje podrobné kroky riešenia problémov pri bežných chybách a načrtáva osvedčené postupy, ktoré vám pomôžu udržať vaše prostredie Node.js stabilné, zabezpečené a udržateľné dlhodobo.
Bežné chyby a opravy
1. Aplikácia sa nedá spustiť s PM2
Príčina: Nesprávne cesty k súborom, chýbajúce závislosti alebo nesprávne nakonfigurované premenné prostredia.
Riešenie: Skontrolujte logy pomocou:
pm2 logsOverte, či je v konfigurácii PM2 použitá správna cesta k súboru. V prípade potreby preinštalujte závislosti:
npm install --productionTiež overte, či sú požadované premenné prostredia správne načítané zo súboru
.envalebo z vášho súboru ekosystému.
2. Chyba: port je už používaný
Príčina: Iný proces už počúva na rovnakom porte.
Riešenie: Identifikujte a zastavte konfliktný proces:
sudo lsof -i :3000 sudo kill -9 <PID>Alternatívne zmeňte port svojej aplikácie v súbore
.envalebo v konfigurácii ekosystému.
3. Nginx 502 Zlá brána
Príčina: Nginx sa nemôže pripojiť k aplikácii Node.js, zvyčajne preto, že aplikácia spadla, zastavila sa alebo je viazaná na iný port.
Riešenie: Reštartujte aplikáciu Node.js a znovu načítajte Nginx:
pm2 restart all sudo systemctl reload nginxUistite sa, že hodnota
proxy_passv Nginx zodpovedá adrese, na ktorej vaša aplikácia Node.js počúva (napríkladhttp://localhost:3000).
4. Chyby odmietnutého povolenia
Príčina: Používateľ aplikácie nemá povolenie čítať alebo zapisovať určité súbory alebo adresáre.
Riešenie: Nastavte správne vlastníctvo a oprávnenia:
sudo chown -R $USER:$USER /var/www/myapp sudo chmod -R 755 /var/www/myappVyhnite sa spúšťaniu Node.js alebo PM2 ako používateľ root.
5. Zlyhanie obnovenia Certbotu
Príčina: Problémy s DNS, expirované certifikáty alebo nesprávna konfigurácia Nginx.
Riešenie: Overte, či DNS záznamy smerujú na váš server a otestujte obnovenie:
sudo certbot renew --dry-runAk obnovenie zlyhá, skontrolujte konfiguráciu Nginx kvôli syntaktickým chybám:
sudo nginx -tMôžete si tiež skontrolovať protokoly Certbotu v
/var/log/letsencrypt/pre podrobné chyby.
6. Firewall blokuje prístup
Príčina: Pravidlá UFW zabraňujú prichádzajúcim pripojeniam cez HTTP alebo HTTPS.
Riešenie: Uistite sa, že je povolená prevádzka Nginx a firewall je aktívny:
sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status
Riešenie problémov v pracovnom postupe
Keď nastanú problémy, riaďte sa štruktúrovaným postupom:
Skontrolujte záznamy: Najprv si prejdite záznamy PM2, Nginx a systému, pretože väčšina problémov tu zanecháva sledovateľné chyby.
Overiť služby: Skontrolujte, či Node.js, PM2 a Nginx bežia a sú povolené pri spustení:
pm2 status systemctl status nginxOveriť konfiguračné súbory: Spustite kontrolu syntaxe pred reštartovaním služieb:
sudo nginx -tPre súbory ekosystému PM2 skontrolujte formátovanie JSON alebo JavaScriptu.
Skontrolujte priradenie portu: Overte, že vaša aplikácia počúva na očakávanom porte:
sudo netstat -tulnp | grep nodeSledujte systémové zdroje: Použite nástroje ako
htopalebopm2 monitna kontrolu využitia CPU, pamäte a disku. Preťažené servery môžu spôsobiť pomalé reakcie alebo pády.Otestujte pripojenie: Použite
curlna simuláciu požiadaviek a overte, či vaše koncové body reagujú správne:curl http://localhost:3000
Najlepšie postupy pre stabilitu, bezpečnosť a údržbu
Dodržiavanie osvedčených postupov zabezpečuje, že vaša aplikácia zostane spoľahlivá, bezpečná a ľahko udržiavateľná, keď bude rásť.
Najlepšie bezpečnostné postupy
Udržiavajte systém aktuálny: Pravidelne aktualizujte balíky Node.js, PM2, Nginx a Ubuntu pomocou:
sudo apt update && sudo apt upgrade -yTýmto sa zabezpečuje, že bezpečnostné záplaty a zlepšenia výkonu sú aplikované.
Používajte HTTPS všade: Vždy vynucujte HTTPS cez presmerovania v Nginx a automatické obnovovanie certifikátov pomocou Certbotu.
Obmedzte prístup cez SSH: Použite autentifikáciu na základe kľúčov, zakážte prihlásenie ako root a obmedzte SSH na známe IP adresy.
Spustiť ako používateľ bez práv root: Použite vyhradeného používateľa aplikácie na obmedzenie oprávnení v prípade narušenia zabezpečenia.
Skrývať stopy zásobníka a detaily chýb: Nikdy nezverejňujte podrobné chybové hlásenia používateľom. Nastavte Express alebo iné frameworky tak, aby chyby spracovávali elegantne.
Pravidelne kontrolujte závislosti: Spustite:
npm audita aktualizovať alebo nahradiť zraniteľné balíky.
Výkon a správa zdrojov
Povoliť zhlukovanie: Použite PM2 na spustenie viacerých inštancií Node.js na dostupných jadrách CPU:
pm2 start app.js -i maxEfektívne využívajte cache: Implementujte cache vrstvy (ako napríklad Redis alebo in-memory cache) pre často pristupované údaje.
Pravidelne monitorujte: Nastavte si panely s PM2 Plus, Grafana alebo Prometheus, aby ste sledovali trendy výkonnosti.
Optimalizujte záznamy: Povoliť rotáciu záznamov, aby sa zabránilo nadmernému využívaniu disku a uchovávali sa iba relevantné údaje.
Komprimovať odpovede: V Nginx majte povolenú kompresiu gzip alebo Brotli pre rýchlejšie doručovanie.
Údržba a prevádzka
- Automatizujte zálohovanie: Naplánujte zálohy pre údaje vašej aplikácie, konfiguračné súbory a SSL certifikáty.
- Používajte verzionovanie: Ukladajte konfigurácie a skripty do Git repozitára, aby ste mohli sledovať zmeny v priebehu času.
- Dokumentujte svoje prostredie: Vedenie podrobnej dokumentácie o vašom nastavení, portoch, premenných prostredia a krokoch nasadenia.
- Používajte testovacie prostredia: Testujte aktualizácie a zmeny konfigurácie na testovacom serveri pred ich nasadením do produkcie.
- Prevádzka monitoru: Používajte externé nástroje na sledovanie prevádzky, ako sú UptimeRobot, Pingdom alebo StatusCake, aby ste rýchlo zistili výpadky.
- Plán na škálovanie: S rastúcou návštevnosťou zvážte horizontálne škálovanie pomocou vyrovnávačov záťaže alebo nástrojov na orchestráciu kontajnerov ako Docker a Kubernetes.
- Naplánujte pravidelné audity: Pravidelne kontrolujte bezpečnostné nastavenia, výkonnostné metriky a súlad konfigurácie naprieč prostrediami.
Proaktívna stratégia údržby, spojená s neustálym monitorovaním a prísnym dodržiavaním bezpečnostných zásad, pomáha zabezpečiť, aby vaša aplikácia Node.js zostala vo výkonnom, spoľahlivom a odolnom stave v produkcii.
Často kladené otázky
1. Ako nasadiť aplikáciu Node.js do produkcie na Ubuntu?
Na nasadenie aplikácie pripravené na produkciu dodržiavajte tento štandardný pracovný postup. Vyhnite sa spúšťaniu aplikácie pomocou node index.js priamo v terminálovej relácii, pretože sa zastaví, ak sa relácia zatvorí.
Tu je všeobecný pracovný postup:
Aktualizácia systému: Spustite
sudo apt update && sudo apt upgrade.Vytvorte používateľa bez práv root: Nikdy nespúšťajte svoju aplikáciu ako
root. Vytvorte samostatného používateľa (napr.deploy).Nainštalujte Node.js: Použite binárne distribúcie NodeSource pre najnovšiu LTS verziu (nepoužívajte predvolenú verziu
aptv Ubuntu, pretože často býva zastaraná).curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - sudo apt-get install -y nodejsKlonovať a nainštalovať: Klonujte svoj repozitár obsahujúci Node.js aplikáciu, prejdite do adresára a spustite
npm ci(čistá inštalácia) namiestonpm install, aby ste zabezpečili presné verzie závislostí.Premenné prostredia: Vytvorte súbor
.envpre tajné údaje (reťazce DB, API kľúče).Začnite s manažérom procesov: Namiesto spustenia
node index.js(ktoré sa zastaví po zatvorení terminálu) použite PM2 na spustenie aplikácie ako démon:sudo npm install -g pm2 pm2 start app.js --name "my-production-app"Zabezpečte pretrvávajúce spustenie: Povedzte serveru, aby obnovil túto aplikáciu, ak sa server reštartuje:
- Vygenerujte spúšťací skript: Najprv požiadajte PM2, aby vygeneroval spúšťací príkaz pre váš konkrétny operačný systém (Ubuntu používa
systemd).
- Vygenerujte spúšťací skript: Najprv požiadajte PM2, aby vygeneroval spúšťací príkaz pre váš konkrétny operačný systém (Ubuntu používa
Spustite vygenerovaný príkaz: Skopírujte a vložte príkaz, ktorý PM2 zobrazí, do vášho terminálu. Bude vyzerať približne takto:
sudo env PATH=` PATH:/home/sammy/.nvm/versions/node/v24.11.1/bin /home/sammy/.nvm/versions/node/v24.11.1/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammyZamraziť zoznam procesov: Keď je systém spustenia aktívny, uložte si aktuálne bežiace procesy, aby si ich PM2 zapamätal pri reštarte.
pm2 startuppm2 save2. Aký je najlepší spôsob, ako spravovať procesy Node.js na VPS?
Priemyselným štandardom pre správu Node.js procesov na virtuálnom súkromnom serveri (VPS) je PM2.
Hoci môžete použiť systemd priamo, PM2 ponúka funkcie špeciálne navrhnuté pre Node.js, ktoré bežné správcovské služby neponúkajú, ako napríklad:
- Automatické reštartovanie: Znovu spustí aplikáciu, ak zlyhá.
- Režim clustera: Využíva všetky jadrá procesora bez zmeny vášho kódu.
- Sledovanie: Vstavané príkazy na kontrolu využitia RAM/CPU (
pm2 monit). - Správa protokolov: Automaticky rotuje protokoly, aby sa predišlo preťaženiu disku.
3. Mal by som použiť PM2 alebo systemd pre Node.js v produkcii?
Najlepšou praxou je používať obe.
Mali by ste použiť PM2 na správu aplikácie a Systemd na správu PM2. Ak použijete iba PM2, vaša aplikácia zmizne po reštarte servera.
Ako ich skombinovať:
- Spustite svoju aplikáciu s PM2:
pm2 start app.js - Vygenerujte štartovací skript pre systemd:
pm2 startup - Spustite príkaz, ktorý PM2 vypíše (týmto sa povie Ubuntu
systemd, aby spustil PM2 pri štarte). - Zmrazte zoznam procesov:
pm2 save
4. Ako používať Nginx ako reverzný proxy server pre Node.js?
Node.js je vynikajúci pri spracovaní aplikačnej logiky, ale v porovnaní s Nginx je slabý pri spracovaní SSL, statických súborov a vyrovnávania záťaže.
Nastavenie:
- Nainštalujte Nginx:
sudo apt install nginx. - Nakonfigurujte Nginx tak, aby počúval na porte 80 a presmerovával prevádzku do vašej Node aplikácie (zvyčajne bežiacej na
localhost:3000).
Príklad konfigurácie (/etc/nginx/sites-available/default):
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost:3000; # Forward to Node
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 uložení otestujte konfiguráciu pomocou sudo nginx -t a reštartujte Nginx.
5. Ako povolím HTTPS pre Node.js s Nginx?
Nepoužívajte HTTPS priamo vo svojej Node.js aplikácii. Nechajte šifrovanie/dešifrovanie riešiť Nginx (SSL ukončenie).
Najjednoduchšia metóda (Certbot):
Nainštalujte Certbot:
sudo apt install certbot python3-certbot-nginxSpustite automatický generátor:
sudo certbot --nginx -d your_domain.comCertbot automaticky upraví váš konfiguračný súbor Nginx, aby povolil HTTPS, a nastaví úlohu cron na automatické obnovenie certifikátu.
6. Ako môžem zabezpečiť svoju aplikáciu Node.js na Ubuntu?
Bezpečnosť si vyžaduje viacvrstvový prístup.
Úroveň operačného systému:
UFW firewall: Povoliť firewall a povoliť len potrebné porty.
sudo ufw allow ssh sudo ufw allow 'Nginx Full' sudo ufw enable
Spevnenie SSH: Zakážte prihlasovanie pomocou hesla a používajte iba SSH kľúče.
Úroveň aplikácie:
- Spustiť ako ne-root: Ako bolo spomenuté v Q1, ak útočník získa kontrolu nad root procesom, vlastní server.
npm install helmet) do svojej aplikácie, aby sa automaticky nastavovali bezpečné HTTP hlavičky.localhost (127.0.0.1), aby nebola priamo prístupná z internetu a doprava bola nútená cez Nginx.Zhrnutie
Teraz ste nastavili kompletné produkčné prostredie pre vašu aplikáciu Node.js na Ubuntu. S Node.js bežiacim pod PM2, Nginxom riadiacim webovú prevádzku, SSL šifrovaním od Let's Encrypt a sieťovou ochranou UFW je váš server stabilný, bezpečný a pripravený na reálne používanie. Pridaním cache, kompresie a správneho monitorovania ste vybudovali systém, ktorý dobre funguje a je jednoducho udržiavateľný. Toto nastavenie vám poskytuje pevný základ pre rozvoj vašej aplikácie, či už ide o škálovanie naprieč servermi, automatizáciu nasadzovania alebo pridávanie pokročilejších nástrojov v budúcnosti.
Pre viac tutoriálov o Node.js si pozrite nasledujúce články:
- Ako nainštalovať Node.js na Ubuntu (návod krok za krokom)
- Ako používať PostgreSQL s Node.js na Ubuntu 20.04
Ďakujeme, že sa učíte s komunitou Linux-Console.net.