Ako nasadiť aplikáciu NestJS s Nginx na Ubuntu VPS


Zavedenie

Moderné webové aplikácie sa spoliehajú na pevný a bezpečný backend. Preto je nevyhnutné vytvárať backendové aplikácie, ktoré sú škálovateľné, bezpečné a architektonicky sofistikované, aby ich mohli spravovať malé a/alebo veľké tímy vývojárov.

Moderní vývojári uprednostňujú používanie JavaScriptu na prednej aj zadnej strane. Express.js je vynikajúci backendový framework JavaScriptu, ktorý používa väčšina vývojárov. Jeho minimálna architektúra ho však robí nevhodným pre škálovateľnosť a udržiavateľnosť veľkými tímami. Tu prichádza na rad Nest.js. Nest.js má vstavanú architektúru, vďaka čomu je veľmi vhodný na škálovateľnosť a nasadenie. Vďaka svojej natívnej podpore TypeScriptu je pre vývojárov produktívnejší ako vanilkový JavaScript.

V tomto návode sa dozviete, ako nasadiť aplikáciu NestJS pomocou webového servera Nginx na VPS. Dozviete sa, ako môžete umiestniť svoju aplikáciu na web s požadovaným zabezpečením.

Predpoklady

Pred pokračovaním v tutoriále musíte splniť nasledujúce požiadavky:

  • Ubuntu 20.04+ VPS alebo fyzický počítač Ubuntu. (V tomto návode budeme používať Ubuntu 22.04 na VPS)
  • Node.js a správca balíkov npm (alebo priadze). Môžete si pozrieť tento návod na Ako nainštalovať Node.js na Ubuntu a nainštalovať najnovšie verzie Node.js a npm do machine._
  • Webový server Nginx. Použite túto vynikajúcu príručku o tom, ako nainštalovať Nginx na Ubuntu na inštaláciu Nginx do vášho systému Ubuntu.

Krok 1 – Príprava a nasadenie aplikácie NestJS

V tejto časti nainštalujete NestJS CLI a vytvoríte základnú aplikáciu NestJS, ktorú sa naučíte nasadiť pomocou Nginx v nasledujúcich častiach.

Globálna inštalácia NestJS CLI

Ak chcete nainštalovať NestJS CLI do svojho počítača Ubuntu, otvorte terminál a zadajte nasledujúci príkaz.

npm i -g @nestjs/cli

Tým sa do vášho počítača nainštaluje rozhranie príkazového riadka NestJS. Ďalej sa naučíte vytvoriť nový projekt NestJS.

Vytvorenie nového projektu NestJS

Teraz NestJS poskytuje dva spôsoby, ako začať nový projekt. Môžete si vybrať metódu, ktorá vám najviac vyhovuje.

Používanie rozhrania NestJS CLI

Zadajte nasledujúci príkaz na vytvorenie projektu NestJS pomocou CLI.

nest new <project-name>
? Which package manager would you ❤️  to use? (Use arrow keys)
❯ npm 
  yarn 
  pnpm

Po dokončení by ste dostali výstup ako sledovanie.

CREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)

Tým sa vytvorí nový projekt v súčasnom pracovnom adresári. Môžete zadať aj absolútnu cestu pre iný adresár namiesto <názvu projektu>.

Klonovanie štartovacej šablóny

NestJS poskytuje alternatívny spôsob spustenia nového projektu. Je to úložisko git, ktoré slúži ako štandardná šablóna. Toto úložisko môžete naklonovať a spustiť projekt pomocou nasledujúcich príkazov.

git clone https://github.com/nestjs/typescript-starter.git <project-directory >

Po dokončení klonovania je potrebné disk CD do adresára projektu a potom spustiť npm install na inštaláciu závislostí z package.json

cd <project-directory>
npm install

Keď je projekt pripravený, môžete spustiť aplikačný server pomocou nasledujúceho príkazu:

npm run start

Aplikácia sa spustí na http://localhost:3000. Teraz máte základnú aplikáciu NestJS pripravenú na spustenie na localhost.

