השתמש ב-Docker וב-Docker Compose כדי לפרוס ולהפעיל בצורה חלקה את יישומי Nest.js שלך.

"אבל זה עובד על המחשב שלי..." בדיחה של מפתחים מדגישה בצורה מושלמת את האתגר של פריסה והרצה של יישומים על פני מערכות שונות.

הטרחה האמיתית טמונה בהגדרת התלות הנדרשת ובהבטחת גרסאות התוכנה תואמות ליישום שלך. פתרון מעולה לבעיה זו כרוך בשימוש בטכנולוגיית קונטיינריזציה כגון Docker.

זה מאפשר לך לפרוס ולהריץ יישומים ללא מאמץ - עם כל התלות הנדרשת - בתוך תמונת המאגר; ביטול הצורך בתצורה נרחבת במערכות ייצור.

הבנת Docker ו- Docker Compose

דוקר היא פלטפורמת פיתוח בקוד פתוח המספקת טכנולוגיית קונטיינריזציה המשמשת בבנייה ואריזה של יישומים לצד התלות שלהם כתמונות ניידות.

תמונות אלה מופעלות לאחר מכן כרכיבי הפעלה בתוך סביבות מיכל מבודדות. הפעלת יישומים בתוך מיכלים אלה מבטיחה ביצועי יישומים עקביים במערכות ייצור שונות ללא בעיות תאימות.

מצד שני, Docker Compose הוא כלי המשמש יחד עם Docker כדי לפשט את תהליך ההגדרה והניהול של יישומים מרובי מכולות.

בעוד Docker משמש בעיקר לניהול קונטיינרים בודדים, Docker Compose מאפשר לך לנהל את התצורה של קונטיינרים מרובים שצריכים לפעול כאפליקציה אחת.

instagram viewer

זה שימושי במיוחד כאשר אפליקציה מורכבת משירותים מרובים שצריכים לעבוד יחד, כגון מספר שירותי API תלויים ומסדי נתונים, בין היתר.

לפני שאתה צולל לתוך הקוד, עליך להתקין Docker Desktop במחשב המקומי שלך. עברו על הדרישות הספציפיות למערכת ושלבי ההתקנה מהתיעוד הרשמי.

אתה יכול למצוא את הקוד של יישום זה בה GitHub מאגר.

הגדר פרויקט Nest.js

מדריך זה ידריך אותך בתהליך של יצירת שני מיכלי Docker שעובדים בצורה חלקה כאפליקציה אחת של Nest.js. הקונטיינר הראשון יכיל מופע של תמונת Docker של שרת האינטרנט Nest.js, בעוד שהמיכל השני יבצע את תמונת מסד הנתונים PostgreSQL של ​​Docker.

כדי להתחיל, התקן את כלי שורת הפקודה Nest.js:

npm i -g @nestjs/cli

כעת, צור פרויקט Nest.js חדש על ידי הפעלת הפקודה למטה בטרמינל שלך.

nest new docker-nest-app

לאחר מכן, כלי CLI יציג מספר מנהלי חבילות לבחירתך ליצירת הפרויקט. בחר באפשרות המועדפת עליך. במקרה זה, נשתמש npm, מנהל חבילות הצומת.

לבסוף, אתה יכול לנווט אל ספריית הפרויקט, ולסובב את שרת הפיתוח.

cd docker-nest-app
npm run start

צור את מודול מסד הנתונים

ראשית, התקן את התלות האלה:

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

לאחר מכן, בספריית השורש של הפרויקט שלך, צור א .env קובץ, והוסף את ערכי תצורת חיבור מסד הנתונים הבאים:

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

לבסוף, קדימה, צור את מודול מסד הנתונים.

nest g module database

כעת, לאחר יצירת המודול, פתח את ה database/database.module.ts קובץ וכלול את קוד תצורת מסד הנתונים הבא:

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

לאחר שתגדיר את תמונת Docker PostgreSQL באמצעות תצורת TypeORM זו, האפליקציה Nest.js תיצור חיבור למסד הנתונים.

עדכן את קובץ app.module.ts

לבסוף, עדכן את קובץ מודול היישום הראשי כדי לשלב את התצורה של מודול מסד הנתונים.

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

Dockerfile לוכד את קבוצת ההוראות הנדרשת על ידי מנוע Docker ליצירת תמונת Docker. תמונה זו מקיפה את קוד המקור של האפליקציה ואת כל התלות שלה.

