Kasutage Dockerit ja Docker Compose'i oma Nest.js-i rakenduste sujuvaks juurutamiseks ja käitamiseks.

"Aga see töötab minu arvutis..." toob arendaja nali suurepäraselt esile väljakutse, mis on seotud rakenduste juurutamise ja käivitamisega erinevates süsteemides.

Tõeline probleem seisneb vajalike sõltuvuste konfigureerimises ja tarkvaraversioonide ühilduvuse tagamises teie rakendusega. Selle probleemi suurepärane lahendus hõlmab konteineritehnoloogia, näiteks Dockeri, kasutamist.

See võimaldab teil konteinerpildis hõlpsasti juurutada ja käivitada rakendusi koos kõigi vajalike sõltuvustega; kõrvaldades vajaduse tootmissüsteemides ulatusliku konfiguratsiooni järele.

Dockeri ja Docker Compose'i mõistmine

Docker on avatud lähtekoodiga arendusplatvorm, mis pakub kaasaskantavate piltidena lisaks nende sõltuvustele ehitus- ja pakkimisrakenduste jaoks kasutatavat konteinertehnoloogiat.

Neid kujutisi käivitatakse seejärel käivitatavate komponentidena isoleeritud konteinerikeskkondades. Rakenduste käitamine nendes konteinerites tagab järjepideva rakenduste jõudluse erinevates tootmissüsteemides ilma ühilduvusprobleemideta.

instagram viewer

Teiselt poolt, Docker Compose on tööriist mida kasutatakse koos Dockeriga mitme konteineri rakenduste määratlemise ja haldamise protsessi lihtsustamiseks.

Kui Dockerit kasutatakse peamiselt üksikute konteinerite haldamiseks, siis Docker Compose võimaldab teil hallata mitme konteineri konfiguratsiooni, mis peavad töötama ühe rakendusena.

See on eriti kasulik, kui rakendus koosneb mitmest teenusest, mis peavad koos töötama, näiteks mitmest sõltuvast API-teenusest ja andmebaasidest.

Enne koodi sukeldumist peate installima Dockeri töölaud oma kohalikus masinas. Vaadake ametlikust dokumentatsioonist läbi süsteemispetsiifilised nõuded ja installietapid.

Selle rakenduse koodi leiate sellest GitHub hoidla.

Seadistage Nest.js projekt

See juhend juhendab teid kahe Dockeri konteineri keerutamise protsessis, mis töötavad sujuvalt ühe Nest.js-i rakendusena. Esimene konteiner sisaldab Nest.js-i veebiserveri Dockeri kujutise eksemplari, teine ​​konteiner aga käivitab Dockeri PostgreSQL-i andmebaasi kujutise.

Alustamiseks installige käsureatööriist Nest.js.

npm i -g @nestjs/cli

Nüüd looge uus Nest.js projekt, käivitades terminalis alloleva käsu.

nest new docker-nest-app

Järgmisena kuvab CLI tööriist mitu paketihaldurit, mille hulgast saate projekti loomiseks valida. Valige oma eelistatud valik. Sel juhul kasutame npm, sõlme paketihaldur.

Lõpuks saate navigeerida projektikataloogi ja käivitada arendusserveri.

cd docker-nest-app
npm run start

Looge andmebaasi moodul

Esmalt installige need sõltuvused:

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

Järgmisena looge oma projekti juurkataloogis a .env faili ja lisage järgmised andmebaasiühenduse konfiguratsiooni väärtused:

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

Lõpuks minge edasi ja looge andmebaasimoodul.

nest g module database

Nüüd, pärast mooduli loomist, avage andmebaas/andmebaas.moodul.ts faili ja lisage järgmine andmebaasi konfiguratsioonikood:

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

Kui olete selle TypeORM-i konfiguratsiooni abil seadistanud Docker PostgreSQL-pildi, loob rakendus Nest.js andmebaasiga ühenduse.

Värskendage faili app.module.ts

Lõpuks värskendage põhirakenduse mooduli faili, et lisada andmebaasimooduli konfiguratsioon.

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

Dockeri faili seadistamine

