Słów kilka o wprowadzeniu
NestJS, bazujący na Node.js framework JavaScript, implementuje architekturę Model-View-Controller (MVC). Jest doskonałym narzędziem do tworzenia efektywnych, skalowalnych i łatwo testowalnych aplikacji po stronie serwera. Z kolei Nginx, będący open-source’owym serwerem WWW, gwarantuje wysoką przepustowość, stabilność oraz bezpieczeństwo działania.
W tym przewodniku omówimy szczegółowo proces umieszczania aplikacji NestJS na serwerze VPS Ubuntu, wykorzystując do tego Nginx.
Przygotowanie środowiska
Niezbędne elementy:
- Serwer VPS z systemem Ubuntu 20.04
- Zainstalowane Node.js w wersji 16 lub nowszej
- Opcjonalnie – serwer bazy danych MongoDB
- Dowolny edytor tekstu
Konfiguracja serwera kro po kroku
1. Logowanie do serwera
Zaloguj się do serwera VPS Ubuntu jako administrator (root) za pomocą protokołu SSH:
ssh root@twoj_adres_ip
2. Aktualizacja systemu
Upewnij się, że system operacyjny serwera jest aktualny:
sudo apt update && sudo apt upgrade
Instalacja Node.js oraz NestJS
1. Instalacja środowiska Node.js
Dodaj repozytorium NodeSource do systemu:
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
Zainstaluj Node.js za pomocą menadżera pakietów:
sudo apt install nodejs
2. Instalacja NestJS CLI (globalnie)
Zainstaluj interfejs wiersza poleceń NestJS globalnie, aby móc tworzyć projekty:
npm install -g @nestjs/cli
Tworzenie projektu NestJS
1. Inicjalizacja nowego projektu
Utwórz folder dla projektu i przejdź do niego:
mkdir moj-projekt-nest
cd moj-projekt-nest
Wygeneruj nowy projekt NestJS, wykorzystując CLI:
nest new moj-projekt
2. Instalacja zależności projektu
Wejdź do folderu projektu:
cd moj-projekt
Zainstaluj potrzebne zależności, korzystając z npm:
npm install
Konfiguracja bazy danych (opcjonalnie)
Jeżeli twoja aplikacja NestJS korzysta z bazy danych, np. MongoDB, wykonaj poniższe instrukcje:
1. Instalacja MongoDB
Dodaj repozytorium MongoDB do systemu:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt update
sudo apt install -y mongodb-org
2. Uruchomienie MongoDB
Włącz oraz skonfiguruj automatyczne uruchamianie usługi MongoDB:
sudo systemctl start mongod
sudo systemctl enable mongod
3. Konfiguracja połączenia w NestJS
Zmodyfikuj plik app.module.ts
, aby umożliwić połączenie z bazą MongoDB:
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/moja-baza-danych'),
],
})
export class AppModule {}
Konfiguracja serwera Nginx
1. Instalacja Nginx
Zainstaluj Nginx, popularny serwer WWW:
sudo apt install nginx
2. Konfiguracja bloku serwera Nginx
Utwórz nowy plik konfiguracyjny bloku serwera:
sudo nano /etc/nginx/sites-available/mojaplikacja.conf
Wklej poniższą konfigurację, zmieniając twojadomena.pl
na adres swojej domeny:
server {
listen 80;
server_name twojadomena.pl;
location / {
proxy_pass http://localhost:3000;
}
}
3. Włączenie bloku serwera
Aktywuj nowo utworzony blok serwera:
sudo ln -s /etc/nginx/sites-available/mojaplikacja.conf /etc/nginx/sites-enabled/
4. Testowanie i restart Nginx
Sprawdź poprawność konfiguracji:
sudo nginx -t
Jeżeli nie występują błędy, zrestartuj Nginx:
sudo systemctl restart nginx
Proces wdrażania aplikacji
1. Kompilacja aplikacji NestJS
Przygotuj aplikację do środowiska produkcyjnego:
npm run build
2. Kopiowanie skompilowanej aplikacji
Przenieś skompilowane pliki do katalogu, z którego korzysta Nginx:
sudo cp -r dist/* /usr/share/nginx/html/
3. Weryfikacja działania aplikacji
Przejdź do swojej domeny w przeglądarce, aby upewnić się, że aplikacja działa poprawnie.
Zabezpieczenie połączenia za pomocą SSL (opcjonalnie)
Zabezpieczenie transmisji danych za pomocą certyfikatu SSL:
1. Generowanie klucza prywatnego
Utwórz klucz prywatny RSA (2048 bitów):
openssl genrsa -out cert.key 2048
2. Utworzenie CSR
Wygeneruj żądanie podpisania certyfikatu (CSR), które należy przekazać do urzędu certyfikacji:
openssl req -new -key cert.key -out cert.csr
3. Uzyskanie certyfikatu SSL
Wyślij CSR do CA, aby uzyskać certyfikat, który zapisz jako cert.pem
.
4. Konfiguracja Nginx
Dodaj następujące ustawienia do konfiguracji bloku serwera Nginx:
server {
listen 443 ssl;
server_name twojadomena.pl;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
location / {
proxy_pass http://localhost:3000;
}
}
Zrestartuj Nginx, aby zmiany zaczęły obowiązywać:
sudo systemctl restart nginx
Wykorzystanie PM2 (opcjonalnie)
PM2 to menedżer procesów Node.js, który umożliwia uruchomienie aplikacji w tle oraz zarządzanie nią:
1. Instalacja PM2
Zainstaluj PM2 globalnie:
npm install -g pm2
2. Uruchomienie aplikacji za pomocą PM2
Wejdź do katalogu aplikacji i uruchom ją przy pomocy PM2:
cd moj-projekt
pm2 start npm --name mojaaplikacja -- run start
Odwrotne serwery proxy (opcjonalnie)
Wdrożenie odwrotnych serwerów proxy, takich jak Apache lub HAProxy, może być pomocne przy rozdzielaniu ruchu na kilka serwerów:
1. Konfiguracja Apache (odwrotny serwer proxy)
Konfiguracja serwera Apache jako odwrotnego serwera proxy nie jest omówiona w tym artykule. Szczegóły znajdziesz w dokumentacji Apache.
2. Konfiguracja HAProxy (odwrotny serwer proxy)
Podobnie, konfiguracja HAProxy jako odwrotnego serwera proxy wykracza poza zakres niniejszego poradnika. Zapraszamy do zapoznania się z dokumentacją HAProxy.
Podsumowanie
W tym artykule szczegółowo przedstawiliśmy proces wdrożenia aplikacji NestJS z wykorzystaniem serwera Nginx na platformie VPS Ubuntu. Opisaliśmy wszystkie kroki, od przygotowania serwera, poprzez instalację potrzebnego oprogramowania, po konfigurację i wdrożenie aplikacji. Dzięki tym wskazówkom będziesz w stanie stworzyć wydajną i skalowalną platformę dla swojej aplikacji.
Korzyści z wdrożenia NestJS z Nginx:
- Wysoka wydajność: Nginx cechuje się wysoką efektywnością i zdolnością do obsługi dużego ruchu.
- Skalowalność: Nginx można łatwo dostosować do rosnącego obciążenia serwera.
- Bezpieczeństwo: Nginx oferuje wiele opcji zwiększających bezpieczeństwo aplikacji.