নেস্টজেএস মাইক্রোসার্ভিসেসে ডকার সমস্যা সমাধান করা
বিকাশ করার সময় ক নেস্টজেএস মাইক্রোসার্ভিস-ভিত্তিক RestAPI, একটি ডকার কন্টেইনারের মধ্যে চলমান পরিষেবাগুলি কখনও কখনও অপ্রত্যাশিত সমস্যার দিকে নিয়ে যেতে পারে। এরকম একটি সমস্যা দেখা দেয় যখন ডকার খুঁজে পেতে অক্ষম হয় @nestjs/cli/bin/nest.js মডিউল, পরিষেবাটি চালানো থেকে বাধা দেয়।
এই সমস্যাটি বিশেষত হতাশাজনক যখন আপনি ইতিমধ্যে একাধিক পরিষেবা যেমন প্রমাণীকরণ এবং সংরক্ষণগুলি সেট আপ করেছেন এবং সেগুলি তাদের নিজ নিজ পাত্রে সুচারুভাবে চালানো নিশ্চিত করার জন্য কাজ করছেন৷ মুখোমুখি হওয়া a MODULE_NOT_FOUND ত্রুটি উন্নয়ন থামাতে পারে এবং অবিলম্বে সমস্যা সমাধানের প্রয়োজন।
সমস্যাটি প্রায়শই ডকার কন্টেইনারের মধ্যে নির্ভরতাগুলি কীভাবে পরিচালনা করা হয় তার সাথে সম্পর্কিত, বিশেষত যখন a ব্যবহার করে নোড: আল্পাইন বেস ইমেজ এবং প্যাকেজ ম্যানেজার পছন্দ করে পিএনপিএম. ত্রুটি লগ সাধারণত ধারক এর একটি অনুপস্থিত মডিউল নির্দেশ করে node_modules ডিরেক্টরি, যা পরিষেবা শুরু করার প্রক্রিয়াকে প্রভাবিত করে।
এই নির্দেশিকায়, আমরা এই ত্রুটির সাধারণ কারণগুলির মধ্য দিয়ে হেঁটে যাব, সম্ভাব্য সমাধানগুলি নিয়ে আলোচনা করব এবং এটি সমাধানের জন্য সুপারিশগুলি প্রদান করব, যাতে আপনার NestJS পরিষেবাগুলি ডকার পরিবেশে প্রত্যাশিতভাবে চলে তা নিশ্চিত করে৷
আদেশ | ব্যবহারের উদাহরণ |
---|---|
@nestjs/cli | এই কমান্ডটি বিশ্বব্যাপী NestJS CLI ইনস্টল করে, যা Docker-এর মধ্যে NestJS অ্যাপ্লিকেশন চালানোর জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি এড়াতে সাহায্য করে "@nestjs/cli/bin/nest.js মডিউল খুঁজে পাওয়া যাচ্ছে না" ত্রুটি |
RUN npm install -g pnpm | ডকার কন্টেইনারে বিশ্বব্যাপী pnpm প্যাকেজ ম্যানেজার ইনস্টল করে, যা নিশ্চিত করে যে সমস্ত নির্ভরতা, বিশেষ করে pnpm-এর স্কোপ সঠিকভাবে ইনস্টল করা হয়েছে। |
pnpm run build | পিএনপিএম ব্যবহার করে নির্দিষ্ট পরিষেবার (প্রমাণ বা সংরক্ষণ) বিল্ড কমান্ড কার্যকর করে, এটি নিশ্চিত করে যে অ্যাপটি বিকাশ এবং উত্পাদন উভয় পরিবেশের জন্য সঠিকভাবে তৈরি করা হয়েছে। |
COPY --from=development /usr/src/app/dist | এই ডকার মাল্টি-স্টেজ বিল্ড কমান্ড ডেভেলপমেন্ট স্টেজ থেকে প্রোডাকশন স্টেজে বিল্ড আউটপুট কপি করে, ডকার ইমেজ সাইজ অপ্টিমাইজ করে এবং অ্যাপটি চালানোর জন্য প্রস্তুত তা নিশ্চিত করে। |
CMD ["node", "dist/apps/auth/main.js"] | এই কমান্ডটি চালানোর জন্য ব্যবহৃত হয় প্রমাণ বিল্ট ডিস্ট ডিরেক্টরি থেকে সরাসরি প্রধান জাভাস্ক্রিপ্ট ফাইল নির্বাহ করে উৎপাদনে পরিষেবা। |
testEnvironment: 'node' | জেস্ট কনফিগারেশনে, এই কমান্ডটি পরীক্ষার পরিবেশকে Node.js-এ সেট করে, নিশ্চিত করে যে ইউনিট পরীক্ষাগুলি সঠিকভাবে ব্যাকএন্ড পরিবেশকে অনুকরণ করতে পারে। |
describe('Nest CLI Module Check') | জেস্টে, এই ফাংশনটি পরীক্ষা করার জন্য একটি পরীক্ষা স্যুট সংজ্ঞায়িত করে কিনা নেস্ট CLI মডিউল নির্ভরতাগুলি সমাধান করা হয়েছে তা নিশ্চিত করে ডকার কন্টেইনারের মধ্যে সঠিকভাবে ইনস্টল করা হয়েছে। |
exec('nest --version') | যাচাই করার জন্য পরীক্ষার ভিতরে একটি শেল কমান্ড কার্যকর করে নীড় সিএলআই ডকার কন্টেইনারে উপলব্ধ, মডিউলটি অনুপস্থিত বা ভুল কনফিগার করা হয়েছে কিনা তা সনাক্ত করতে সহায়তা করে। |
ডকার এবং নেস্টজেএস সিএলআই ইন্টিগ্রেশন বোঝা
উদাহরণগুলিতে প্রদত্ত প্রথম ডকারফাইলটি সমাধানের উপর দৃষ্টি নিবদ্ধ করে MODULE_NOT_FOUND NestJS CLI এর সাথে সম্পর্কিত ত্রুটি যেমন পরিষেবাগুলি চালানোর সময় প্রমাণ এবং সংরক্ষণ. এটি নিশ্চিত করার মাধ্যমে অর্জন করা হয় যে প্রয়োজনীয় বিশ্বব্যাপী নির্ভরতা উন্নয়ন এবং উৎপাদন উভয় পর্যায়েই ইনস্টল করা আছে। Dockerfile একটি লাইটওয়েট ব্যবহার করে শুরু হয় নোড: আল্পাইন চিত্র, যা সামগ্রিক চিত্রের আকার কমাতে সাহায্য করে। এটি তারপর প্যাকেজ ম্যানেজার ইনস্টল করে পিএনপিএম এবং সমস্ত প্রয়োজনীয় মডিউল পরিবেশে উপলব্ধ রয়েছে তা নিশ্চিত করতে বিশ্বব্যাপী NestJS CLI।
একবার CLI এবং প্যাকেজ ম্যানেজার ইনস্টল হয়ে গেলে, স্ক্রিপ্ট প্রয়োজনীয় ফাইলগুলি অনুলিপি করে যেমন package.json এবং কনফিগারেশন ফাইল, যা প্রকল্প নির্ভরতা ইনস্টল করার জন্য গুরুত্বপূর্ণ। নির্ভরতা ইনস্টল করার পরে, প্রকল্পটি কমান্ড ব্যবহার করে নির্মিত হয় পিএনপিএম রান বিল্ড, যা একটি বিতরণযোগ্য বিন্যাসে উত্স কোড কম্পাইল করে। এই পদক্ষেপটি প্রয়োজনীয় কারণ সংকলিত আউটপুটটি চূড়ান্ত উত্পাদন পরিবেশে ব্যবহার করা হবে, উন্নয়ন সরঞ্জামগুলি থেকে অপ্রয়োজনীয় ওভারহেড এড়ানো।
ডকারফাইলের দ্বিতীয় পর্যায়ে একটি মাল্টি-স্টেজ বিল্ড প্রক্রিয়া ব্যবহার করে। এই পর্যায়ে, উন্নয়ন পর্যায় থেকে সংকলিত আউটপুট একটি নতুন উত্পাদন পরিবেশে অনুলিপি করা হয়, চূড়ান্ত চিত্রটি লাইটওয়েট এবং কর্মক্ষমতার জন্য অপ্টিমাইজ করা নিশ্চিত করে। এই পদ্ধতিটি প্রোডাকশন ইমেজটিকে ছোট এবং সুরক্ষিত রাখতে সাহায্য করে, কারণ এটিতে কেবলমাত্র অ্যাপ্লিকেশন চালানোর জন্য যা প্রয়োজন তা রয়েছে৷ এটি করার মাধ্যমে, সিস্টেমটি সম্ভাব্য দ্বন্দ্ব বা উন্নয়ন নির্ভরতা সম্পর্কিত সমস্যাগুলি উত্পাদন পরিবেশে অন্তর্ভুক্ত করা প্রতিরোধ করে।
অ্যাপ্লিকেশন স্টার্টআপ পরিচালনা করতে, সিএমডি নির্দেশিকা কার্যকর করার জন্য প্রধান ফাইলটি নির্দিষ্ট করে, যা সাধারণত তে অবস্থিত জেলা বিল্ড প্রক্রিয়ার পরে ডিরেক্টরি। ডকার কন্টেইনার কমান্ড চালায় নোড dist/apps/auth/main.js (বা reservations/main.js অন্যান্য পরিষেবার জন্য), মাইক্রোসার্ভিস সঠিক পরিবেশে সম্পাদিত হয়েছে তা নিশ্চিত করে৷ এই পদ্ধতিটি মাইক্রোসার্ভিস আর্কিটেকচারকে স্কেল করার অনুমতি দেয়, কারণ প্রতিটি পরিষেবা তার নিজস্ব পাত্রে সমস্ত নির্ভরতা সঠিকভাবে পরিচালনা করে বিচ্ছিন্ন করা যেতে পারে। সামগ্রিক সেটআপ নিশ্চিত করে যে ডকার দক্ষতার সাথে নেস্টজেএস পরিষেবাগুলি চালায়, কন্টেইনারাইজেশনের সময় যে সাধারণ CLI সমস্যাগুলির মুখোমুখি হয়েছিল তার সমাধান করে।
নোড এবং ডকার অপ্টিমাইজেশান ব্যবহার করে নেস্টজেএস ডকার মডিউল ত্রুটি পাওয়া যায়নি সমাধান করা হচ্ছে
@nestjs/cli/bin/nest.js অনুপস্থিত সমস্যার সমাধান করতে এই সমাধানটি ডকারের সাথে একটি Node.js পরিবেশ ব্যবহার করে।
// Dockerfile - Solution 1 (Ensure Global Dependencies are Installed)FROM node:alpine AS development
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml tsconfig.json nest-cli.json ./
RUN npm install -g pnpm @nestjs/cli # Install NestJS CLI globally
RUN pnpm install
COPY . .
RUN pnpm run build auth
FROM node:alpine AS production
WORKDIR /usr/src/app
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/apps/auth/main.js"]
নির্ভরতা ব্যবস্থাপনার মাধ্যমে NestJS ডকার সেটআপে অনুপস্থিত মডিউল ঠিক করা
এই পদ্ধতিটি নির্ভরতাগুলিকে আরও কার্যকরভাবে পরিচালনা করার উপর দৃষ্টি নিবদ্ধ করে, নিশ্চিত করে যে প্রয়োজনীয় মডিউলগুলি সর্বদা উপস্থিত থাকে।
// Dockerfile - Solution 2 (Install CLI during both development and production stages)FROM node:alpine AS development
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml tsconfig.json nest-cli.json ./
RUN npm install -g pnpm @nestjs/cli # Install CLI in dev environment
RUN pnpm install
COPY . .
RUN pnpm run build reservations
FROM node:alpine AS production
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm @nestjs/cli --prod # Install CLI in production too
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/apps/reservations/main.js"]
ডকার পাত্রে সঠিক মডিউল ইনস্টলেশন যাচাই করার জন্য স্বয়ংক্রিয় পরীক্ষা
এই স্ক্রিপ্টটি বিভিন্ন পরিবেশে প্রয়োজনীয় মডিউলগুলি সঠিকভাবে ইনস্টল করা আছে কিনা তা যাচাই করতে Jest ব্যবহার করে ইউনিট পরীক্ষা যোগ করে।
// jest.config.js - Unit Testsmodule.exports = {
testEnvironment: 'node',
moduleFileExtensions: ['js', 'json', 'ts'],
rootDir: './',
testRegex: '.spec.ts$',
transform: { '^.+\\.(t|j)s$': 'ts-jest' },
coverageDirectory: './coverage',
};
// sample.spec.ts - Check if Nest CLI is available in the Docker containerdescribe('Nest CLI Module Check', () => {
it('should have @nestjs/cli installed', async () => {
const { exec } = require('child_process');
exec('nest --version', (error, stdout, stderr) => {
expect(stdout).toContain('Nest'); // Verify CLI presence
});
});
});
ডকারাইজড নেস্টজেএস পরিষেবাগুলিতে নোড মডিউলগুলি পরিচালনা করা
নেস্টজেএস-এ একটি মাইক্রোসার্ভিস আর্কিটেকচারের সাথে কাজ করার সময়, একটি গুরুত্বপূর্ণ দিক নিশ্চিত করে যে আপনার নির্ভরতা সঠিকভাবে ডকার পাত্রে ইনস্টল এবং পরিচালনা করা হয়েছে। ডকারাইজড পরিবেশ কখনও কখনও পরিচালনাকে জটিল করে তুলতে পারে node_modules, বিশেষ করে যখন মাল্টি-স্টেজ বিল্ড ব্যবহার করা হয়, যা এর মতো ত্রুটি হতে পারে "@nestjs/cli/bin/nest.js মডিউল খুঁজে পাওয়া যাচ্ছে না". এই ত্রুটি সাধারণত দেখা দেয় যখন বিশ্বব্যাপী মডিউল যেমন @nestjs/cli ধারক মধ্যে সঠিকভাবে ইনস্টল করা হয় না.
এটি এড়াতে, ডকারফাইলটিকে এমনভাবে গঠন করা গুরুত্বপূর্ণ যা নিশ্চিত করে যে সমস্ত প্রয়োজনীয় মডিউলগুলি বিকাশ এবং উত্পাদন উভয় পর্যায়ে উপস্থিত রয়েছে। একটি সাধারণ সমাধান হল স্পষ্টভাবে ইনস্টল করা নেস্টজেএস সিএলআই উভয় পর্যায়ে কমান্ড চালানোর সময় অনুপস্থিত বাইনারি সম্পর্কিত কোনো সমস্যা এড়াতে nest start বা nest build. আপনি pnpm, npm, বা সুতা ব্যবহার করছেন না কেন এই পদ্ধতিটি পরিবেশ জুড়ে ধারাবাহিকতা প্রদান করে।
উপরন্তু, মত সরঞ্জাম ব্যবহার করে পিএনপিএম ডকার ইমেজ আকার এবং নির্ভরতা ইনস্টলেশন প্রক্রিয়া অপ্টিমাইজ করতে পারেন. যাইহোক, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে pnpm বিশ্বব্যাপী ইনস্টল করা আছে, কারণ অনেক ডেভেলপার ডকার পাত্রে বিভিন্ন প্যাকেজ পরিচালকদের মধ্যে স্যুইচ করার সময় সমস্যার সম্মুখীন হয়। আপনার মাল্টি-স্টেজ গঠনের ফলে শুধুমাত্র প্রয়োজনীয় ফাইলগুলি (যেমন dist ফোল্ডার এবং node_modules) প্রোডাকশন স্টেজে কপি করা হলে ডিপ্লয়মেন্ট প্রসেস স্ট্রিমলাইন করতে সাহায্য করতে পারে এবং অনুপস্থিত মডিউল সম্পর্কিত সাধারণ ত্রুটিগুলি এড়াতে পারে।
ডকার এবং নেস্টজেএস সিএলআই ইন্টিগ্রেশন সম্পর্কিত সাধারণ প্রশ্ন
- আমি কিভাবে ডকারে অনুপস্থিত মডিউল ত্রুটিগুলি প্রতিরোধ করতে পারি?
- আপনি ইনস্টল করা নিশ্চিত করুন @nestjs/cli বিশ্বব্যাপী ব্যবহার করে npm install -g @nestjs/cli উভয় বিকাশ এবং উত্পাদন পর্যায়ে।
- কেন আমি "@nestjs/cli/bin/nest.js মডিউল খুঁজে পাচ্ছি না" ত্রুটি পাচ্ছি?
- এই ত্রুটি সাধারণত ঘটবে যখন NestJS CLI আপনার ডকার কন্টেইনারে বিশ্বব্যাপী ইনস্টল করা নেই। যোগ করা হচ্ছে RUN npm install -g @nestjs/cli এটি সমাধান করা উচিত।
- আমার কি ডকার পাত্রে এনপিএম বা পিএনপিএম ব্যবহার করা উচিত?
- pnpm ডিস্ক স্পেসের পরিপ্রেক্ষিতে আরও দক্ষ হতে পারে, তবে নিশ্চিত করুন যে এটি বিশ্বব্যাপী কন্টেইনারে ইনস্টল করা আছে npm install -g pnpm নির্ভরতা সমস্যা এড়াতে।
- আমি কি এক ডকার কন্টেইনারে একাধিক পরিষেবা চালাতে পারি?
- যদিও প্রযুক্তিগতভাবে সম্ভব, প্রতিটি চালানো ভাল NestJS আরও ভাল বিচ্ছিন্নতা এবং মাপযোগ্যতার জন্য তার নিজস্ব ডকার পাত্রে মাইক্রোসার্ভিস।
- আমি কিভাবে আমার ডকার ইমেজের আকার কমাতে পারি?
- একটি মাল্টি-স্টেজ বিল্ড ব্যবহার করুন যেখানে শুধুমাত্র প্রয়োজনীয় ফাইলগুলি পছন্দ করে dist এবং node_modules চূড়ান্ত উত্পাদন ইমেজ অনুলিপি করা হয়.
নেস্টজেএস ডকার কনফিগারেশনের চূড়ান্ত চিন্তাভাবনা
ডকারাইজড নেস্টজেএস মাইক্রোসার্ভিস পরিবেশে নির্ভরতা পরিচালনা করা চ্যালেঞ্জিং হতে পারে, বিশেষত যখন বিশ্বব্যাপী মডিউলগুলি যেমন @nestjs/cli জড়িত উন্নয়ন এবং উত্পাদন উভয় পর্যায়ে এই মডিউলগুলি ইনস্টল করা অত্যন্ত গুরুত্বপূর্ণ।
সঠিক মাল্টি-স্টেজ ডকারফাইল সেটআপের সাথে, আমরা অনুপস্থিত মডিউল ত্রুটিগুলি এড়াতে পারি এবং উত্পাদনের জন্য ধারকটিকে অপ্টিমাইজ করতে পারি। এই মত মসৃণ চলমান পরিষেবা নিশ্চিত করে প্রমাণ এবং সংরক্ষণ নির্ভরতা দ্বন্দ্ব ছাড়া।
সূত্র এবং তথ্যসূত্র
- এই নিবন্ধটি ডকার ডকুমেন্টেশন এবং কমিউনিটি ফোরাম থেকে অন্তর্দৃষ্টি ব্যবহার করে তৈরি করা হয়েছে। আরও তথ্যের জন্য, অফিসিয়াল ডকার সাইট দেখুন ডকার ডকুমেন্টেশন .
- NestJS CLI এবং মাইক্রোসার্ভিস প্যাটার্নগুলি পরিচালনার বিষয়ে নির্দেশিকা অফিসিয়াল NestJS ডকুমেন্টেশনে পাওয়া যাবে নেস্টজেএস ডকুমেন্টেশন .
- মডিউল সমস্যাগুলি সমাধান করার বিষয়ে আরও বিশদ স্ট্যাকওভারফ্লোতে আলোচনা থেকে অভিযোজিত হয়েছিল স্ট্যাকওভারফ্লো .