Dockerfile jäädvustab nõutavad juhised, mida Dockeri mootor vajab Dockeri kujutise loomiseks. See pilt hõlmab rakenduse lähtekoodi ja kõiki selle sõltuvusi.

Looge oma projekti juurkataloogis uus fail ja nimetage see Dockerfile. Seejärel lisage järgmine sisu:

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

Siin on see, mida iga käsk esindab:

  1. FROM: see juhend määrab baaskujutise, mida Docker peaks rakenduse kujutise koostamiseks kasutama.
  2. TÖÖDIREKTOR: see käsk annab Dockerile ülesandeks määrata /app kataloog konteineris oleva rakenduse töökataloogina.
  3. KOPERIpakett*.json./: Kopeerib kõik selle failinimevorminguga failid rakenduse praegusest kataloogist kataloogi rakendus kausta.
  4. RUN npm install: see käsk installib Dockeri konteinerisse vajalikud paketid ja sõltuvused, mida rakendus nõuab.
  5. KOPERI. .: juhendab Dockerit kopeerima kõik rakenduse lähtekoodifailid praegusest kataloogist kataloogi /app kausta.
  6. RUN npm run build: käsk loob enne Dockeri kujutise loomist Nest.js-i rakenduse. See kompileerib TypeScripti koodi JavaScriptiks ja salvestab ehitusprotsessi väljundi a dist kataloog.
  7. CMD: määrab konteineri käivitumisel käivitatava käsu. Sel juhul käivitame npm käivitamise algus: dev käsk, mis käivitab serveri arendusrežiimis.

See konfiguratsioon võimaldab rakendusel koodimuutusi aktiivselt jälgida. Kui muudatused on tuvastatud, ehitatakse konteiner automaatselt ümber.

Looge Dockeri koostamisfail

Looge oma projektikausta juurkataloogis uus docker-compose.yml faili ja lisage järgmine sisu:

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 kasutab neid juhiseid kahe pildi koostamiseks ja käitamiseks kahes Dockeri konteineris. Esimene konteiner, server, majutab rakenduse kujutist; töötab pordis 3000.

Teine konteiner majutab PostgreSQL-i andmebaasi kujutist. Te ei pea selle pildi jaoks Docker-faili määrama – Docker kasutab selle koostamiseks Dockeri pildiregistris juba olemasolevat PostgreSQL-pilti.

Käivitage Dockeri konteinerid

Lõpuks jätkake piltide loomist ja käivitage konteinerid, käivitades järgmise käsu:

docker compose up

Kui protsess on edukalt lõpule viidud, peaksite oma terminalis nägema sarnast logiteavet.

Nüüd, kui teie veebiserver ja andmebaasikonteinerid on valmis ja töötavad, lisage oma Nest.js-rakendusele rohkem funktsioone. Näiteks võite luua Nest.js CRUD REST API.

Dockeri piltide edastamine Dockeri keskusesse

Dockeri piltide lükkamine Docker Hubi on peaaegu sarnane projektide GitHubisse lükkamisega. Nest.js-i rakenduse Dockeri kujutise Docker Hubi lükkamiseks järgige neid samme.

  1. Suunduge poole Dockeri jaotur, registreeruge ja logige sisse oma konto ülevaatelehele.
  2. Klõpsake nuppu Loo hoidla nuppu, sisestage oma hoidla nimi, määrake selle nähtavus, valides kas Avalik või Privaatneja seejärel klõpsake Loo.
  3. Nüüd peate terminali kaudu oma kontole sisse logima, käivitades alloleva käsu, ja seejärel sisestama oma Dockeri kasutajanime ja parooli.
    docker login
  4. Järgmisena värskendage Dockeri pildi nime, et see vastaks sellele vormingule: / käivitades alloleva käsu.
    docker tag /
  5. Lõpuks lükake Dockeri pilt.
    docker push /

Dockeri konteineritehnoloogia kasutamine arenduses

Dockeri konteinertehnoloogia võimaldab rakenduse koos kõigi selle sõltuvustega koondada Dockeri kujutistesse. Need pildid võivad seejärel sujuvalt töötada konteinerites erinevates arendus- ja tootmiskeskkondades ilma probleemideta.