Искористите Доцкер и Доцкер Цомпосе да бисте неприметно применили и покренули своје Нест.јс апликације.

„Али ради на мом рачунару...“ шала програмера савршено наглашава изазов постављања и покретања апликација на различитим системима.

Права мука лежи у конфигурисању потребних зависности и обезбеђивању да су верзије софтвера компатибилне са вашом апликацијом. Одлично решење за овај проблем укључује коришћење технологије контејнеризације као што је Доцкер.

Омогућава вам да без напора постављате и покрећете апликације—са свим потребним зависностима—у оквиру слике контејнера; елиминишући потребу за екстензивном конфигурацијом у производним системима.

Разумевање Доцкер-а и Доцкер Цомпосе-а

Доцкер је развојна платформа отвореног кода која обезбеђује технологију контејнеризације која се користи у изградњи и паковању апликација уз њихове зависности као преносиве слике.

Ове слике се затим покрећу као извршне компоненте унутар изолованих окружења контејнера. Покретање апликација унутар ових контејнера гарантује доследне перформансе апликација у различитим производним системима без икаквих проблема са компатибилношћу.

instagram viewer

С друге стране, Доцкер Цомпосе је алатка који се користи заједно са Доцкер-ом да поједностави процес дефинисања и управљања апликацијама са више контејнера.

Док се Доцкер првенствено користи за управљање појединачним контејнерима, Доцкер Цомпосе вам омогућава да управљате конфигурацијом више контејнера који треба да се покрећу као једна апликација.

Ово је посебно корисно када се апликација састоји од више услуга које треба да раде заједно, као што је неколико зависних АПИ услуга и базе података, између осталог.

Пре него што зароните у код, морате га инсталирати Доцкер Десктоп на вашој локалној машини. Прођите кроз захтеве специфичне за систем и кораке инсталације из званичне документације.

Код ове апликације можете пронаћи у њој ГитХуб репозиторијум.

Подесите Нест.јс пројекат

Овај водич ће вас провести кроз процес окретања два Доцкер контејнера који неприметно раде као једна Нест.јс апликација. Први контејнер ће садржати инстанцу Доцкер слике веб сервера Нест.јс, док ће други контејнер извршити Доцкер-ову слику ПостгреСКЛ базе података.

Да бисте започели, инсталирајте Нест.јс алатку командне линије:

npm i -g @nestjs/cli

Сада креирајте нови Нест.јс пројекат тако што ћете покренути наредбу испод у свом терминалу.

nest new docker-nest-app

Затим, ЦЛИ алат ће приказати неколико менаџера пакета које можете изабрати да бисте креирали пројекат. Одаберите жељену опцију. У овом случају, користићемо нпм, менаџер пакета чворова.

На крају, можете се кретати до директоријума пројекта и покренути развојни сервер.

cd docker-nest-app
npm run start

Креирајте модул базе података

Прво, инсталирајте ове зависности:

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

Затим, у основном директоријуму вашег пројекта, креирајте а .енв датотеку и додајте следеће вредности конфигурације везе са базом података:

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

На крају, само напред и креирајте модул базе података.

nest g module database

Сада, након што је модул креиран, отворите база података/датабасе.модуле.тс датотеку и укључите следећи конфигурациони код базе података:

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

Када подесите Доцкер ПостгреСКЛ слику користећи ову ТипеОРМ конфигурацију, Нест.јс апликација ће успоставити везу са базом података.

Ажурирајте датотеку апп.модуле.тс

На крају, ажурирајте датотеку главног модула апликације да бисте укључили конфигурацију за модул базе података.

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

Подесите Доцкерфиле

Доцкерфиле обухвата потребан скуп инструкција потребних Доцкер машини за креирање Доцкер слике. Ова слика обухвата изворни код апликације и све њене зависности.

У основном директоријуму вашег пројекта креирајте нову датотеку и назовите је Доцкерфиле. Затим додајте следећи садржај:

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

Ево шта свака команда представља:

  1. ИЗ: Ово упутство наводи основну слику коју Доцкер треба да користи за прављење слике апликације.
  2. ВОРКДИР: Ова команда налаже Доцкер-у да постави /app директоријум као радни директоријум за апликацију унутар контејнера.
  3. ЦОПИпакет*.јсон./: Копира све датотеке са тим форматом назива датотеке из тренутног директоријума у ​​апликацији у апликација фолдер.
  4. РУН нпм инсталл: Ова команда ће инсталирати потребне пакете и зависности које захтева апликација унутар Доцкер контејнера.
  5. ЦОПИ. .: Наређује Доцкер-у да копира све датотеке изворног кода апликације из тренутног директоријума у /app фолдер.
  6. РУН нпм рун буилд: Команда прави Нест.јс апликацију пре креирања Доцкер слике. Он компајлира ТипеСцрипт код у ЈаваСцрипт и чува излаз процеса прављења у а дист именик.
  7. ЦМД: Дефинише наредбу која се покреће када се контејнер покрене. У овом случају, ми ћемо покренути нпм рун старт: дев команду, која ће покренути сервер у развојном режиму.

Ова конфигурација омогућава апликацији да активно прати промене кода. Када се промене открију, контејнер ће аутоматски бити подвргнут поновној изградњи.

Креирајте датотеку Доцкер Цомпосе

У основном директоријуму фасцикле вашег пројекта креирајте нову доцкер-цомпосе.имл датотеку и додајте следећи садржај:

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:

Доцкер Цомпосе ће користити ова упутства за прављење и покретање две слике у два Доцкер контејнера. Први контејнер, сервер, ће угостити слику апликације; ради на порту 3000.

Други контејнер ће угостити слику ПостгреСКЛ базе података. Не морате да наведете Доцкерфиле за ову слику — Доцкер ће користити већ постојећу ПостгреСКЛ слику у Доцкеровом регистру слика да би је направио.

Покрените Доцкер контејнере

Коначно, наставите да правите слике и покрените контејнере тако што ћете покренути следећу команду:

docker compose up

Када се процес успешно заврши, требало би да видите сличне информације дневника на свом терминалу.

Сада, када су и ваш веб сервер и контејнери базе података покренути, само напред и додајте више функционалности вашој Нест.јс апликацији. На пример, можете направите Нест.јс ЦРУД РЕСТ АПИ.

Пребацивање Доцкер слика у Доцкер Хуб

Гурање Доцкер слика у Доцкер Хуб је скоро слично гурању пројеката на ГитХуб. Пратите ове кораке да бисте гурнули Доцкер слику апликације Нест.јс у Доцкер Хуб.

  1. Пређите на Доцкер Хуб, региструјте се и пријавите се на страницу са прегледом свог налога.
  2. Кликните Направите спремиште дугме, попуните име вашег спремишта, одредите његову видљивост тако што ћете изабрати било које Јавно или Приватни, а затим кликните Креирај.
  3. Сада морате да се пријавите на свој налог преко терминала тако што ћете покренути наредбу испод, а затим унети своје Доцкер корисничко име и лозинку.
    docker login
  4. Затим ажурирајте име слике Доцкер-а тако да одговара овом формату: / покретањем наредбе испод.
    docker tag /
  5. На крају, притисните Доцкер слику.
    docker push /

Коришћење Доцкер-ове технологије контејнеризације у развоју

Доцкер-ова технологија контејнеризације вам омогућава да повежете апликацију заједно са свим њеним зависностима у Доцкер слике. Ове слике онда могу несметано да раде унутар контејнера у различитим развојним и производним окружењима без икаквих проблема.