Node.js-এ ক্লাউড রান সহ একটি কন্টেইনার স্থাপন এবং চালান

1. আপনি শুরু করার আগে

6a5cf23c8e20491f.png

ক্লাউড রান হল একটি পরিচালিত কম্পিউট প্ল্যাটফর্ম যা আপনাকে HTTP অনুরোধের মাধ্যমে আবেদনযোগ্য স্টেটলেস কন্টেনার চালাতে সক্ষম করে। ক্লাউড রান সার্ভারহীন; এটি অবকাঠামো পরিচালনার প্রয়োজনীয়তা দূর করে, তাই আপনি সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলিতে ফোকাস করতে পারেন - দুর্দান্ত অ্যাপ তৈরি করা৷ এটি Knative থেকে তৈরি করা হয়েছে, যা আপনাকে ক্লাউড রান (সম্পূর্ণভাবে পরিচালিত) অথবা অ্যান্থোসের জন্য ক্লাউড রান দিয়ে আপনার কন্টেইনার চালানোর জন্য বেছে নিতে দেয়। এই কোডল্যাবের লক্ষ্য হল আপনার জন্য একটি কন্টেইনার ইমেজ তৈরি করা এবং এটিকে ক্লাউড রানে স্থাপন করা।

পূর্বশর্ত

N/A

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCemXuD0pdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCemXuD0pdYncY5Gv3GU Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3oK3o67gCu67jCGUJCGUX67j

প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷

এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

মেঘের শেল

Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যেতে পারে, আপনি Cloud Shell ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ।

এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জামগুলির সাথে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এর মানে হল যে এই কোডল্যাবের জন্য আপনার যা দরকার তা হল একটি ব্রাউজার (হ্যাঁ, এটি একটি Chromebook এ কাজ করে)।

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVBzxNg74Bg7fz7 kP-X3Q (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfeggN1NYp1NYp1CJ

স্ক্রীন শট 2017-06-14 10.13.43 PM.png এ

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রকল্পটি ইতিমধ্যেই আপনার PROJECT_ID তে সেট করা আছে।

gcloud auth list

কমান্ড আউটপুট

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি, কোন কারণে, প্রকল্পটি সেট করা না হয়, কেবল নিম্নলিখিত কমান্ডটি জারি করুন:

gcloud config set project <PROJECT_ID>

আপনার PROJECT_ID খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxBzuUgaz7VvaxNrkP2TAn93DrxX7ohs-5GZXH52T

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা আপনার ভবিষ্যত কমান্ড চালানোর সময় কার্যকর হতে পারে।

echo $GOOGLE_CLOUD_PROJECT

কমান্ড আউটপুট

<PROJECT_ID>
  1. অবশেষে, ডিফল্ট জোন এবং প্রকল্প কনফিগারেশন সেট করুন।
gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন জোন বিভিন্ন চয়ন করতে পারেন. আরও তথ্যের জন্য, অঞ্চল এবং অঞ্চল দেখুন।

Cloud Run API সক্ষম করুন

ক্লাউড শেল থেকে, ক্লাউড রান API সক্ষম করুন।

gcloud services enable run.googleapis.com

এটির অনুরূপ একটি সফল বার্তা তৈরি করা উচিত:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. নমুনা অ্যাপটি লিখুন

আপনি HTTP অনুরোধে সাড়া দিয়ে একটি সাধারণ, এক্সপ্রেস-ভিত্তিক Node.js অ্যাপ তৈরি করবেন।

আপনার অ্যাপ তৈরি করতে, helloworld-nodejs নামে একটি নতুন ডিরেক্টরি তৈরি করতে ক্লাউড শেল ব্যবহার করুন এবং এতে ডিরেক্টরি পরিবর্তন করুন।

mkdir helloworld-nodejs
cd helloworld-nodejs

নিম্নলিখিত বিষয়বস্তু সহ একটি package.json ফাইল তৈরি করুন:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

সবচেয়ে গুরুত্বপূর্ণভাবে, উপরের ফাইলটিতে একটি স্টার্ট স্ক্রিপ্ট কমান্ড এবং এক্সপ্রেস ওয়েব অ্যাপ ফ্রেমওয়ার্কের উপর নির্ভরতা রয়েছে।

এর পরে, একই ডিরেক্টরিতে, একটি index.js ফাইল তৈরি করুন এবং এতে নিম্নলিখিত সামগ্রীটি অনুলিপি করুন:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

সেই কোডটি একটি মৌলিক ওয়েব সার্ভার তৈরি করে যা PORT পরিবেশ পরিবর্তনশীল দ্বারা সংজ্ঞায়িত পোর্টে শোনে। আপনার অ্যাপ এখন কনটেইনারাইজড, পরীক্ষা করা এবং কনটেইনার রেজিস্ট্রিতে আপলোড করার জন্য প্রস্তুত।

4. আপনার অ্যাপ কন্টেইনারাইজ করুন এবং কনটেইনার রেজিস্ট্রিতে আপলোড করুন

নমুনা অ্যাপটিকে কন্টেইনারাইজ করতে, সোর্স ফাইলগুলির মতো একই ডিরেক্টরিতে Dockerfile নামে একটি নতুন ফাইল তৈরি করুন এবং এতে নিম্নলিখিত সামগ্রীটি অনুলিপি করুন:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

এখন, ডকারফাইল ধারণকারী ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড বিল্ড ব্যবহার করে আপনার কন্টেইনার ইমেজ তৈরি করুন:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT হল একটি এনভায়রনমেন্ট ভেরিয়েবল যাতে ক্লাউড শেল চলাকালীন আপনার Google ক্লাউড প্রকল্প আইডি থাকে। আপনি gcloud config get-value project চালিয়েও এটি পেতে পারেন।

একবার রেজিস্ট্রিতে পুশ করা হলে, আপনি ছবির নাম ( gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld ) সহ একটি SUCCESS বার্তা দেখতে পাবেন। ছবিটি কনটেইনার রেজিস্ট্রিতে সংরক্ষণ করা হয় এবং ইচ্ছা হলে পুনরায় ব্যবহার করা যেতে পারে।

আপনি এই কমান্ডটি ব্যবহার করে আপনার বর্তমান প্রকল্পের সাথে যুক্ত সমস্ত ধারক চিত্রগুলি তালিকাভুক্ত করতে পারেন:

gcloud container images list

আপনি যদি ক্লাউড শেল থেকে স্থানীয়ভাবে অ্যাপটি চালাতে এবং পরীক্ষা করতে চান তবে আপনি এই স্ট্যান্ডার্ড docker কমান্ডটি ব্যবহার করে এটি শুরু করতে পারেন:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

ক্লাউড শেল-এ, ওয়েব প্রিভিউ-এ ক্লিক করুন 170b7a95be8c6296.png এবং পোর্ট 8080-এ প্রিভিউ নির্বাচন করুন।

3618ca3a4a135570.png

এটি একটি ব্রাউজার উইন্ডো খোলে যা বলে হ্যালো ওয়ার্ল্ড!

a0307f34cacf9e6a.png

আপনি সহজভাবে curl localhost:8080 ব্যবহার করতে পারেন।

5. ক্লাউড রানে স্থাপন করুন

ক্লাউড রানে আপনার কন্টেইনারাইজড অ্যাপ স্থাপন করা নিম্নলিখিত কমান্ডটি ব্যবহার করে করা হয় (আপনি যে অ্যাপটি তৈরি করেছেন বা gcr.io/cloudrun/hello প্রিবিল্ট ইমেজ ব্যবহার করেছেন তার জন্য এটিকে সঠিক ছবির নামের সাথে সামঞ্জস্য করতে ভুলবেন না):

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

--allow-unauthenticated deploy অপশন আপনাকে প্রমাণীকরণ ছাড়াই অ্যাপে পৌঁছাতে সক্ষম করে। --platform managed \ deploy বিকল্পের অর্থ হল আপনি সম্পূর্ণরূপে পরিচালিত পরিবেশের জন্য অনুরোধ করছেন (অ্যান্টোসের মাধ্যমে কুবারনেটস অবকাঠামো নয়)।

স্থাপনা সম্পূর্ণ না হওয়া পর্যন্ত কয়েক মুহূর্ত অপেক্ষা করুন। এটি সম্পন্ন হলে, কমান্ড লাইন পরিষেবা URL প্রদর্শন করে।

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

আপনি এখন একটি ওয়েব ব্রাউজারে পরিষেবা URL খোলার মাধ্যমে আপনার নিয়োজিত কন্টেইনার দেখতে পারেন:

63260b4d3aee42b8.png

ক্লাউড রান স্বয়ংক্রিয়ভাবে এবং অনুভূমিকভাবে প্রাপ্ত অনুরোধগুলি পরিচালনা করতে আপনার কন্টেইনার চিত্রকে স্কেল করে, তারপর চাহিদা কমে গেলে স্কেল করে। অনুরোধ পরিচালনার সময় আপনি শুধুমাত্র CPU, মেমরি এবং নেটওয়ার্কিংয়ের জন্য অর্থ প্রদান করেন।

6. পরিষ্কার করুন

পরিষেবাটি ব্যবহার না করার সময় ক্লাউড রান চার্জ না করলেও, বিল্ট কন্টেইনার ইমেজ সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে।

চার্জ এড়াতে আপনি হয় আপনার Google ক্লাউড প্রকল্প মুছে ফেলতে পারেন, যা সেই প্রকল্পের জন্য ব্যবহৃত সমস্ত সংস্থানগুলির জন্য বিলিং বন্ধ করে দেবে, অথবা এই কমান্ডটি ব্যবহার করে আপনার হ্যালোওয়ার্ল্ড ছবি মুছে ফেলতে পারেন:

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

ক্লাউড রান পরিষেবা মুছতে, এই কমান্ডটি ব্যবহার করুন:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

7. অভিনন্দন

অভিনন্দন! আপনি ক্লাউড রানে একটি কন্টেইনার ছবিতে প্যাকেজ করা একটি অ্যাপ স্থাপন করেছেন।

আরও জানুন

একটি ভাল পরবর্তী পদক্ষেপটি হবে কুইকস্টার্ট চেক করা: Google ক্লাউডে অ্যান্থোসের জন্য ক্লাউড রানে স্থাপন করুন

কোড সোর্স থেকে ক্লাউড রানের জন্য উপযোগী একটি স্টেটলেস HTTP কন্টেইনার তৈরি করা এবং কন্টেইনার রেজিস্ট্রিতে এটি পুশ করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন:

Knative সম্পর্কে আরও জানতে, অন্তর্নিহিত ওপেন সোর্স প্রকল্প, Knative দেখুন।