בספריית השורש של הפרויקט שלך, צור קובץ חדש ושמו לו Dockerfile. לאחר מכן, הוסף את התכנים הבאים:

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. מ: הוראה זו מציינת את תמונת הבסיס שבה Docker צריך להשתמש כדי לבנות את תמונת היישום.
  2. WORKDIR: פקודה זו מורה ל-Docker להגדיר את /app ספרייה בתור ספריית העבודה של האפליקציה בתוך המכולה.
  3. עותקpackage*.json./: מעתיק את כל הקבצים עם פורמט שם הקובץ הזה מהספרייה הנוכחית ביישום ל- אפליקציה תיקייה.
  4. הפעל התקנה של npm: פקודה זו תתקין את החבילות והתלות הנדרשות הנדרשות על ידי היישום בתוך הקונטיינר של Docker.
  5. עותק. .: מורה ל-Docker להעתיק את כל קובצי קוד המקור של היישום מהספרייה הנוכחית אל ה- /app תיקייה.
  6. RUN npm run build: הפקודה בונה את אפליקציית Nest.js לפני יצירת תמונת Docker. הוא מרכיב את קוד TypeScript לתוך JavaScript ומאחסן את פלט תהליך הבנייה ב-a dist מַדרִיך.
  7. CMD: מגדיר את הפקודה להפעלה כאשר המיכל מתחיל. במקרה זה, נריץ את npm run start: dev הפקודה, שתפעיל את השרת במצב פיתוח.

תצורה זו מאפשרת לאפליקציה לפקח באופן פעיל על שינויים בקוד. לאחר זיהוי שינויים, המיכל יעבור בנייה מחדש אוטומטית.

צור את קובץ Docker Compose

בספריית השורש של תיקיית הפרויקט שלך, צור חדש docker-compose.yml קובץ, והוסיפו את התוכן הבא:

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 ישתמש בהוראות אלה כדי לבנות ולהפעיל את שתי התמונות בשני מכולות Docker. המיכל הראשון, השרת, יארח את תמונת האפליקציה; פועל על יציאה 3000.

המיכל השני יארח את תמונת מסד הנתונים PostgreSQL. אינך צריך לציין Dockerfile עבור תמונה זו - Docker ישתמש בתמונת PostgreSQL הקיימת מראש ברישום התמונות של Docker כדי לבנות אותה.

הפעל את Docker Containers

לבסוף, המשך לבנות את התמונות ולהתחיל את הקונטיינרים על ידי הפעלת הפקודה הבאה:

docker compose up

לאחר השלמת התהליך בהצלחה, אתה אמור לראות מידע יומן דומה במסוף שלך.

כעת, כאשר גם שרת האינטרנט וגם מיכלי מסד הנתונים פועלים, קדימה, הוסף פונקציונליות נוספת לאפליקציית Nest.js שלך. למשל, אתה יכול לבנות Nest.js CRUD REST API.

דחיפת תמונות Docker ל- Docker Hub

דחיפת תמונות Docker ל- Docker Hub כמעט דומה לדחיפת פרויקטים ל- GitHub. בצע את השלבים הבאים כדי לדחוף את תמונת Docker של אפליקציית Nest.js אל Docker Hub.

  1. פנה אל Docker Hub, הירשם והיכנס לדף הסקירה הכללית של חשבונך.
  2. לחץ על צור מאגר כפתור, מלא את שם המאגר שלך, ציין את הנראות שלו על ידי בחירה באחד מהם פּוּמְבֵּי אוֹ פְּרָטִי, ולאחר מכן לחץ לִיצוֹר.
  3. כעת, עליך להיכנס לחשבונך דרך המסוף על ידי הפעלת הפקודה למטה, ולאחר מכן, לספק את שם המשתמש והסיסמה שלך ב- Docker.
    docker login
  4. לאחר מכן, עדכן את שם התמונה של Docker כך שיתאים לפורמט הזה: / על ידי הפעלת הפקודה למטה.
    docker tag /
  5. לבסוף, דחוף את תמונת Docker.
    docker push /

שימוש בטכנולוגיית Containerization של Docker בפיתוח

טכנולוגיית הקונטיינריזציה של Docker מאפשרת לך לאגד אפליקציה יחד עם כל התלות שלה לתוך תמונות Docker. תמונות אלו יכולות לפעול בצורה חלקה בתוך קונטיינרים בסביבות פיתוח וייצור שונות ללא בעיות.