Testovanie aplikácie

Po vývoji aplikácie na nej môžete spustiť testy a skontrolovať, či aplikácia beží podľa očakávania alebo nie. NestJS poskytuje predvolené testy Jest, ktoré spúšťajú testy vo vašej aplikácii. Test môžete spustiť pomocou nasledujúceho príkazu:

npm run test

Tým sa otestuje vaša žiadosť a vrátia sa výsledky podobné nasledujúcim:

> node_app@0.0.1 test
> jest
PASS  src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.895 s
Ran all test suites.

V nasledujúcej časti sa dozviete, ako nasadiť túto aplikáciu NestJS na váš webový server pomocou Nginx ako reverzného proxy.

Krok 2 - Nastavenie Nginx na obsluhu aplikácie NestJS

Teraz môžeme pokračovať v nastavení webového servera na hosťovanie tejto aplikácie NestJS. Použijeme prístup reverzného zástupcu. Pri tomto prístupe spustíme našu aplikáciu na localhost na určitom porte a potom použijeme server Nginx na proxy akékoľvek požiadavky na verejnú IP adresu VPS alebo doménu do aplikácie na localhost. Používanie reverzných proxy serverov je priemyselnou praxou, pretože zvyšuje bezpečnosť webového servera vytvorením bariéry medzi prichádzajúcimi požiadavkami a samotnou backendovou aplikáciou. Reverzné proxy servery tiež umožňujú lepšie riadenie zaťaženia servera, najmä ak server používate na hosťovanie viacerých webových aplikácií.

Začneme inštaláciou správcu balíkov pm2, ktorý bude spravovať aplikáciu za behu.

Inštalácia správcu procesov pm2

Správcu procesov pm2 môžete nainštalovať pomocou nasledujúceho príkazu.

npm install -g pm2

Tým sa pm2 nainštaluje globálne do vášho počítača.

Vytvorenie konfigurácie Nginx pre aplikáciu NestJS

Teraz nakonfigurujte Nginx na spustenie aplikácie. Uistite sa, že ste vo svojej bráne firewall povolili aplikáciu Nginx pre HTTP aj HTTPS, ako je uvedené v návode na požadované požiadavky. Ak používate bránu firewall ufw, môžete to urobiť podľa príkazov.

ufw enable
ufw allow ‘Nginx Full‘

Teraz vytvoríte konfiguračný blok pre našu aplikáciu NestJS. Odporúča sa vytvoriť nové konfiguračné bloky pre nové aplikácie namiesto úpravy predvolenej konfigurácie. Ak chcete vytvoriť blok, zadajte do terminálu nasledujúci kód.

sudo nano /etc/nginx/sites-available/your_domain

Tu sme použili your_domain pre aplikáciu, ale zmeníte to na názov vašej aplikácie. Potom do editora zadajte nasledujúci kód:

server {
  server_name your_domain www.your_domain;
    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;
    }
}

Teraz vytvoríte symbolický odkaz, ktorý povie Nginx, aby vyhľadal dostupné webové aplikácie v priečinku sites-available:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Tiež by ste museli zakázať predvolený symbolický odkaz, inak nginx presmeruje všetky požiadavky na predvolenú stránku. Pomocou nasledujúceho príkazu ho odpojte.

sudo unlink /etc/nginx/sites-enabled/default

Teraz reštartujte službu Nginx pomocou nasledujúceho príkazu.

sudo systemctl restart nginx

Nasadenie aplikácie NestJS pomocou Nginx

Teraz nastavíte správcu balíkov pm2 tak, aby zvládol spustenie vašej aplikácie NestJS. Zmeňte pracovný adresár na adresár aplikácie Nestjs a zadajte nasledujúci príkaz.

pm2 start npm --name "your_domain" –- start

Nasledujúci príkaz môžete spustiť na konfiguráciu pm2 pri reštarte servera.

pm2 startup

Keď skončíte s nastavením aplikácie na pm2, pokračujte a uložte zoznam procesov pm2 s nasledujúcim:

