Izmantojiet Docker un Docker Compose, lai nevainojami izvietotu un palaistu savas Nest.js lietojumprogrammas.

"Bet tas darbojas manā datorā..." izstrādātāja joks lieliski izceļ izaicinājumu, kas saistīts ar lietojumprogrammu izvietošanu un palaišanu dažādās sistēmās.

Patiesā problēma ir nepieciešamo atkarību konfigurēšana un programmatūras versiju saderība ar jūsu lietojumprogrammu. Lielisks šīs problēmas risinājums ir izmantot konteinerizācijas tehnoloģiju, piemēram, Docker.

Tas ļauj bez piepūles izvietot un palaist lietojumprogrammas ar visām nepieciešamajām atkarībām konteinera attēlā; novēršot nepieciešamību pēc plašas konfigurācijas ražošanas sistēmās.

Izpratne par Docker un Docker Compose

Docker ir atvērtā pirmkoda izstrādes platforma, kas nodrošina konteinerizācijas tehnoloģiju, ko izmanto būvniecības un iepakošanas lietojumprogrammās, kā arī to atkarības kā pārnēsājamus attēlus.

Pēc tam šie attēli tiek palaisti kā izpildāmi komponenti izolētā konteinera vidē. Lietojumprogrammu darbināšana šajos konteineros garantē konsekventu lietojumprogrammu veiktspēju dažādās ražošanas sistēmās bez saderības problēmām.

No otras puses, Docker Compose ir rīks kas tiek izmantots kopā ar Docker, lai vienkāršotu vairāku konteineru lietojumprogrammu definēšanas un pārvaldības procesu.

Lai gan Docker galvenokārt tiek izmantots atsevišķu konteineru pārvaldībai, Docker Compose ļauj pārvaldīt vairāku konteineru konfigurāciju, kuriem jādarbojas kā vienai lietojumprogrammai.

Tas ir īpaši noderīgi, ja lietojumprogramma sastāv no vairākiem pakalpojumiem, kuriem jādarbojas kopā, piemēram, vairākiem atkarīgiem API pakalpojumiem un datu bāzēm.

Pirms iedziļināties kodā, tas ir jāinstalē Docker darbvirsma jūsu vietējā iekārtā. Oficiālajā dokumentācijā skatiet sistēmai specifiskās prasības un instalēšanas darbības.

Šīs lietojumprogrammas kodu varat atrast tajā GitHub krātuve.

Nest.js projekta iestatīšana

Šajā rokasgrāmatā ir sniegti norādījumi, kā izveidot divus Docker konteinerus, kas nemanāmi darbojas kā viena Nest.js lietojumprogramma. Pirmajā konteinerā būs Nest.js tīmekļa servera Docker attēla gadījums, bet otrajā konteinerā tiks izpildīts Docker PostgreSQL datu bāzes attēls.

Lai sāktu darbu, instalējiet Nest.js komandrindas rīku:

npm i -g @nestjs/cli

Tagad izveidojiet jaunu Nest.js projektu, terminālī izpildot tālāk norādīto komandu.

nest new docker-nest-app

Pēc tam CLI rīks parādīs vairākus pakotņu pārvaldniekus, no kuriem jūs varat izvēlēties, lai izveidotu projektu. Izvēlieties sev vēlamo opciju. Šajā gadījumā mēs izmantosim npm, mezgla pakotņu pārvaldnieks.

Visbeidzot, varat pāriet uz projekta direktoriju un izveidot izstrādes serveri.

cd docker-nest-app
npm run start

Izveidojiet datu bāzes moduli

Vispirms instalējiet šīs atkarības:

npm install pg typeorm @nestjs/typeorm @nestjs/config

Pēc tam sava projekta saknes direktorijā izveidojiet a .env failu un pievienojiet šādas datu bāzes savienojuma konfigurācijas vērtības:

DATABASE_HOST="db"
DATABASE_PORT=5432
DATABASE_USER="testUser"
DATABASE_PASSWORD="mypassword123"

Visbeidzot, turpiniet un izveidojiet datu bāzes moduli.

nest g module database

Tagad, kad modulis ir izveidots, atveriet datubāze/database.module.ts failu un iekļaujiet šādu datu bāzes konfigurācijas kodu:

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 {}

Kad esat iestatījis Docker PostgreSQL attēlu, izmantojot šo TypeORM konfigurāciju, lietojumprogramma Nest.js izveidos savienojumu ar datu bāzi.

Atjauniniet failu app.module.ts

Visbeidzot, atjauniniet galvenā lietojumprogrammas moduļa failu, lai iekļautu datu bāzes moduļa konfigurāciju.

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 {}

