Iskoristite Docker i Docker Compose za besprijekornu implementaciju i pokretanje svojih Nest.js aplikacija.

"Ali radi na mom računalu..." šala programera savršeno naglašava izazov postavljanja i pokretanja aplikacija na različitim sustavima.

Prava gnjavaža leži u konfiguriranju potrebnih ovisnosti i osiguravanju da su verzije softvera kompatibilne s vašom aplikacijom. Odlično rješenje za ovaj problem uključuje korištenje tehnologije kontejnerizacije kao što je Docker.

Omogućuje vam da bez napora postavite i pokrenete aplikacije—sa svim potrebnim ovisnostima—unutar slike spremnika; eliminirajući potrebu za opsežnom konfiguracijom u proizvodnim sustavima.

Razumijevanje Dockera i Docker Composea

Lučki radnik je open-source razvojna platforma koja pruža tehnologiju kontejnerizacije koja se koristi u izradi i pakiranju aplikacija uz njihove ovisnosti kao prijenosne slike.

Te se slike zatim pokreću kao izvršne komponente unutar izoliranih okruženja spremnika. Pokretanje aplikacija unutar ovih spremnika jamči dosljednu izvedbu aplikacija u različitim proizvodnim sustavima bez ikakvih problema s kompatibilnošću.

instagram viewer

S druge strane, Docker Compose je alat koji se koristi zajedno s Dockerom za pojednostavljenje procesa definiranja i upravljanja aplikacijama s više spremnika.

Dok se Docker prvenstveno koristi za upravljanje pojedinačnim spremnicima, Docker Compose vam omogućuje upravljanje konfiguracijom više spremnika koji se moraju izvoditi kao jedna aplikacija.

Ovo je posebno korisno kada se aplikacija sastoji od višestrukih usluga koje trebaju raditi zajedno, kao što je nekoliko ovisnih API usluga i baza podataka, između ostalog.

Prije nego što zaronite u kod, morate instalirati Docker radna površina na vašem lokalnom računalu. Prođite kroz zahtjeve specifične za sustav i korake instalacije iz službene dokumentacije.

Kôd ove aplikacije možete pronaći u GitHub spremište.

Postavite Nest.js projekt

Ovaj će vas vodič provesti kroz proces pokretanja dva Docker spremnika koji besprijekorno rade kao jedna Nest.js aplikacija. Prvi spremnik će sadržavati instancu Docker slike web poslužitelja Nest.js, dok će drugi spremnik izvršiti Dockerovu sliku PostgreSQL baze podataka.

Za početak instalirajte alat naredbenog retka Nest.js:

npm i -g @nestjs/cli

Sada izradite novi Nest.js projekt pokretanjem donje naredbe na vašem terminalu.

nest new docker-nest-app

Zatim će CLI alat prikazati nekoliko upravitelja paketima koje možete odabrati za izradu projekta. Odaberite željenu opciju. U ovom slučaju ćemo koristiti npm, upravitelj paketa čvora.

Na kraju, možete otići do direktorija projekta i pokrenuti razvojni poslužitelj.

cd docker-nest-app
npm run start

Stvorite modul baze podataka

Prvo instalirajte ove ovisnosti:

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

Zatim, u korijenskom direktoriju vašeg projekta, kreirajte a .env datoteku i dodajte sljedeće konfiguracijske vrijednosti veze s bazom podataka:

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

Na kraju, samo naprijed i izradite modul baze podataka.

nest g module database

Sada, nakon što je modul kreiran, otvorite baza podataka/baza podataka.modul.ts datoteku i uključite sljedeći kod konfiguracije baze podataka:

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

Nakon što postavite Docker PostgreSQL sliku koristeći ovu TypeORM konfiguraciju, aplikacija Nest.js uspostavit će vezu s bazom podataka.

Ažurirajte datoteku app.module.ts

Na kraju, ažurirajte datoteku modula glavne aplikacije kako biste uključili konfiguraciju za modul baze podataka.

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

Postavite Dockerfile

Dockerfile bilježi potrebni skup uputa potrebnih Docker mehanizmu za stvaranje Docker slike. Ova slika obuhvaća izvorni kod aplikacije i sve njegove ovisnosti.

