Használja a Dockert és a Docker Compose-t a Nest.js-alkalmazások zökkenőmentes üzembe helyezéséhez és futtatásához.
"De az én számítógépemen működik..." a fejlesztői poén tökéletesen rávilágít az alkalmazások különböző rendszereken történő telepítésének és futtatásának kihívására.
Az igazi gond a szükséges függőségek konfigurálásában és annak biztosításában rejlik, hogy a szoftververziók kompatibilisek legyenek az alkalmazással. A probléma nagyszerű megoldása a konténerezési technológia, például a Docker használata.
Lehetővé teszi az alkalmazások könnyű üzembe helyezését és futtatását – minden szükséges függőséggel – a konténer lemezképen belül; kiküszöböli a gyártórendszerek kiterjedt konfigurációjának szükségességét.
A Docker és a Docker Compose megértése
Dokkmunkás egy nyílt forráskódú fejlesztői platform, amely az építési és csomagolási alkalmazásokhoz használt konténerezési technológiát, valamint azok függőségét hordozható képként biztosítja.
Ezek a lemezképek ezután futtatható komponensekként futnak izolált tárolókörnyezetekben. Az alkalmazások ezekben a tárolókban való futtatása garantálja az alkalmazások egyenletes teljesítményét a különböző éles rendszerekben, kompatibilitási problémák nélkül.
Másrészről, A Docker Compose egy eszköz amelyet a Dockerrel együtt használnak a többtárolós alkalmazások meghatározásának és kezelésének egyszerűsítésére.
Míg a Docker elsősorban egyedi tárolók kezelésére szolgál, a Docker Compose lehetővé teszi több tároló konfigurációjának kezelését, amelyeknek egyetlen alkalmazásként kell futniuk.
Ez különösen akkor hasznos, ha egy alkalmazás több szolgáltatásból áll, amelyeknek együtt kell működniük, például több függő API-szolgáltatásból és adatbázisokból.
Mielőtt belemerülne a kódba, telepítenie kell Docker Desktop a helyi gépen. Végezze el a rendszerspecifikus követelményeket és a telepítési lépéseket a hivatalos dokumentációból.
Az alkalmazás kódja megtalálható benne GitHub adattár.
Nest.js projekt beállítása
Ez az útmutató végigvezeti Önt két Docker-tároló létrehozásának folyamatán, amelyek zökkenőmentesen működnek egyetlen Nest.js-alkalmazásként. Az első tároló a Nest.js webszerver Docker-lemezképének egy példányát fogja tartalmazni, míg a második tároló a Docker PostgreSQL-adatbázisképét hajtja végre.
A kezdéshez telepítse a Nest.js parancssori eszközt:
npm i -g @nestjs/cli
Most hozzon létre egy új Nest.js projektet az alábbi parancs futtatásával a terminálon.
nest new docker-nest-app
Ezután a CLI eszköz több csomagkezelőt jelenít meg, amelyek közül választhat a projekt létrehozásához. Válassza ki a kívánt opciót. Ebben az esetben használjuk npm, a Node Package Manager.
Végül navigálhat a projektkönyvtárba, és felpörgeti a fejlesztőkiszolgálót.
cd docker-nest-app
npm run start
Hozza létre az adatbázis modult
Először telepítse ezeket a függőségeket:
npm install pg typeorm @nestjs/typeorm @nestjs/config
Ezután a projekt gyökérkönyvtárában hozzon létre egy .env fájlt, és adja hozzá a következő adatbázis-kapcsolat konfigurációs értékeit:
DATABASE_HOST="db"
DATABASE_PORT=5432
DATABASE_USER="testUser"
DATABASE_PASSWORD="mypassword123"
Végül folytassa az adatbázis modul létrehozásával.
nest g module database
Most, a modul létrehozása után nyissa meg a adatbázis/adatbázis.module.ts fájlt, és tartalmazza a következő adatbázis-konfigurációs kódot:
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 {}
Miután beállította a Docker PostgreSQL-lemezképet ezzel a TypeORM-konfigurációval, a Nest.js alkalmazás kapcsolatot létesít az adatbázissal.
Frissítse az app.module.ts fájlt
Végül frissítse a fő alkalmazásmodul fájlját, hogy belefoglalja az adatbázis-modul konfigurációját.
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 {}
Dockerfile beállítása
A Dockerfile rögzíti a Docker-motor számára a Docker-kép létrehozásához szükséges utasításokat. Ez a kép az alkalmazás forráskódját és annak összes függőségét tartalmazza.
A projekt gyökérkönyvtárában hozzon létre egy új fájlt, és nevezze el Dockerfile-nak. Ezután adja hozzá a következő tartalmat:
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" ]
Az egyes parancsok a következők:
- TÓL TŐL: Ez az utasítás azt az alapképet határozza meg, amelyet a Dockernek használnia kell az alkalmazás képfájljának létrehozásához.
- WORKDIR: Ez a parancs arra utasítja a Dockert, hogy állítsa be a /app könyvtárat, mint az alkalmazás munkakönyvtárát a tárolóban.
- MÁSOLATcsomag*.json./: Az összes fájlt az adott fájlnévformátummal átmásolja az alkalmazás aktuális könyvtárából a kb mappát.
- RUN npm telepítés: Ez a parancs telepíti az alkalmazás által igényelt szükséges csomagokat és függőségeket a Docker-tárolóban.
- MÁSOLAT. .: utasítja a Dockert, hogy másolja át az alkalmazás összes forráskódfájlját az aktuális könyvtárból a /app mappát.
- RUN npm futás build: A parancs létrehozza a Nest.js alkalmazást a Docker lemezkép létrehozása előtt. A TypeScript kódot JavaScript-be fordítja, és az összeállítási folyamat kimenetét a ker Könyvtár.
- CMD: Meghatározza a tároló indításakor futtatandó parancsot. Ebben az esetben futtatjuk a npm futás indítása: dev parancsot, amely elindítja a szervert fejlesztési módban.
Ez a konfiguráció lehetővé teszi az alkalmazás számára, hogy aktívan figyelje a kódváltozásokat. A változtatások észlelése után a tároló automatikusan újjáépítésen megy keresztül.
Hozd létre a Docker Compose fájlt
A projektmappa gyökérkönyvtárában hozzon létre egy újat docker-compose.yml fájlt, és adja hozzá a következő tartalmat:
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:
A Docker Compose ezeket az utasításokat fogja használni a két kép összeállításához és futtatásához két Docker-tárolóban. Az első tároló, a szerver fogja tárolni az alkalmazás képét; a 3000-es porton fut.
A második tároló a PostgreSQL-adatbázis lemezképének ad otthont. Ehhez a képfájlhoz nem kell Docker-fájlt megadnia – a Docker a Docker képregisztrációs adatbázisában már meglévő PostgreSQL-lemezképet fogja használni a létrehozásához.
Indítsa el a Docker Containers alkalmazást
Végül folytassa a képek felépítésével és indítsa el a tárolókat a következő parancs futtatásával:
docker compose up
A folyamat sikeres befejezése után hasonló naplóadatokat kell látnia a terminálon.
Most, hogy a webszerver és az adatbázis-tárolók is fel vannak építve és futnak, folytassa a további funkciókkal a Nest.js alkalmazással. Például megteheti hozzon létre egy Nest.js CRUD REST API-t.
Docker Images küldése a Docker Hub-ra
A Docker-képek Docker Hub-ra küldése szinte hasonló a projektek GitHubra tolásához. Kövesse az alábbi lépéseket a Nest.js alkalmazás Docker-lemezképének a Docker Hub-ra küldéséhez.
- Irány oda Docker Hub, regisztráljon, és jelentkezzen be fiókja áttekintő oldalára.
- Kattints a Leraktár létrehozása gombra, írja be a tárhely nevét, és adja meg a láthatóságát bármelyik kiválasztásával Nyilvános vagy Magán, majd kattintson a gombra Teremt.
- Most be kell jelentkeznie fiókjába a terminálon keresztül az alábbi parancs futtatásával, majd adja meg Docker felhasználónevét és jelszavát.
docker login
- Ezután frissítse a Docker képnevét, hogy megfeleljen a következő formátumnak:
/ az alábbi parancs futtatásával.docker tag
/ - Végül nyomja meg a Docker-képet.
docker push
/
A Docker konténerezési technológiájának felhasználása a fejlesztésben
A Docker konténerezési technológiája lehetővé teszi, hogy egy alkalmazást az összes függőségével együtt Docker-képfájlokba csomagoljon. Ezek a képek ezután zökkenőmentesen futhatnak a konténerekben különböző fejlesztői és éles környezetekben, minden probléma nélkül.