Pasinaudokite „Docker“ ir „Docker Compose“, kad sklandžiai diegtumėte ir paleistumėte savo Nest.js programas.
„Bet tai veikia mano kompiuteryje...“ kūrėjo pokštas puikiai išryškina iššūkį diegti ir paleisti programas įvairiose sistemose.
Tikrasis vargas yra konfigūruoti reikiamas priklausomybes ir užtikrinti, kad programinės įrangos versijos būtų suderinamos su jūsų programa. Puikus šios problemos sprendimas yra naudoti konteinerių kūrimo technologiją, pvz., „Docker“.
Tai leidžia be vargo diegti ir paleisti programas su visomis būtinomis priklausomybėmis konteinerio vaizde; pašalinant poreikį atlikti plataus masto konfigūraciją gamybos sistemose.
„Docker“ ir „Docker Compose“ supratimas
Dokeris yra atvirojo kodo kūrimo platforma, teikianti konteinerių kūrimo technologiją, naudojamą kuriant ir pakuojant, kartu su jų priklausomybėmis kaip nešiojamaisiais vaizdais.
Tada šie vaizdai paleidžiami kaip vykdomieji komponentai izoliuoto konteinerio aplinkoje. Programų vykdymas šiuose konteineriuose užtikrina nuoseklų programų veikimą įvairiose gamybos sistemose be jokių suderinamumo problemų.
Iš kitos pusės, „Docker Compose“ yra įrankis kuris naudojamas kartu su „Docker“, siekiant supaprastinti kelių konteinerių programų apibrėžimo ir valdymo procesą.
Nors „Docker“ pirmiausia naudojamas atskiriems konteineriams valdyti, „Docker Compose“ leidžia valdyti kelių konteinerių, kurie turi veikti kaip viena programa, konfigūraciją.
Tai ypač naudinga, kai programą sudaro kelios paslaugos, kurios turi veikti kartu, pvz., kelios priklausomos API paslaugos ir duomenų bazės.
Prieš pasinerdami į kodą, turite jį įdiegti „Docker“ darbalaukis vietiniame kompiuteryje. Peržiūrėkite konkrečiai sistemai taikomus reikalavimus ir diegimo veiksmus iš oficialios dokumentacijos.
Šios programos kodą galite rasti joje GitHub saugykla.
Sukurkite Nest.js projektą
Šis vadovas padės jums sukurti du „Docker“ konteinerius, kurie sklandžiai veikia kaip viena „Nest.js“ programa. Pirmajame konteineryje bus Nest.js žiniatinklio serverio Docker vaizdo egzempliorius, o antrame konteineryje bus vykdomas Docker PostgreSQL duomenų bazės vaizdas.
Norėdami pradėti, įdiekite Nest.js komandinės eilutės įrankį:
npm i -g @nestjs/cli
Dabar sukurkite naują Nest.js projektą vykdydami toliau pateiktą komandą savo terminale.
nest new docker-nest-app
Tada CLI įrankis parodys keletą paketų tvarkytuvų, iš kurių galėsite pasirinkti, kad sukurtumėte projektą. Pasirinkite pageidaujamą parinktį. Tokiu atveju naudosime npm, mazgo paketų tvarkyklė.
Galiausiai galite pereiti į projekto katalogą ir pasukti kūrimo serverį.
cd docker-nest-app
npm run start
Sukurkite duomenų bazės modulį
Pirmiausia įdiekite šias priklausomybes:
npm install pg typeorm @nestjs/typeorm @nestjs/config
Tada savo projekto šakniniame kataloge sukurkite a .env failą ir pridėkite šias duomenų bazės ryšio konfigūracijos reikšmes:
DATABASE_HOST="db"
DATABASE_PORT=5432
DATABASE_USER="testUser"
DATABASE_PASSWORD="mypassword123"
Galiausiai eikite į priekį ir sukurkite duomenų bazės modulį.
nest g module database
Dabar, sukūrę modulį, atidarykite duomenų bazė/duomenų bazė.module.ts failą ir įtraukite šį duomenų bazės konfigūracijos kodą:
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 {}
Kai nustatysite „Docker PostgreSQL“ vaizdą naudodami šią „TypeORM“ konfigūraciją, „Nest.js“ programa užmegs ryšį su duomenų baze.
Atnaujinkite failą app.module.ts
Galiausiai atnaujinkite pagrindinio programos modulio failą, kad įtrauktumėte duomenų bazės modulio konfigūraciją.
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 {}
Nustatykite Docker failą
„Dockerfile“ užfiksuoja reikiamą instrukcijų rinkinį, reikalingą „Docker“ varikliui, kad būtų sukurtas „Docker“ vaizdas. Šis vaizdas apima programos šaltinio kodą ir visas jo priklausomybes.
Projekto šakniniame kataloge sukurkite naują failą ir pavadinkite jį Dockerfile. Tada pridėkite šį turinį:
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" ]
Štai ką reiškia kiekviena komanda:
- NUO: Šioje instrukcijoje nurodomas pagrindinis vaizdas, kurį „Docker“ turėtų naudoti kurdamas programos vaizdą.
- DARBO VADOVAS: Ši komanda nurodo „Docker“ nustatyti /app katalogą kaip programos darbinį katalogą sudėtiniame rodinyje.
- KOPIJUOTpaketas*.json./: Kopijuoja visus failus tokiu formatu iš dabartinio programos katalogo į programėlė aplanką.
- RUN npm įdiegti: ši komanda įdiegs reikiamus paketus ir priklausomybes, kurių reikalauja programa Docker konteineryje.
- KOPIJA. .: nurodo „Docker“ nukopijuoti visus programos šaltinio kodo failus iš dabartinio katalogo į /app aplanką.
- RUN npm run build: komanda sukuria „Nest.js“ programą prieš kuriant „Docker“ vaizdą. Jis sukompiliuoja „TypeScript“ kodą į „JavaScript“ ir išsaugo kūrimo proceso išvestį a raj katalogas.
- CMD: apibrėžia komandą, kuri bus paleista paleidus konteinerį. Tokiu atveju vykdysime npm paleisties pradžia: dev komanda, kuri paleis serverį kūrimo režimu.
Ši konfigūracija leidžia programai aktyviai stebėti kodo pakeitimus. Aptikus pakeitimus, konteineris bus automatiškai atkurtas.
Sukurkite „Docker Compose“ failą
Projekto aplanko šakniniame kataloge sukurkite naują docker-compose.yml failą ir pridėkite šį turinį:
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“ naudos šias instrukcijas, kad sukurtų ir paleistų du vaizdus dviejuose „Docker“ konteineriuose. Pirmasis konteineris, serveris, priglobs programos vaizdą; veikia prie 3000 prievado.
Antrasis konteineris priglobs PostgreSQL duomenų bazės vaizdą. Šiam vaizdui nereikia nurodyti „Docker“ failo – „Docker“ naudos iš anksto „Docker“ vaizdų registre esantį „PostgreSQL“ vaizdą, kad jį sukurtų.
Paleiskite „Docker Containers“.
Galiausiai pereikite prie vaizdų kūrimo ir paleiskite konteinerius vykdydami šią komandą:
docker compose up
Kai procesas bus sėkmingai baigtas, savo terminale turėtumėte matyti panašią žurnalo informaciją.
Dabar, kai jūsų žiniatinklio serveris ir duomenų bazės konteineriai yra sukurti ir veikia, pridėkite daugiau funkcijų prie savo Nest.js programos. Pavyzdžiui, galite sukurti Nest.js CRUD REST API.
„Docker“ vaizdų perkėlimas į „Docker Hub“.
„Docker“ vaizdų perkėlimas į „Docker Hub“ yra beveik panašus į projektų perkėlimą į „GitHub“. Atlikite šiuos veiksmus, norėdami perkelti Nest.js programos Docker vaizdą į Docker Hub.
- Eikite į Docker Hub, prisiregistruokite ir prisijunkite prie paskyros apžvalgos puslapio.
- Spustelėkite Sukurti saugyklą mygtuką, įveskite savo saugyklos pavadinimą, nurodykite jos matomumą pasirinkdami bet kurį iš jų Viešas arba Privatus, tada spustelėkite Sukurti.
- Dabar turite prisijungti prie savo paskyros naudodami terminalą, vykdydami toliau pateiktą komandą, tada nurodykite savo Docker vartotojo vardą ir slaptažodį.
docker login
- Tada atnaujinkite „Docker“ vaizdo pavadinimą, kad jis atitiktų šį formatą:
/ vykdydami žemiau esančią komandą.docker tag
/ - Galiausiai stumkite „Docker“ vaizdą.
docker push
/
„Docker“ konteinerių talpinimo technologijos naudojimas kuriant
„Docker“ konteinerių sudarymo technologija leidžia sujungti programą ir visas jos priklausomybes į „Docker“ vaizdus. Tada šie vaizdai gali sklandžiai veikti konteineriuose skirtingose kūrimo ir gamybos aplinkose be jokių problemų.