Iestatiet Dockerfile

Dockerfile tver nepieciešamo instrukciju kopu, kas nepieciešama Docker programmai, lai izveidotu Docker attēlu. Šajā attēlā ir ietverts lietojumprogrammas pirmkods un visas tā atkarības.

Projekta saknes direktorijā izveidojiet jaunu failu un nosauciet to Dockerfile. Pēc tam pievienojiet šādu saturu:

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" ]

Lūk, ko attēlo katra komanda:

  1. NO: šī instrukcija norāda pamata attēlu, kas Docker jāizmanto, lai izveidotu lietojumprogrammas attēlu.
  2. DARBA DIREKTĪVĀ: šī komanda uzdod Docker iestatīt /app direktoriju kā lietotnes darba direktoriju konteinerā.
  3. KOPĒTpakotne*.json./: kopē visus failus ar šo faila nosaukuma formātu no pašreizējā lietojumprogrammas direktorija uz lietotne mapi.
  4. RUN npm instalēšana: šī komanda Docker konteinerā instalēs lietojumprogrammai nepieciešamās pakotnes un atkarības.
  5. KOPĒT. .: uzdod Docker kopēt visus lietojumprogrammas pirmkoda failus no pašreizējā direktorija uz /app mapi.
  6. RUN npm palaist build: komanda izveido lietojumprogrammu Nest.js pirms Docker attēla izveides. Tas apkopo TypeScript kodu JavaScript un saglabā veidošanas procesa izvadi a dist direktoriju.
  7. CMD: definē komandu, kas jāpalaiž, kad konteiners tiek startēts. Šajā gadījumā mēs izpildīsim npm palaišanas sākums: dev komanda, kas sāks serveri izstrādes režīmā.

Šī konfigurācija ļauj lietojumprogrammai aktīvi pārraudzīt koda izmaiņas. Tiklīdz tiek konstatētas izmaiņas, konteiners tiks automātiski atjaunots.

Izveidojiet Docker Compose failu

Projekta mapes saknes direktorijā izveidojiet jaunu docker-compose.yml failu un pievienojiet šādu saturu:

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 izmantos šos norādījumus, lai izveidotu un palaistu divus attēlus divos Docker konteineros. Pirmajā konteinerā, serverī, tiks mitināts lietojumprogrammas attēls; darbojas portā 3000.

Otrajā konteinerā tiks mitināts PostgreSQL datu bāzes attēls. Šim attēlam nav jānorāda Docker fails — Docker izmantos Docker attēlu reģistrā jau esošu PostgreSQL attēlu, lai to izveidotu.

Sāciet Docker Containers

Visbeidzot, turpiniet veidot attēlus un sāciet konteinerus, izpildot šādu komandu:

docker compose up

Kad process ir veiksmīgi pabeigts, jūsu terminālī vajadzētu redzēt līdzīgu žurnāla informāciju.

Tagad, kad ir izveidots un darbojas gan jūsu tīmekļa serveris, gan datu bāzes konteineri, pievienojiet savai lietojumprogrammai Nest.js vairāk funkcionalitātes. Piemēram, jūs varat izveidojiet Nest.js CRUD REST API.

Docker attēlu nosūtīšana uz Docker Hub

Docker attēlu nosūtīšana uz Docker Hub ir gandrīz līdzīga projektu pārsūtīšanai uz GitHub. Veiciet šīs darbības, lai nosūtītu Nest.js lietojumprogrammas Docker attēlu uz Docker Hub.

  1. Dodieties uz Docker Hub, reģistrējieties un piesakieties sava konta pārskata lapā.
  2. Noklikšķiniet uz Izveidot repozitoriju pogu, ievadiet repozitorija nosaukumu, norādiet tā redzamību, atlasot kādu no tām Publisks vai Privātsun pēc tam noklikšķiniet uz Izveidot.
  3. Tagad jums ir jāpiesakās savā kontā, izmantojot termināli, izpildot tālāk norādīto komandu, un pēc tam norādiet savu Docker lietotājvārdu un paroli.
    docker login
  4. Pēc tam atjauniniet Docker attēla nosaukumu, lai tas atbilstu šim formātam: / izpildot tālāk norādīto komandu.
    docker tag /
  5. Visbeidzot, nospiediet Docker attēlu.
    docker push /

Docker's Containerization Technology izmantošana izstrādē

Docker konteinerizācijas tehnoloģija ļauj apvienot lietojumprogrammu un visas tās atkarības Docker attēlos. Pēc tam šie attēli var darboties nevainojami konteineros dažādās izstrādes un ražošanas vidēs bez problēmām.