Tworzenie i uruchamianie projektu NestJS lokalnie na macOS z użyciem ServBay
NestJS to progresywny framework Node.js do budowy wydajnych i skalowalnych aplikacji serwerowych Node.js. Jest napisany w TypeScript i, inspirowany Angular, wykorzystuje architekturę modułową oraz wzorzec wstrzykiwania zależności (DI). NestJS udostępnia rozbudowane narzędzia, aby ułatwić programistom tworzenie złożonych aplikacji — łatwych w utrzymaniu, testowaniu oraz wysoce odseparowanych.
Najważniejsze cechy i zalety NestJS
- Architektura modułowa: Kod organizowany jest w moduły, co czyni aplikację bardziej czytelną, ustrukturyzowaną i łatwiejszą do zarządzania.
- Wstrzykiwanie zależności: Potężny, intuicyjny system DI znacznie zwiększa testowalność i utrzymanie kodu.
- Wykorzystanie TypeScript: Korzysta z typowania statycznego, interfejsów oraz nowoczesnych funkcji JavaScriptu, zwiększając efektywność i jakość kodu, zmniejszając liczbę błędów w czasie działania.
- Rozbudowane dekoratory: Dekoratory pozwalają definiować kontrolery, serwisy, moduły itd., dzięki czemu kod jest zwięzły, deklaratywny i przejrzysty.
- Bogaty ekosystem: Aktywna społeczność, mnóstwo gotowych modułów i pluginów — łatwa integracja z TypeORM, Mongoose, GraphQL, WebSockets, cache’owaniem, walidacją i innymi funkcjami.
- Oparty o standardy: Bazuje na dojrzałych frameworkach HTTP takich jak Express czy Fastify, oferując wysoką wydajność i kompatybilność.
Korzystając z NestJS, programista może wdrażać najlepsze praktyki backendowe (np. zasady SOLID, wzorce projektowe), by szybko budować wydajne, enterprise'owe aplikacje webowe, API oraz mikrousługi.
Tworzenie i uruchamianie projektu NestJS z ServBay
ServBay to zaawansowane, zintegrowane środowisko lokalnego rozwoju webowego na macOS, zawierające różne wersje Node.js, bazy danych i serwery webowe. W tym przewodniku wykorzystamy środowisko Node.js dostarczane przez ServBay oraz funkcję „stron”, aby utworzyć, uruchomić i skonfigurować projekt NestJS z własną domeną poprzez reverse proxy ServBay.
Wymagania wstępne
Przed rozpoczęciem należy upewnić się, że:
- Masz zainstalowany ServBay: ServBay jest poprawnie skonfigurowany na Twoim macOS.
- Node.js jest aktywowany: W zakładce „Pakiety” (Packages) panelu ServBay wybierz i zainstaluj odpowiednią wersję Node.js. Jeśli Node.js nie jest jeszcze dostępny, sprawdź Przewodnik po użyciu Node.js w ServBay.
Tworzenie projektu NestJS
Globalna instalacja NestJS CLI
Otwórz terminal i zainstaluj CLI NestJS za pomocą npm (instalowanego wraz z Node.js):
bashnpm install -g @nestjs/cli
1Inicjalizacja projektu
Przejdź do zalecanego katalogu głównego serwera www w ServBay (
/Applications/ServBay/www
). To domyślna lokalizacja stron w ServBay — tu warto zakładać nowe projekty dla wygodnej konfiguracji. Następnie utwórz nowy projekt:bashcd /Applications/ServBay/www nest new servbay-nest-app
1
2Po wykonaniu komendy CLI poprowadzi Cię przez zakładanie projektu — m.in. wybierz menadżera paczek (npm, yarn lub pnpm). Dla spójności zalecamy npm. Projekt znajdzie się w
/Applications/ServBay/www/servbay-nest-app
.Instalacja zależności
Przejdź do katalogu projektu i doinstaluj wymagane paczki:
bashcd servbay-nest-app npm install
1
2Polecenie
nest new
domyślnie wywołujenpm install
, ale ponowne wykonanie zapewnia zaktualizowanie/zainstalowanie wszystkich zależności.
(Opcjonalne) Modyfikowanie odpowiedzi domyślnej projektu NestJS
Aby sprawdzić, czy projekt działa i jest widoczny z ServBay, zmodyfikujmy domyślną odpowiedź na głównym routingu projektu.
Edytuj plik
src/app.controller.ts
Otwórz plik
src/app.controller.ts
w edytorze kodu i zmień zawartość, aby ścieżka główna (/
) zwracała tekst „Hello ServBay!”:typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // Zakładamy, że korzystasz z AppService @Controller() export class AppController { constructor(private readonly appService: AppService) {} // Jeśli używasz AppService @Get() getHello(): string { // return this.appService.getHello(); // Jeśli używasz AppService return 'Hello ServBay!'; // Zwraca tekst bezpośrednio } }
1
2
3
4
5
6
7
8
9
10
11
12
13Ten kod tworzy prosty kontroler przetwarzający żądania GET na / i zwracający konkretny ciąg znaków.
Uruchamianie projektu NestJS w trybie deweloperskim przez ServBay
NestJS uruchamia się zwykle z wbudowanym serwerem, nasłuchując na określonym porcie. Następnie możesz skonfigurować stronę w ServBay jako reverse proxy, dzięki czemu wybrane domeny będą kierowały ruch na konkretny port Twojej aplikacji.
Start serwera deweloperskiego
W katalogu projektu (
/Applications/ServBay/www/servbay-nest-app
) uruchom komendę:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev
1
2npm run start:dev
to domyślny skrypt w projektach NestJS, korzystający zts-node
oraz automatycznego restartu serwera po zmianie kodu. Aplikacja będzie dostępna nalocalhost:8585
.Konfiguracja reverse proxy w ServBay
W panelu ServBay przejdź do zakładki „Strony” (Websites). Skonfiguruj nową stronę:
- Nazwa (Name): np.
My first NestJS dev site
- Domena (Domains): np.
servbay-nest-test.dev
— ServBay domyślnie obsługuje końcówki takie jak .dev bez edycji pliku hosts. - Typ (Type): wybierz
Reverse Proxy
. - Adres IP: zwykle
127.0.0.1
- Port:
8585
, czyli port, na którym działa aplikacja
Zapisz konfigurację — ServBay automatycznie zaktualizuje ustawienia serwera WWW (Caddy/Nginx). Szczegółowy przewodnik konfiguracji znajdziesz w tworzeniu witryny ServBay.
- Nazwa (Name): np.
Odwiedzenie strony deweloperskiej
Otwórz przeglądarkę i wejdź na domenę
https://servbay-nest-test.dev
.Uwaga:
- ServBay oferuje domyślne bezpłatne certyfikaty SSL (sygnowane przez ServBay User CA), więc możesz korzystać z bezpiecznego
https
. Jeśli pojawi się ostrzeżenie dotyczące certyfikatu, musisz zaufać ServBay User CA. Po szczegóły zajrzyj do dokumentacji o zabezpieczeniu stron SSL. - Upewnij się, że serwer deweloperski NestJS (
PORT=8585 npm run start:dev
) działa — w przeciwnym razie strona nie będzie dostępna.
- ServBay oferuje domyślne bezpłatne certyfikaty SSL (sygnowane przez ServBay User CA), więc możesz korzystać z bezpiecznego
Wdrażanie wersji produkcyjnej i dostęp przez ServBay
Przed wdrożeniem do produkcji (nawet na lokalnej maszynie) należy najpierw zbudować projekt.
Build wersji produkcyjnej
Skorzystaj z polecenia:
bashcd /Applications/ServBay/www/servbay-nest-app npm run build
1
2Komenda
npm run build
transpiluje kod TypeScript do katalogudist
.Uruchomienie produkcyjnego serwera
Po zbudowaniu aplikacji uruchom ją w trybie produkcyjnym (na przykład na porcie
8586
) oraz ustaw zmienną środowiskowąNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js
1
2W trybie produkcyjnym nie ma już nasłuchiwania zmian w plikach.
Reverse proxy do wersji produkcyjnej w ServBay
Dodaj lub edytuj konfigurację strony w panelu ServBay:
- Nazwa (Name): np.
My first NestJS production site
- Domena (Domains): np.
servbay-nest-test.prod
- Typ (Type):
Reverse Proxy
- Adres IP:
127.0.0.1
- Port:
8586
(zgodny z ustawieniami aplikacji)
Zapisz zmiany.
- Nazwa (Name): np.
Dostęp do produkcyjnej wersji strony
Odwiedź w przeglądarce:
https://servbay-nest-test.prod
. Również tutaj ServBay zapewnia szyfrowanie SSL.
Połączenie z bazami danych w ServBay
ServBay obsługuje wiele baz danych — MariaDB (kompatybilna z MySQL), PostgreSQL, MongoDB i Redis. Podczas rozwoju aplikacji NestJS możesz łatwo z nich korzystać.
Ważne: Upewnij się, że odpowiednia baza danych jest uruchomiona i aktywowana w zakładce „Pakiety” (Packages) panelu ServBay. Domyślne dane dostępowe (port, nazwa użytkownika, hasło) znajdziesz w panelu lub dokumentacji ServBay. W środowisku produkcyjnym stanowczo zalecamy zmianę domyślnych danych oraz tworzenie dedykowanych użytkowników bazodanowych.
Poniżej wybrane przykłady konfiguracji najczęściej używanych ORM/bibliotek w NestJS do podłączenia się do baz danych z ServBay. Te konfiguracje stosuje się najczęściej w głównym module aplikacji (AppModule
) lub dedykowanych modułach baz danych.
Połączenie z MongoDB
Użyj
@nestjs/mongoose
:bashnpm install @nestjs/mongoose mongoose
1Konfiguracja w module NestJS:
typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... inne importy @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // Domyślny port 27017 // ... inne moduły ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13Domyślny connection string MongoDB w ServBay to
mongodb://localhost:27017/
. By utworzyć bazęservbay-nest-app
, skorzystaj np. z MongoDB Compass lubmongosh
.Połączenie z Redis
Użyj
@nestjs/redis
:bashnpm install @nestjs/redis redis @types/redis
1Przykładowa konfiguracja:
typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... inne importy @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // Domyślny port 6379 }), // ... inne moduły ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Domyślny adres Redis to
localhost:6379
.Połączenie z MariaDB (MySQL)
Użyj
@nestjs/typeorm
— ServBay obsługuje MariaDB i MySQL, obie zgodne z tym samym protokołem.bashnpm install @nestjs/typeorm mysql2 typeorm
1Przykład konfiguracji:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... inne importy @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // Lub 'mysql' host: 'localhost', port: 3306, // Domyślny port username: 'root', // Domyślny użytkownik ServBay password: 'password', // Domyślne hasło ServBay database: 'servbay_nest_app', // Wcześniej utworzona baza entities: [], // Twoje encje synchronize: true, // Dla developmentu true, w produkcji ostrożnie! }), // ... inne moduły ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Uwaga: Domyślne hasło do
root
topassword
. Połącz się klientem (TablePlus, DBeaver, MySQL CLI) dolocalhost:3306
, zaloguj się naroot
/password
i utwórz bazęservbay_nest_app
. W środowisku produkcyjnym ZAWSZE zmień dane dostępowe oraz utwórz użytkownika o ograniczonych uprawnieniach.Połączenie z PostgreSQL
Użyj
@nestjs/typeorm
:bashnpm install @nestjs/typeorm pg typeorm
1Przykład konfiguracji:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... inne importy @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // Domyślny port username: 'servbay', // Przykładowy użytkownik — sprawdź w panelu password: 'password', // Przykładowe hasło database: 'servbay_nest_app', // Wcześniej utworzona baza entities: [], // Twoje encje synchronize: true, // Dla developmentu true, w produkcji ostrożnie! }), // ... inne moduły ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Uwaga: Domyślne konto użytkownika/hasło PostgreSQL może się różnić (najczęściej
servbay
lubpostgres
). Sprawdź listę domyślnych poświadczeń w panelu ServBay lub dokumentacji i za pomocą klienta PostgreSQL połącz się dolocalhost:5432
, by utworzyć bazę oraz użytkownika (jeśli to wymagane). W produkcji zawsze zmień domyślne dane dostępowe!
Podsumowanie
W tym przewodniku dowiedziałeś się, jak przy pomocy ServBay szybko tworzyć, uruchamiać oraz obsługiwać projekty NestJS na macOS lokalnie. ServBay integruje środowisko Node.js, łatwą konfigurację stron (w tym reverse proxy) oraz obsługę wielu baz danych, znacząco upraszczając lokalny development i testowanie projektów NestJS. Możesz wygodnie przełączać tryby deweloperski/produkcyjny, używać własnych domen, korzystać z HTTPS oraz łatwo łączyć się z bazami danych zapewnianymi przez ServBay.