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

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

6a5cf23c8e20491f.png

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

পূর্বশর্ত

প্রযোজ্য নয়

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 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_0ZnSjC7GxDNxWrJJUaoM53LnqA BYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

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

echo $GOOGLE_CLOUD_PROJECT

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

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

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

ক্লাউড রান এপিআই সক্রিয় করুন

ক্লাউড শেল থেকে ক্লাউড রান এপিআই সক্রিয় করুন।

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" ]

এখন, Dockerfile থাকা ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালিয়ে Cloud Build ব্যবহার করে আপনার কন্টেইনার ইমেজ তৈরি করুন:

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 এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

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 ইনফ্রাস্ট্রাকচারের জন্য নয়)।

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

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

এখন আপনি একটি ওয়েব ব্রাউজারে সার্ভিস URL-টি খুলে আপনার ডেপ্লয় করা কন্টেইনারটি দেখতে পারেন:

63260b4d3aee42b8.png

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

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

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

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

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

Cloud Run সার্ভিসটি ডিলিট করতে এই কমান্ডটি ব্যবহার করুন:

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

৭. অভিনন্দন

অভিনন্দন! আপনি একটি কন্টেইনার ইমেজে প্যাকেজ করা অ্যাপ ক্লাউড রান-এ ডেপ্লয় করেছেন।

আরও জানুন

এর পরের একটি ভালো পদক্ষেপ হবে Quickstart: Deploy to Cloud Run for Anthos on Google Cloud-টি দেখে নেওয়া।

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

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