Folosiți Docker și Docker Compose pentru a implementa și rula fără probleme aplicațiile dvs. Nest.js.
„Dar funcționează pe computerul meu...” gluma dezvoltatorului evidențiază perfect provocarea implementării și rulării aplicațiilor pe diferite sisteme.
Adevărata bătaie de cap constă în configurarea dependențelor necesare și în a vă asigura că versiunile de software sunt compatibile cu aplicația dvs. O soluție excelentă pentru această problemă implică utilizarea tehnologiei de containerizare, cum ar fi Docker.
Vă permite să implementați și să rulați fără efort aplicații — cu toate dependențele necesare — în cadrul imaginii containerului; eliminând necesitatea unei configurații extinse în sistemele de producție.
Înțelegerea Docker și Docker Compose
Docher este o platformă de dezvoltare open-source care oferă tehnologie de containerizare utilizată în construirea și ambalarea aplicațiilor alături de dependențele acestora ca imagini portabile.
Aceste imagini sunt apoi rulate ca componente executabile în medii de containere izolate. Rularea aplicațiilor în aceste containere garantează performanță consecventă a aplicațiilor în diferite sisteme de producție, fără probleme de compatibilitate.
Pe de altă parte, Docker Compose este un instrument care este utilizat împreună cu Docker pentru a simplifica procesul de definire și gestionare a aplicațiilor cu mai multe containere.
În timp ce Docker este folosit în principal pentru a gestiona containere individuale, Docker Compose vă permite să gestionați configurația mai multor containere care trebuie să ruleze ca o singură aplicație.
Acest lucru este deosebit de util atunci când o aplicație constă din mai multe servicii care trebuie să funcționeze împreună, cum ar fi mai multe servicii API dependente și baze de date, printre altele.
Înainte de a vă scufunda în cod, trebuie să instalați Docker Desktop pe mașina dvs. locală. Parcurgeți cerințele specifice sistemului și pașii de instalare din documentația oficială.
Puteți găsi codul acestei aplicații în documentul său GitHub repertoriu.
Configurați un proiect Nest.js
Acest ghid vă va ghida prin procesul de învârtire a două containere Docker care funcționează fără probleme ca o singură aplicație Nest.js. Primul container va deține o instanță a imaginii Docker a serverului web Nest.js, în timp ce al doilea container va executa imaginea bazei de date PostgreSQL a Docker.
Pentru a începe, instalați instrumentul de linie de comandă Nest.js:
npm i -g @nestjs/cli
Acum, creați un nou proiect Nest.js executând comanda de mai jos în terminalul dvs.
nest new docker-nest-app
În continuare, instrumentul CLI va afișa mai mulți manageri de pachete din care puteți alege pentru a crea proiectul. Alegeți opțiunea preferată. În acest caz, vom folosi npm, Managerul de pachete Node.
În cele din urmă, puteți naviga la directorul proiectului și puteți porni serverul de dezvoltare.
cd docker-nest-app
npm run start
Creați modulul de bază de date
Mai întâi, instalați aceste dependențe:
npm install pg typeorm @nestjs/typeorm @nestjs/config
Apoi, în directorul rădăcină al proiectului, creați un .env fișier și adăugați următoarele valori de configurare a conexiunii la baza de date:
DATABASE_HOST="db"
DATABASE_PORT=5432
DATABASE_USER="testUser"
DATABASE_PASSWORD="mypassword123"
În cele din urmă, continuați și creați modulul bazei de date.
nest g module database
Acum, după ce modulul a fost creat, deschideți database/database.module.ts fișier și includeți următorul cod de configurare a bazei de date:
import { Module } from'@nestjs/common';
import { TypeOrmModule } from'@nestjs/typeorm';
import { ConfigModule, ConfigService } from'@nestjs/config';@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
type: 'postgres',
host: configService.get<string>('DATABASE_HOST'),
port: configService.get<number>('DATABASE_PORT'),
username: configService.get<string>('DATABASE_USER'),
password: configService.get<string>('DATABASE_PASSWORD'),
synchronize: true,
}),
inject: [ConfigService],
}),
],
})
exportclass DatabaseModule {}
Odată ce ați configurat imaginea Docker PostgreSQL folosind această configurație TypeORM, aplicația Nest.js va stabili o conexiune la baza de date.
Actualizați fișierul app.module.ts
În cele din urmă, actualizați fișierul principal al modulului de aplicație pentru a încorpora configurația pentru modulul bazei de date.
import { Module } from'@nestjs/common';
import { ConfigModule } from'@nestjs/config';
import { AppController } from'./app.controller';
import { AppService } from'./app.service';
import { DatabaseModule } from'./database/database.module';@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
DatabaseModule,
],
controllers: [AppController],
providers: [AppService],
})
exportclass AppModule {}
Configurați un fișier Docker
Un Dockerfile captează setul necesar de instrucțiuni necesare motorului Docker pentru a crea o imagine Docker. Această imagine cuprinde codul sursă al aplicației și toate dependențele acesteia.
În directorul rădăcină al proiectului, creați un fișier nou și denumiți-l, Dockerfile. Apoi, adăugați următorul conținut:
FROM node:16.3.0-alpine3.13
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY. .
RUN npm run build
CMD [ "npm", "run", "start: dev" ]
Iată ce reprezintă fiecare comandă:
- DIN: Această instrucțiune specifică imaginea de bază pe care Docker ar trebui să o utilizeze pentru a construi imaginea aplicației.
- WORKDIR: Această comandă îi cere lui Docker să seteze /app directorul ca director de lucru pentru aplicația din container.
- COPIEpachet*.json./: Copiază toate fișierele cu acel format de nume de fișier din directorul curent din aplicație în aplicația pliant.
- RUN instalarea npm: Această comandă va instala pachetele și dependențele necesare aplicației în containerul Docker.
- COPIE. .: Îi cere lui Docker să copieze toate fișierele de cod sursă ale aplicației din directorul curent în /app pliant.
- RUN npm run build: Comanda creează aplicația Nest.js înainte de a crea imaginea Docker. Compilează codul TypeScript în JavaScript și stochează rezultatul procesului de compilare într-un dist director.
- CMD: definește comanda de rulat la pornirea containerului. În acest caz, vom rula npm run start: dev comanda, care va porni serverul în modul de dezvoltare.
Această configurație permite aplicației să monitorizeze în mod activ modificările codului. Odată ce sunt detectate modificări, containerul va fi supus automat reconstrucției.
Creați fișierul Docker Compose
În directorul rădăcină al folderului de proiect, creați un nou docker-compose.yml fișier și adăugați următorul conținut:
version:'3.9'
services:
server:
build:.
ports:
-'3000:3000'
depends_on:
-db
db:
image:'postgres'
ports:
-'5432:5432'
environment:
POSTGRES_PASSWORD:'mypassword123'
POSTGRES_USER:'testUser'
volumes:
-data:/var/lib/postgresql/data
volumes:
data:
Docker Compose va folosi aceste instrucțiuni pentru a construi și a rula cele două imagini în două containere Docker. Primul container, serverul, va găzdui imaginea aplicației; rulează pe portul 3000.
Al doilea container va găzdui imaginea bazei de date PostgreSQL. Nu trebuie să specificați un fișier Docker pentru această imagine — Docker va utiliza imaginea PostgreSQL preexistentă din registrul de imagini Docker pentru ao construi.
Porniți containerele Docker
În cele din urmă, continuați să construiți imaginile și porniți containerele rulând următoarea comandă:
docker compose up
Odată ce procesul este finalizat cu succes, ar trebui să vedeți informații similare de jurnal pe terminalul dvs.
Acum, cu atât serverul web, cât și containerele de baze de date în funcțiune, continuați și adăugați mai multe funcționalități aplicației dvs. Nest.js. De exemplu, poți construiți un API CRUD REST Nest.js.
Împingerea imaginilor Docker către Docker Hub
Împingerea imaginilor Docker către Docker Hub este aproape similară cu împingerea proiectelor către GitHub. Urmați acești pași pentru a împinge imaginea Docker a aplicației Nest.js în Docker Hub.
- Du-te la Docker Hub, înscrieți-vă și conectați-vă la pagina de prezentare generală a contului dvs.
- Apasă pe Creați un depozit butonul, completați numele depozitului dvs., specificați vizibilitatea acestuia selectând oricare dintre ele Public sau Privat, apoi faceți clic Crea.
- Acum, trebuie să vă conectați la contul dvs. prin terminal, rulând comanda de mai jos, apoi furnizați numele de utilizator și parola Docker.
docker login
- Apoi, actualizați numele imaginii Docker pentru a se potrivi cu acest format:
/ rulând comanda de mai jos.docker tag
/ - În cele din urmă, împingeți imaginea Docker.
docker push
/
Utilizarea tehnologiei de containerizare Docker în dezvoltare
Tehnologia de containerizare Docker vă permite să grupați o aplicație împreună cu toate dependențele acesteia în imagini Docker. Aceste imagini pot rula fără probleme în containere în diferite medii de dezvoltare și producție, fără probleme.