pm2 save

Teraz sme nastavili webovú aplikáciu tak, aby sa spúšťala pri spustení, a nakonfigurovali sme Nginx tak, aby reverzoval proxy k našej aplikácii bežiacej na localhost.

Testovanie webovej aplikácie

Webovú aplikáciu môžete otestovať z konzoly zadaním nasledujúceho príkazu.

curl http://localhost

Keďže sme nastavili reverzný proxy server na samotnej IP adrese servera, akákoľvek požiadavka na verejnú IP adresu na váš server, doménu alebo požiadavka na localhost zo servera bude presmerovaná na your_domain aplikácie NestsJS.

Hello World!

V ďalšej časti sa naučíte pridať do svojej aplikácie SSL, ktorý vám umožní používať protokol HTTPS pre vaše požiadavky.

Krok 3 - Pridanie SSL pomocou Let's Encrypt (voliteľné)

Doteraz ste sa naučili, ako nasadiť plne funkčnú aplikáciu NestJS so serverom Nginx. Toto nasadenie však používa protokol HTTP, ktorý sa v produkcii neodporúča z dôvodu jeho zraniteľnosti zneužitia. Preto by ste chceli prejsť na protokol HTTPS, čo je šifrovaná verzia HTTP. HTTPS používa certifikáty SSL/TLS poskytované certifikačnou autoritou. Tieto certifikáty sú špecifické pre webovú stránku a šifrujú komunikáciu medzi klientom a serverom.

V tejto časti sa dozviete, ako pridať certifikát Let's Encrypt SSL/TLS pre váš web.

Poznámka: Ak chcete pokračovať v tejto časti, musíte mať certifikát A pre svoju doménu. V tomto príklade sme použili your_domain, ale SSL certifikáty by ste mali pridať až po pridaní domény na web.

Inštalácia Certbot CLI Let's Encrypt

Let's Encrypt poskytuje CLI na správu a automatizáciu certifikátov SSL pre spotrebiteľov. Nástroj môžete nainštalovať pomocou nasledujúceho príkazu:

sudo apt install certbot python3-certbot-nginx

Tým sa nainštaluje klient certbot na váš Ubuntu VPS.

Načítanie SSL/TLS certifikátov pre vašu doménu

Teraz môžete načítať certifikáty SSL pre svoju doménu pomocou nasledujúceho príkazu

sudo certbot --nginx -d <your_domain> -d <www.your_domain>

Budete musieť nahradiť your_domain skutočným názvom vašej domény. Ak na svojom VPS spúšťate certbota prvýkrát, požiadame vás o zadanie e-mailu a súhlas s podmienkami používania. Poskytnite potrebné informácie a pokračujte.

nota:\nBude to fungovať iba v prípade, že máte legitímnu doménu a priradili ste ju k aplikácii NestJS.

Po nainštalovaní certifikátov budete môcť presmerovať všetky požiadavky na HTTPS. Odporúča sa, aby ste presmerovali všetky požiadavky, aby ste zaistili integritu svojej webovej stránky.

informácia:\nCertifikáty nainštalované certbotom majú dobu platnosti 90 dní. Certbot však obnovu týchto certifikátov automatizuje sám, takže ich platnosť nemusíte často kontrolovať.

Záver

V tomto návode ste sa naučili, ako nasadiť aplikáciu NestJS v produkcii na Ubuntu VPS pomocou webového servera Nginx. Naučili ste sa tiež, ako nastaviť projekt NestJS a reverzný proxy server pre vašu aplikáciu pomocou Nginx. Nakoniec ste sa naučili, ako pridať SSL/TLS certifikáty pre doménu vášho servera, čím sa zabezpečí integrita komunikácie medzi vašimi klientmi a serverom.

Tieto znalosti môžete rozšíriť vytváraním komplexných aplikácií NestJS, vrátane, ale nie výlučne, integrácie databáz, validátorov vstupov atď.

Autor si vybral nadáciu OWASP na získanie daru v rámci programu Write for DOnations.

Súvisiace články: