Creazione e gestione di un progetto NestJS in locale su macOS con ServBay
NestJS è un framework Node.js progressivo per lo sviluppo di applicazioni server-side efficienti e scalabili. Scritto in TypeScript e ispirato ad Angular, adotta un’architettura modulare e il pattern di iniezione delle dipendenze (DI). NestJS offre strumenti e funzionalità potenti per costruire applicazioni complesse, mantenibili, testabili e altamente disaccoppiate.
Caratteristiche principali e vantaggi di NestJS
- Architettura modulare: Organizza il codice tramite moduli, rendendo le applicazioni più strutturate, comprensibili e facili da mantenere.
- Iniezione delle dipendenze: Sistema DI potente e intuitivo, migliora ulteriormente la testabilità e la manutenzione del codice.
- Utilizzo di TypeScript: Sfrutta il controllo dei tipi statici, le interfacce e le funzionalità moderne di JavaScript offerte da TypeScript, migliorando la produttività e la qualità del codice, riducendo gli errori in fase di esecuzione.
- Decorators ricchi: Usa i decoratori per definire controller, servizi, moduli, ecc., rendendo il codice più dichiarativo, conciso e chiaro nell’intento.
- Ecosistema ampio: Comunità attiva e supporto per numerosi moduli e plugin di terze parti. Integrazione semplice con TypeORM, Mongoose, GraphQL, WebSockets, caching, validazione e altre funzionalità.
- Basato su standard consolidati: Si fonda su framework HTTP maturi come Express o Fastify, garantendo compatibilità ed ottime prestazioni.
Sviluppando con NestJS puoi adottare le best practice del backend (come i principi SOLID e i design patterns) ed accelerare la creazione di web app, API e microservizi performanti a livello enterprise.
Come creare e gestire un progetto NestJS con ServBay
ServBay offre su macOS un ambiente di sviluppo web locale potente e integrato, con supporto a più versioni di Node.js, database e web server inclusi. In questa guida sfrutteremo l’ambiente Node.js fornito da ServBay e la funzionalità «Siti Web» per creare, avviare e configurare un progetto NestJS. Grazie al proxy inverso di ServBay, potrai accedere facilmente alla tua app NestJS locale tramite un dominio personalizzato.
Prerequisiti
Prima di iniziare, assicurati di aver completato i seguenti passaggi:
- Installazione di ServBay: ServBay deve essere già installato su macOS.
- Abilitazione del pacchetto Node.js: Tramite la scheda «Pacchetti» nel pannello di controllo di ServBay, seleziona e installa la versione di Node.js necessaria. Se non hai ancora abilitato Node.js, consulta la Guida all’utilizzo di Node.js con ServBay.
Creazione del progetto NestJS
Installazione globale di NestJS CLI
Apri il terminale e usa npm (incluso in Node.js) per installare globalmente la CLI di NestJS, uno strumento essenziale per inizializzare, sviluppare e mantenere progetti NestJS.
bashnpm install -g @nestjs/cli
1Inizializzazione del progetto
Spostati nella cartella webroot raccomandata da ServBay:
/Applications/ServBay/www
. Questo è il percorso predefinito per i siti in ServBay: creare qui il progetto semplificherà la configurazione successiva dei siti. Usa quindi la CLI di NestJS per creare il nuovo progetto:bashcd /Applications/ServBay/www nest new servbay-nest-app
1
2Dopo questo comando, la CLI ti guiderà nella creazione del progetto, incluso nella scelta del package manager (npm, yarn o pnpm). Si consiglia di usare npm per coerenza. Il progetto verrà generato dentro
/Applications/ServBay/www/servbay-nest-app
.Installazione delle dipendenze del progetto
Posizionati nella directory del nuovo progetto
servbay-nest-app
e installa le dipendenze necessarie:bashcd servbay-nest-app npm install
1
2Il comando
nest new
esegue giànpm install
, ma ripeterlo garantisce che tutte le dipendenze siano aggiornate e installate correttamente.
Modifica della risposta di default di NestJS (Opzionale)
Per verificare che il progetto funzioni e sia accessibile tramite ServBay, possiamo modificare la risposta del root route.
Modifica del file
src/app.controller.ts
Usa il tuo editor preferito per aprire
src/app.controller.ts
nella directory del progetto. Modifica il contenuto come segue, affinché la root (/
) risponda con la stringa "Hello ServBay!":typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // Se mantieni AppService @Controller() export class AppController { constructor(private readonly appService: AppService) {} // Se mantieni AppService @Get() getHello(): string { // return this.appService.getHello(); // Se usi AppService return 'Hello ServBay!'; // Restituisce direttamente la stringa } }
1
2
3
4
5
6
7
8
9
10
11
12
13Questo codice definisce un semplice controller che gestisce i GET su root (
/
), restituendo la stringa specificata.
Esecuzione del progetto NestJS in modalità sviluppo e accesso tramite ServBay
Generalmente, le app NestJS in sviluppo girano su un server integrato in ascolto su una porta. Puoi poi configurare un sito in ServBay con proxy inverso per associare un dominio locale a questa porta.
Avvio del server di sviluppo
Dalla cartella del progetto
/Applications/ServBay/www/servbay-nest-app
, avvia il server NestJS in modalità sviluppo impostando la variabile d’ambientePORT
, ad esempio8585
:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev
1
2npm run start:dev
è lo script predefinito dei progetti NestJS: utilizzats-node
, guarda le modifiche ai file e riavvia il server automaticamente. Il server sarà ora attivo sulocalhost:8585
.Configurazione del proxy inverso su ServBay
Apri il pannello di controllo ServBay, vai alla scheda «Siti Web» e clicca sul pulsante di aggiunta (
+
) per creare una nuova configurazione:- Nome (Name): Un nome facile da ricordare, es.
My first NestJS dev site
. - Domini (Domains): Il dominio desiderato per l’accesso locale, ad es.
servbay-nest-test.dev
. ServBay risolve automaticamente .dev e simili in locale, non devi modificare il file hosts. - Tipo (Type): Scegli
Proxy inverso (Reverse Proxy)
. - Indirizzo IP (IP Address): L’indirizzo di ascolto della tua app Node.js, tipicamente
127.0.0.1
. - Porta (Port): La porta usata da NestJS, qui
8585
.
Salva la configurazione. ServBay aggiornerà automaticamente le impostazioni del webserver (Caddy o Nginx). Per dettagli sulle configurazioni, consulta la documentazione Aggiunta di un sito in ServBay.
- Nome (Name): Un nome facile da ricordare, es.
Accesso al sito in modalità sviluppo
Dal browser, visita il dominio configurato:
https://servbay-nest-test.dev
.Attenzione:
- ServBay fornisce di default certificati SSL gratuiti (emessi da ServBay User CA) per i siti locali, permettendo l’accesso sicuro via
https
. Se ricevi avvisi sui certificati, potresti dover fidare la CA di ServBay sul tuo sistema. Consulta la guida su proteggere i siti con SSL. - Assicurati che il server di sviluppo NestJS sia attivo (
PORT=8585 npm run start:dev
). Se il processo si interrompe, il dominio non sarà raggiungibile.
- ServBay fornisce di default certificati SSL gratuiti (emessi da ServBay User CA) per i siti locali, permettendo l’accesso sicuro via
Deploy della versione di produzione e accesso tramite ServBay
Prima di mettere online (anche solo in locale) una versione di produzione di NestJS, è necessario effettuare la build del progetto.
Build del progetto produzione
Da
/Applications/ServBay/www/servbay-nest-app
, esegui:bashcd /Applications/ServBay/www/servbay-nest-app npm run build
1
2Questo comando usa il compilatore TypeScript per produrre il codice JS nella cartella
dist
.Avvio del server in modalità produzione
Dopo la build, lancia l’app NestJS ottimizzata per la produzione, impostando per esempio la porta
8586
e la variabileNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js
1
2In modalità produzione non sono attivi watch dei file né hot reload.
Configurazione del proxy inverso per la produzione
Torna alla sezione «Siti Web» in ServBay e crea o modifica una configurazione per la versione produzione:
- Nome (Name): Es.
My first NestJS production site
- Domini (Domains): Es.
servbay-nest-test.prod
- Tipo (Type):
Proxy inverso (Reverse Proxy)
- Indirizzo IP (IP Address):
127.0.0.1
- Porta (Port):
8586
(uguale al server di produzione)
Salva la configurazione.
- Nome (Name): Es.
Accesso al sito in produzione
Dal browser, accedi a
https://servbay-nest-test.prod
per vedere la versione live della tua app NestJS. Anche in questo caso è disponibile la sicurezza SSL fornita da ServBay.
Connessione ai database integrati in ServBay
ServBay include supporto per diversi database: MariaDB (compatibile MySQL), PostgreSQL, MongoDB e Redis. Durante lo sviluppo, puoi connettere la tua app NestJS a questi servizi con facilità.
Nota importante: Abilita sempre i database desiderati dalla scheda «Pacchetti» di ServBay prima di tentarne la connessione. Le porte, username e password predefiniti sono indicati nel pannello ServBay e nella documentazione. In produzione, modifica sempre le credenziali di default e crea utenti specifici a basso privilegio per ogni app.
Ecco alcuni esempi di configurazione ORM/libreria per collegare il progetto NestJS ai database integrati.
Connessione a MongoDB
Sfrutta il modulo
@nestjs/mongoose
:bashnpm install @nestjs/mongoose mongoose
1Configura
MongooseModule
nel tuo modulo principale:typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... altri import @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // Porta di default 27017 // ... altri moduli ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13La stringa tipica di connessione MongoDB in ServBay è
mongodb://localhost:27017/
. Usa eventualmente MongoDB Compass omongosh
per creare il databaseservbay-nest-app
se serve.Connessione a Redis
Tramite il modulo
@nestjs/redis
:bashnpm install @nestjs/redis redis @types/redis
1Configura
RedisModule
:typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... altri import @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // Porta predefinita 6379 }), // ... altri moduli ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15La porta predefinita per Redis su ServBay è
localhost:6379
.Connessione a MariaDB (compatibile MySQL)
Utilizza
@nestjs/typeorm
— ServBay supporta sia MariaDB che MySQL con protocollo MySQL standard. Puoi usaremysql
omariadb
su TypeORM.bashnpm install @nestjs/typeorm mysql2 typeorm
1Imposta
TypeOrmModule
:typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... altri import @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // oppure 'mysql' host: 'localhost', port: 3306, // Porta predefinita 3306 username: 'root', // Utente root di default in MariaDB/MySQL ServBay password: 'password', // Password root di default in ServBay database: 'servbay_nest_app', // Crea questo db prima dell’uso entities: [], // Array delle tue entity synchronize: true, // Solo in sviluppo, non usare in produzione }), // ... altri moduli ], 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
22Attenzione: La password di default di
root
èpassword
su ServBay. Utilizza TablePlus, DBeaver o MySQL CLI per connetterti alocalhost:3306
con queste credenziali, crea manualmente il databaseservbay_nest_app
e (altamente consigliato) modifica la password di root e crea un utente dedicato a privilegi minimi per le connessioni della tua app.Connessione a PostgreSQL
Sempre tramite
@nestjs/typeorm
:bashnpm install @nestjs/typeorm pg typeorm
1Configura
TypeOrmModule
:typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... altri import @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // Porta default 5432 username: 'servbay', // Utente predefinito esempio, verifica nella tua installazione password: 'password', // Password predefinita esempio, verifica reale database: 'servbay_nest_app', // Crea prima questo db entities: [], // Array delle tue entity synchronize: true, // OK in sviluppo, evita in produzione }), // ... altri moduli ], 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
22Nota: Le credenziali di default di PostgreSQL variano: spesso l’utente predefinito è
servbay
opostgres
. Consulta sempre il pannello o i documenti di ServBay, e usa un client PostgreSQL per accedere alocalhost:5432
, creare database e utenti specifici. Sicurezza: cambiare sempre i dati di default in produzione.
Conclusione
Seguendo questa guida, hai appreso come creare velocemente, eseguire e accedere in modo sicuro a un progetto NestJS sul tuo ambiente macOS locale con ServBay. L’integrazione di Node.js, il comodo sistema di gestione siti (incluso il proxy inverso) e il supporto per diversi database rendono lo sviluppo e il test con NestJS locale estremamente snello. Puoi passare facilmente tra modalità sviluppo e produzione, sfruttare domini personalizzati e HTTPS per l’accesso locale sicuro, collegando la tua app ai potenti servizi database integrati di ServBay.