अपने Nest.js अनुप्रयोगों को निर्बाध रूप से तैनात करने और चलाने के लिए Docker और Docker Compose का उपयोग करें।
"लेकिन यह मेरे कंप्यूटर पर काम करता है..." डेवलपर का मजाक विभिन्न प्रणालियों में एप्लिकेशन को तैनात करने और चलाने की चुनौती को पूरी तरह से उजागर करता है।
वास्तविक परेशानी आवश्यक निर्भरताओं को कॉन्फ़िगर करने और यह सुनिश्चित करने में है कि सॉफ़्टवेयर संस्करण आपके एप्लिकेशन के साथ संगत हैं। इस समस्या के एक बेहतरीन समाधान में डॉकर जैसी कंटेनरीकरण तकनीक का उपयोग शामिल है।
यह आपको कंटेनर छवि के भीतर सभी आवश्यक निर्भरताओं के साथ आसानी से एप्लिकेशन को तैनात करने और चलाने की अनुमति देता है; उत्पादन प्रणालियों में व्यापक विन्यास की आवश्यकता को समाप्त करना।
डॉकर और डॉकर कंपोज़ को समझना
डाक में काम करनेवाला मज़दूर एक ओपन-सोर्स डेवलपमेंट प्लेटफ़ॉर्म है जो पोर्टेबल छवियों के रूप में उनकी निर्भरता के साथ-साथ निर्माण और पैकेजिंग अनुप्रयोगों में उपयोग की जाने वाली कंटेनरीकरण तकनीक प्रदान करता है।
फिर इन छवियों को पृथक कंटेनर वातावरण में निष्पादन योग्य घटकों के रूप में चलाया जाता है। इन कंटेनरों के भीतर एप्लिकेशन चलाने से किसी भी संगतता समस्या के बिना विभिन्न उत्पादन प्रणालियों में लगातार एप्लिकेशन प्रदर्शन की गारंटी मिलती है।
वहीं दूसरी ओर, डॉकर कंपोज़ एक टूल है इसका उपयोग मल्टी-कंटेनर अनुप्रयोगों को परिभाषित करने और प्रबंधित करने की प्रक्रिया को सरल बनाने के लिए डॉकर के साथ मिलकर किया जाता है।
जबकि डॉकर का उपयोग मुख्य रूप से व्यक्तिगत कंटेनरों को प्रबंधित करने के लिए किया जाता है, डॉकर कंपोज़ आपको कई कंटेनरों के कॉन्फ़िगरेशन को प्रबंधित करने की अनुमति देता है जिन्हें एकल एप्लिकेशन के रूप में चलाने की आवश्यकता होती है।
यह विशेष रूप से तब उपयोगी होता है जब किसी एप्लिकेशन में कई सेवाएँ होती हैं जिन्हें एक साथ काम करने की आवश्यकता होती है, जैसे कई आश्रित एपीआई सेवाएँ और डेटाबेस, अन्य।
इससे पहले कि आप कोड में उतरें, आपको इंस्टॉल करना होगा डॉकर डेस्कटॉप आपकी स्थानीय मशीन पर. आधिकारिक दस्तावेज से सिस्टम-विशिष्ट आवश्यकताओं और इंस्टॉलेशन चरणों को पढ़ें।
आप इस एप्लिकेशन का कोड इसमें पा सकते हैं GitHub भण्डार.
एक Nest.js प्रोजेक्ट सेट करें
यह मार्गदर्शिका आपको दो डॉकर कंटेनरों को स्पिन करने की प्रक्रिया के बारे में बताएगी जो एकल Nest.js एप्लिकेशन के रूप में निर्बाध रूप से काम करते हैं। पहला कंटेनर Nest.js वेब सर्वर डॉकर छवि का एक उदाहरण रखेगा, जबकि दूसरा कंटेनर डॉकर की PostgreSQL डेटाबेस छवि निष्पादित करेगा।
आरंभ करने के लिए, Nest.js कमांड लाइन टूल इंस्टॉल करें:
npm i -g @nestjs/cli
अब, अपने टर्मिनल में नीचे दिए गए कमांड को चलाकर एक नया Nest.js प्रोजेक्ट बनाएं।
nest new docker-nest-app
इसके बाद, सीएलआई टूल आपके लिए प्रोजेक्ट बनाने के लिए चुनने के लिए कई पैकेज मैनेजर प्रदर्शित करेगा। अपना पसंदीदा विकल्प चुनें. इस मामले में, हम उपयोग करेंगे एनपीएम, नोड पैकेज मैनेजर.
अंत में, आप प्रोजेक्ट निर्देशिका पर नेविगेट कर सकते हैं, और विकास सर्वर को स्पिन कर सकते हैं।
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
अब, मॉड्यूल बन जाने के बाद, खोलें डेटाबेस/डेटाबेस.मॉड्यूल.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 {}
एक बार जब आप इस टाइपओआरएम कॉन्फ़िगरेशन का उपयोग करके डॉकर पोस्टग्रेएसक्यूएल छवि सेट कर लेते हैं, तो 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, 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" ]
यहां बताया गया है कि प्रत्येक कमांड क्या दर्शाता है:
- से: यह निर्देश उस आधार छवि को निर्दिष्ट करता है जिसका उपयोग डॉकर को एप्लिकेशन की छवि बनाने के लिए करना चाहिए।
- वर्कडिर: यह कमांड डॉकर को सेट करने का निर्देश देता है /app कंटेनर के भीतर ऐप के लिए कार्यशील निर्देशिका के रूप में निर्देशिका।
- कॉपीपैकेज*.json./: एप्लिकेशन में वर्तमान निर्देशिका से उस फ़ाइल नाम प्रारूप वाली सभी फ़ाइलों को कॉपी करता है अनुप्रयोग फ़ोल्डर.
- एनपीएम इंस्टॉल चलाएँ: यह कमांड डॉकर कंटेनर के भीतर एप्लिकेशन के लिए आवश्यक आवश्यक पैकेज और निर्भरता स्थापित करेगा।
- प्रतिलिपि. .: डॉकर को वर्तमान निर्देशिका से सभी एप्लिकेशन के स्रोत कोड फ़ाइलों को कॉपी करने का निर्देश देता है /app फ़ोल्डर.
- रन एनपीएम रन बिल्ड: डॉकर छवि बनाने से पहले कमांड Nest.js एप्लिकेशन बनाता है। यह टाइपस्क्रिप्ट कोड को जावास्क्रिप्ट में संकलित करता है और बिल्ड प्रक्रिया आउटपुट को संग्रहीत करता है जिला निर्देशिका।
- अध्यक्ष एवं प्रबंध निदेशक: कंटेनर शुरू होने पर चलाने के लिए कमांड को परिभाषित करता है। इस मामले में, हम चलाएंगे एनपीएम रन स्टार्ट: डेव कमांड, जो सर्वर को डेवलपमेंट मोड में शुरू करेगा।
यह कॉन्फ़िगरेशन एप्लिकेशन को कोड परिवर्तनों की सक्रिय रूप से निगरानी करने में सक्षम बनाता है। एक बार परिवर्तनों का पता चलने पर, कंटेनर स्वचालित रूप से पुनर्निर्माण से गुजर जाएगा।
डॉकर कंपोज़ फ़ाइल बनाएँ
अपने प्रोजेक्ट फ़ोल्डर की रूट डायरेक्टरी में, एक नया बनाएं 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:
डॉकर कंपोज़ दो छवियों को दो डॉकर कंटेनरों में बनाने और चलाने के लिए इन निर्देशों का उपयोग करेगा। पहला कंटेनर, सर्वर, एप्लिकेशन की छवि को होस्ट करेगा; पोर्ट 3000 पर चल रहा है।
दूसरा कंटेनर PostgreSQL डेटाबेस छवि होस्ट करेगा। आपको इस छवि के लिए एक Dockerfile निर्दिष्ट करने की आवश्यकता नहीं है - Docker इसे बनाने के लिए Docker की छवि रजिस्ट्री पर पहले से मौजूद PostgreSQL छवि का उपयोग करेगा।
डॉकर कंटेनर प्रारंभ करें
अंत में, निम्नलिखित कमांड चलाकर छवियां बनाने और कंटेनर शुरू करने के लिए आगे बढ़ें:
docker compose up
एक बार प्रक्रिया सफलतापूर्वक पूरी हो जाने पर, आपको अपने टर्मिनल पर समान लॉग जानकारी देखनी चाहिए।
अब, आपके वेब सर्वर और डेटाबेस कंटेनर दोनों के चालू होने के साथ, आगे बढ़ें और अपने Nest.js एप्लिकेशन में अधिक कार्यक्षमता जोड़ें। उदाहरण के लिए, आप कर सकते हैं एक Nest.js CRUD REST API बनाएं.
डॉकर छवियों को डॉकर हब पर धकेलना
डॉकर छवियों को डॉकर हब पर धकेलना लगभग परियोजनाओं को गिटहब पर धकेलने के समान है। Nest.js एप्लिकेशन डॉकर छवि को डॉकर हब पर पुश करने के लिए इन चरणों का पालन करें।
- वहां जाओ डॉकर हब, साइन अप करें और अपने खाते के अवलोकन पृष्ठ पर लॉग इन करें।
- क्लिक करें भंडार बनाएं बटन, अपने भंडार का नाम भरें, किसी एक को चुनकर उसकी दृश्यता निर्दिष्ट करें जनता या निजी, और फिर क्लिक करें बनाएं.
- अब, आपको नीचे दिए गए कमांड को चलाकर टर्मिनल के माध्यम से अपने खाते में लॉग इन करना होगा, और फिर, अपना डॉकर उपयोगकर्ता नाम और पासवर्ड प्रदान करना होगा।
docker login
- इसके बाद, इस प्रारूप से मेल खाने के लिए डॉकर की छवि का नाम अपडेट करें:
/ नीचे दिए गए आदेश को चलाकर.docker tag
/ - अंत में, डॉकर छवि को पुश करें।
docker push
/
विकास में डॉकर की कंटेनरीकरण प्रौद्योगिकी का उपयोग
डॉकर की कंटेनरीकरण तकनीक आपको किसी एप्लिकेशन को उसकी सभी निर्भरताओं के साथ डॉकर छवियों में बंडल करने में सक्षम बनाती है। ये छवियां विभिन्न विकास और उत्पादन परिवेशों में कंटेनरों के भीतर बिना किसी समस्या के आसानी से चल सकती हैं।