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

১. শুরু করার আগে

6a5cf23c8e20491f.png সম্পর্কে

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

পূর্বশর্ত

নিষিদ্ধ

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

ক্লাউড শেল

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNmurhfegg1CYaE11jdpSTYNNIYARe01A

স্ক্রিন শট ২০১৭-০৬-১৪ রাত ১০.১৩.৪৩.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_0ZnSjC7GxDNxWrJJUaoM53LnqA BYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

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

echo $GOOGLE_CLOUD_PROJECT

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

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

আপনি বিভিন্ন ধরণের অঞ্চল বেছে নিতে পারেন। আরও তথ্যের জন্য, অঞ্চল এবং অঞ্চল দেখুন।

ক্লাউড রান এপিআই সক্ষম করুন

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

gcloud services enable run.googleapis.com

এটির ফলে এই বার্তার মতো একটি সফল বার্তা তৈরি হবে:

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

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

আপনি 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 এনভায়রনমেন্ট ভেরিয়েবল দ্বারা সংজ্ঞায়িত পোর্টে শোনে। আপনার অ্যাপটি এখন কন্টেইনারাইজড, পরীক্ষা করা এবং কন্টেইনার রেজিস্ট্রিতে আপলোড করার জন্য প্রস্তুত।

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

নমুনা অ্যাপটি কন্টেইনারাইজ করতে, সোর্স ফাইলগুলির মতো একই ডিরেক্টরিতে 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 হল একটি এনভায়রনমেন্ট ভ্যারিয়েবল যা ক্লাউড শেলে চলাকালীন আপনার গুগল ক্লাউড প্রোজেক্ট আইডি ধারণ করে। আপনি gcloud config get-value project চালিয়েও এটি পেতে পারেন।

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

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

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 ব্যবহার করতে পারেন।

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

আপনার কন্টেইনারাইজড অ্যাপটি ক্লাউড রানে স্থাপন করার জন্য নিম্নলিখিত কমান্ড ব্যবহার করা হয় (আপনার তৈরি করা অ্যাপের জন্য সঠিক ছবির নামের সাথে এটি সামঞ্জস্য করতে ভুলবেন না অথবা 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 বিকল্পটির অর্থ হল আপনি সম্পূর্ণরূপে পরিচালিত পরিবেশের জন্য অনুরোধ করছেন (Anthos এর মাধ্যমে Kubernetes অবকাঠামো নয়)।

স্থাপনা সম্পূর্ণ না হওয়া পর্যন্ত কিছুক্ষণ অপেক্ষা করুন। এটি সম্পন্ন হলে, কমান্ড লাইন পরিষেবা 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, মেমরি এবং নেটওয়ার্কিংয়ের জন্য অর্থ প্রদান করেন।

৬. পরিষ্কার করা

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

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

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

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

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

৭. অভিনন্দন

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

আরও জানুন

পরবর্তী ভালো পদক্ষেপ হবে গুগল ক্লাউডে অ্যান্থোসের জন্য Quickstart: Deploy to Cloud Run পরীক্ষা করা।

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

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