U korijenskom direktoriju vašeg projekta stvorite novu datoteku i nazovite je Dockerfile. Zatim dodajte sljedeći sadržaj:

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

Evo što svaka naredba predstavlja:

  1. IZ: Ova uputa navodi osnovnu sliku koju Docker treba koristiti za izradu slike aplikacije.
  2. RADNI DIR: Ova naredba upućuje Docker da postavi /app direktorij kao radni direktorij za aplikaciju unutar spremnika.
  3. KOPIRATIpaket*.json./: Kopira sve datoteke s tim formatom naziva datoteke iz trenutnog direktorija u aplikaciji u aplikacija mapa.
  4. POKRENI npm instalaciju: Ova naredba će instalirati potrebne pakete i ovisnosti koje zahtijeva aplikacija unutar Docker spremnika.
  5. KOPIRATI. .: nalaže Dockeru da kopira sve datoteke izvornog koda aplikacije iz trenutnog direktorija u /app mapa.
  6. POKRENI npm pokreni izgradnju: Naredba gradi Nest.js aplikaciju prije stvaranja Docker slike. Kompajlira TypeScript kod u JavaScript i pohranjuje izlaz procesa izrade u a dist imenik.
  7. CMD: Definira naredbu koja se pokreće kada se spremnik pokrene. U ovom slučaju, mi ćemo pokrenuti npm pokrenuti početak: dev naredba, koja će pokrenuti poslužitelj u razvojnom načinu.

Ova konfiguracija omogućuje aplikaciji aktivno praćenje promjena koda. Nakon što se otkriju promjene, spremnik će se automatski podvrgnuti ponovnoj izgradnji.

Stvorite Docker Compose datoteku

U korijenskom direktoriju mape projekta stvorite novu docker-compose.yml datoteku i dodajte sljedeći sadržaj:

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 će koristiti ove upute za izradu i pokretanje dviju slika u dva Docker spremnika. Prvi spremnik, poslužitelj, ugostit će sliku aplikacije; radi na portu 3000.

Drugi spremnik će ugostiti sliku PostgreSQL baze podataka. Ne morate navesti Dockerfile za ovu sliku—Docker će upotrijebiti već postojeću PostgreSQL sliku u Dockerovom registru slika za izradu.

Pokrenite Docker kontejnere

Na kraju, nastavite s izgradnjom slika i pokrenite spremnike izvođenjem sljedeće naredbe:

docker compose up

Nakon što je proces uspješno dovršen, trebali biste vidjeti slične podatke dnevnika na svom terminalu.

Sada, kada su i vaš web poslužitelj i spremnici baze podataka pokrenuti, samo naprijed i dodajte više funkcionalnosti svojoj Nest.js aplikaciji. Na primjer, možete izgraditi Nest.js CRUD REST API.

Guranje Docker slika u Docker Hub

Guranje Docker slika na Docker Hub gotovo je slično guranju projekata na GitHub. Slijedite ove korake kako biste gurnuli Docker sliku Nest.js aplikacije u Docker Hub.

  1. Prijeđite na Docker Hub, prijavite se i prijavite na stranicu pregleda svog računa.
  2. Kliknite na Stvori spremište gumb, unesite naziv svog repozitorija, odredite njegovu vidljivost odabirom bilo kojeg Javnost ili Privatna, a zatim kliknite Stvoriti.
  3. Sada se morate prijaviti na svoj račun putem terminala pokretanjem naredbe u nastavku, a zatim unijeti svoje korisničko ime i lozinku za Docker.
    docker login
  4. Zatim ažurirajte naziv Dockerove slike kako bi odgovarao ovom formatu: / pokretanjem donje naredbe.
    docker tag /
  5. Na kraju, pritisnite Docker sliku.
    docker push /

Korištenje Dockerove tehnologije kontejnerizacije u razvoju

Dockerova tehnologija kontejnerizacije omogućuje vam spajanje aplikacije zajedno sa svim njezinim ovisnostima u Docker slike. Te slike zatim mogu glatko raditi unutar spremnika u različitim razvojnim i proizvodnim okruženjima bez ikakvih problema.