ক্লাউড রানে জ্যাঙ্গো সিএমএস

1. ভূমিকা

89eb4723767d4525.png সম্পর্কে

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

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

জ্যাঙ্গো সিএমএস হল একটি এন্টারপ্রাইজ কন্টেন্ট ম্যানেজমেন্ট সিস্টেম (সিএমএস) যা জ্যাঙ্গোর উপরে তৈরি। জ্যাঙ্গো একটি উচ্চ-স্তরের পাইথন ওয়েব ফ্রেমওয়ার্ক।

এই টিউটোরিয়ালে, আপনি একটি ছোট জ্যাঙ্গো সিএমএস প্রকল্প স্থাপন করতে এই উপাদানগুলি ব্যবহার করবেন।

দ্রষ্টব্য: এই কোডল্যাবটি শেষবার Django CMS 4.1.2 দিয়ে django-cms/cms-template v4.1 এর মাধ্যমে যাচাই করা হয়েছিল।

তুমি কি শিখবে

  • ক্লাউড শেল কীভাবে ব্যবহার করবেন
  • কিভাবে একটি ক্লাউড SQL ডাটাবেস তৈরি করবেন
  • কিভাবে একটি ক্লাউড স্টোরেজ বাকেট তৈরি করবেন
  • সিক্রেট ম্যানেজারের গোপনীয়তা কীভাবে তৈরি করবেন
  • বিভিন্ন গুগল ক্লাউড পরিষেবা থেকে সিক্রেটস কীভাবে ব্যবহার করবেন
  • গুগল ক্লাউড কম্পোনেন্টগুলিকে ক্লাউড রান পরিষেবার সাথে কীভাবে সংযুক্ত করবেন
  • তৈরি পাত্র সংরক্ষণের জন্য কনটেইনার রেজিস্ট্রি কীভাবে ব্যবহার করবেন
  • ক্লাউড রানে কীভাবে স্থাপন করবেন
  • ক্লাউড বিল্ডে ডাটাবেস স্কিমা মাইগ্রেশন কীভাবে চালানো যায়

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

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

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

295004821bab6a87.png সম্পর্কে

37d264871000675d.png সম্পর্কে

96d86d3d5655cdbe.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি (সাধারণত PROJECT_ID হিসাবে চিহ্নিত) উল্লেখ করতে হবে। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন, এবং এটি উপলব্ধ কিনা তা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে রিসোর্স বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা প্রকল্পটি মুছে ফেলতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

গুগল ক্লাউড শেল

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

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png সম্পর্কে .

cb81e7c8e34bc8d.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

d95252b003979716.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

7833d5e1c5d18f54.png সম্পর্কে

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

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

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

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

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

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

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

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

Updated property [core/project].

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

ক্লাউড শেল থেকে, ব্যবহৃত উপাদানগুলির জন্য ক্লাউড এপিআই সক্ষম করুন:

gcloud services enable \
  run.googleapis.com \
  sql-component.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudbuild.googleapis.com \
  secretmanager.googleapis.com \
  artifactregistry.googleapis.com

যেহেতু আপনি প্রথমবারের মতো gcloud থেকে API গুলিতে কল করছেন, তাই এই অনুরোধটি করার জন্য আপনাকে আপনার শংসাপত্র ব্যবহার করে অনুমোদন করতে বলা হবে। এটি প্রতি ক্লাউড শেল সেশনে একবার ঘটবে।

এই অপারেশনটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে।

একবার সম্পন্ন হলে, এইরকম একটি সাফল্যের বার্তা প্রদর্শিত হবে:

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

৪. একটি টেমপ্লেট প্রকল্প তৈরি করুন

তুমি তোমার নমুনা জ্যাঙ্গো সিএমএস প্রকল্প হিসেবে জ্যাঙ্গো সিএমএস সিএমএস-টেমপ্লেট ব্যবহার করবে।

এই টেমপ্লেট প্রকল্পটি তৈরি করতে, ক্লাউড শেল ব্যবহার করে djangocms-cloudrun নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এতে নেভিগেট করুন:

mkdir ~/djangocms-cloudrun
cd ~/djangocms-cloudrun

django-cms প্যাকেজটি একটি অস্থায়ী ভার্চুয়াল পরিবেশে ইনস্টল করুন:

virtualenv venv
source venv/bin/activate
pip install djangocms-frontend\[cms-4]

cms-template প্রকল্পের একটি কপি তৈরি করুন:

django-admin startproject --template https://github.com/django-cms/cms-template/archive/4.1.zip myproject .

requirements.in ফাইলটির নাম পরিবর্তন করে requirements.txt করুন। ( .in ফাইলটি pip-tools দ্বারা requirements.txt ফাইল তৈরি করে, তবে এক্সটেনশন পরিবর্তন করা হলে এটি একইভাবে ব্যবহার করা যেতে পারে। পরবর্তী ধাপগুলিতে, pip .txt এক্সটেনশন আশা করে।)

mv requirements.in requirements.txt

এখন আপনার কাছে myproject নামক একটি ফোল্ডারে একটি টেমপ্লেট জ্যাঙ্গো সিএমএস প্রকল্প থাকবে:

ls -F
manage.py*  media/  myproject/  project.db requirements.txt  static/ venv/

আপনি এখন আপনার অস্থায়ী ভার্চুয়াল পরিবেশ থেকে বেরিয়ে আসতে এবং অপসারণ করতে পারেন:

deactivate
rm -rf venv

এখান থেকে, জ্যাঙ্গো সিএমএস কন্টেইনারের মধ্যে ডাকা হবে।

৫. ব্যাকিং পরিষেবা তৈরি করুন

এখন তুমি তোমার ব্যাকিং পরিষেবা তৈরি করবে: একটি ডেডিকেটেড সার্ভিস অ্যাকাউন্ট, একটি আর্টিফ্যাক্ট রেজিস্ট্রি, একটি ক্লাউড SQL ডাটাবেস, একটি ক্লাউড স্টোরেজ বাকেট এবং বেশ কয়েকটি সিক্রেট ম্যানেজার মান।

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

শুরু করার জন্য, দুটি বেস এনভায়রনমেন্ট ভেরিয়েবল সেট করুন, একটি প্রজেক্ট আইডির জন্য:

PROJECT_ID=$(gcloud config get-value core/project)

এবং অঞ্চলের জন্য একটি:

REGION=us-central1

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

গুগল ক্লাউডের অন্যান্য অংশে পরিষেবাটির অ্যাক্সেস সীমিত করতে, একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্ট তৈরি করুন:

gcloud iam service-accounts create cloudrun-serviceaccount

এই কোডল্যাবের ভবিষ্যতের বিভাগগুলিতে আপনি এই অ্যাকাউন্টটির ইমেল ঠিকানায় উল্লেখ করবেন। একটি পরিবেশ ভেরিয়েবলে সেই মানটি সেট করুন:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
    --filter cloudrun-serviceaccount --format "value(email)")

একটি আর্টিফ্যাক্ট রেজিস্ট্রি তৈরি করুন

তৈরি কন্টেইনার ইমেজ সংরক্ষণ করতে, আপনার নির্বাচিত অঞ্চলে একটি কন্টেইনার রেজিস্ট্রি তৈরি করুন:

gcloud artifacts repositories create containers --repository-format docker --location $REGION

এই কোডল্যাবের ভবিষ্যতের বিভাগগুলিতে আপনি এই রেজিস্ট্রিটির নাম উল্লেখ করবেন:

ARTIFACT_REGISTRY=${REGION}-docker.pkg.dev/${PROJECT_ID}/containers

ডাটাবেস তৈরি করুন

একটি ক্লাউড SQL ইনস্ট্যান্স তৈরি করুন:

gcloud sql instances create myinstance --project $PROJECT_ID \
  --database-version POSTGRES_14 --tier db-f1-micro --region $REGION

এই অপারেশনটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে।

সেই ক্ষেত্রে, একটি ডাটাবেস তৈরি করুন:

gcloud sql databases create mydatabase --instance myinstance

একই ক্ষেত্রে, একটি ব্যবহারকারী তৈরি করুন:

DJPASS="$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1)"
gcloud sql users create djuser --instance myinstance --password $DJPASS

পরিষেবা অ্যাকাউন্টকে ইনস্ট্যান্সের সাথে সংযোগ করার অনুমতি দিন:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/cloudsql.client

স্টোরেজ বালতি তৈরি করুন

একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন (উল্লেখ্য যে নামটি বিশ্বব্যাপী অনন্য হতে হবে):

GS_BUCKET_NAME=${PROJECT_ID}-media
gcloud storage buckets create gs://${GS_BUCKET_NAME} --location ${REGION} 

পরিষেবা অ্যাকাউন্টকে বাকেট পরিচালনা করার অনুমতি দিন:

gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET_NAME} \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/storage.admin

যেহেতু বাকেটে সংরক্ষিত বস্তুর একটি ভিন্ন উৎস থাকবে (ক্লাউড রান URL এর পরিবর্তে একটি বাকেট URL), তাই আপনাকে ক্রস অরিজিন রিসোর্স শেয়ারিং (CORS) সেটিংস কনফিগার করতে হবে।

cors.json নামে একটি নতুন ফাইল তৈরি করুন, যার মধ্যে নিম্নলিখিত বিষয়বস্তু থাকবে:

touch cors.json
cloudshell edit cors.json

cors.json সম্পর্কে

[
    {
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET"],
      "maxAgeSeconds": 3600
    }
]

নতুন তৈরি স্টোরেজ বাকেটে এই CORS কনফিগারেশনটি প্রয়োগ করুন:

gsutil cors set cors.json gs://$GS_BUCKET_NAME

গোপন হিসেবে কনফিগারেশন সংরক্ষণ করুন

ব্যাকিং পরিষেবাগুলি সেট আপ করার পরে, আপনি এখন এই মানগুলি সিক্রেট ম্যানেজার ব্যবহার করে সুরক্ষিত একটি ফাইলে সংরক্ষণ করবেন।

সিক্রেট ম্যানেজার আপনাকে বাইনারি ব্লব বা টেক্সট স্ট্রিং হিসেবে গোপন তথ্য সংরক্ষণ, পরিচালনা এবং অ্যাক্সেস করতে দেয়। এটি রানটাইমের সময় অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ডাটাবেস পাসওয়ার্ড, API কী, অথবা TLS সার্টিফিকেটের মতো কনফিগারেশন তথ্য সংরক্ষণের জন্য ভালো কাজ করে।

প্রথমে, ডাটাবেস সংযোগ স্ট্রিং , মিডিয়া বাকেট, জ্যাঙ্গোর জন্য একটি গোপন কী (সেশন এবং টোকেনের ক্রিপ্টোগ্রাফিক স্বাক্ষরের জন্য ব্যবহৃত) এবং ডিবাগিং সক্ষম করার জন্য মান সহ একটি ফাইল তৈরি করুন:

echo DATABASE_URL=\"postgres://djuser:${DJPASS}@//cloudsql/${PROJECT_ID}:${REGION}:myinstance/mydatabase\" > .env

echo GS_BUCKET_NAME=\"${GS_BUCKET_NAME}\" >> .env

echo SECRET_KEY=\"$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 50 | head -n 1)\" >> .env

echo DEBUG=True >> .env

তারপর, application_settings নামে একটি গোপনীয়তা তৈরি করুন, সেই ফাইলটিকে গোপনীয়তা হিসাবে ব্যবহার করে:

gcloud secrets create application_settings --data-file .env

পরিষেবা অ্যাকাউন্টটিকে এই গোপনীয়তা অ্যাক্সেসের অনুমতি দিন:

gcloud secrets add-iam-policy-binding application_settings \
  --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor

গোপন তথ্য তালিকাভুক্ত করে নিশ্চিত করুন যে গোপন তথ্য তৈরি হয়েছে:

gcloud secrets versions list application_settings

গোপনীয়তা তৈরি হয়েছে তা নিশ্চিত করার পরে, স্থানীয় ফাইলটি সরিয়ে ফেলুন:

rm .env

৬. আপনার অ্যাপ্লিকেশন কনফিগার করুন

আপনার তৈরি করা ব্যাকিং পরিষেবাগুলির কারণে, আপনাকে টেমপ্লেট প্রকল্পে কিছু পরিবর্তন করতে হবে।

এর মধ্যে থাকবে django-environ ব্যবহার করে আপনার কনফিগারেশন সেটিংস হিসেবে পরিবেশ ভেরিয়েবল ব্যবহার করা, যা আপনি গোপনীয়তা হিসেবে সংজ্ঞায়িত মানগুলির সাথে যুক্ত করবেন। এটি বাস্তবায়নের জন্য, আপনাকে টেমপ্লেট সেটিংস প্রসারিত করতে হবে। আপনাকে অতিরিক্ত Python নির্ভরতাও যোগ করতে হবে।

সেটিংস কনফিগার করুন

settings.py ফাইলটি সরান, এটির নাম পরিবর্তন করে basesettings.py:

mv myproject/settings.py myproject/basesettings.py

ক্লাউড শেল ওয়েব এডিটর ব্যবহার করে, নিম্নলিখিত কোড সহ একটি নতুন settings.py ফাইল তৈরি করুন:

touch myproject/settings.py
cloudshell edit myproject/settings.py

আমার প্রকল্প/সেটিংস.পি

import io
import os
from urllib.parse import urlparse

import environ

# Import the original settings from each template
from .basesettings import *

# Load the settings from the environment variable
env = environ.Env()
env.read_env(io.StringIO(os.environ.get("APPLICATION_SETTINGS", None)))

# Setting this value from django-environ
SECRET_KEY = env("SECRET_KEY")

# Ensure myproject is added to the installed applications
if "myproject" not in INSTALLED_APPS:
    INSTALLED_APPS.append("myproject")

# If defined, add service URLs to Django security settings
CLOUDRUN_SERVICE_URLS = env("CLOUDRUN_SERVICE_URLS", default=None)
if CLOUDRUN_SERVICE_URLS:
    CSRF_TRUSTED_ORIGINS = env("CLOUDRUN_SERVICE_URLS").split(",")
    # Remove the scheme from URLs for ALLOWED_HOSTS
    ALLOWED_HOSTS = [urlparse(url).netloc for url in CSRF_TRUSTED_ORIGINS]
else:
    ALLOWED_HOSTS = ["*"]

# Default false. True allows default landing pages to be visible
DEBUG = env("DEBUG", default=False)

# Set this value from django-environ
DATABASES = {"default": env.db()}

# Change database settings if using the Cloud SQL Auth Proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# Define static storage via django-storages[google]
GS_BUCKET_NAME = env("GS_BUCKET_NAME")
STATICFILES_DIRS = []
GS_DEFAULT_ACL = "publicRead"
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
}

প্রতিটি কনফিগারেশন সম্পর্কে যোগ করা ভাষ্যটি পড়ার জন্য সময় নিন।

মনে রাখবেন যে আপনি এই ফাইলটিতে লিন্টিং ত্রুটি দেখতে পেতে পারেন। এটি প্রত্যাশিত। ক্লাউড শেল এই প্রকল্পের প্রয়োজনীয়তার প্রসঙ্গ উল্লেখ করে না, এবং তাই অবৈধ আমদানি এবং অব্যবহৃত আমদানি রিপোর্ট করতে পারে।

পাইথন নির্ভরতা

requirements.txt ফাইলটি খুঁজে বের করুন এবং নিম্নলিখিত প্যাকেজগুলি যুক্ত করুন:

cloudshell edit requirements.txt

requirements.txt (সংযোজন)

gunicorn
psycopg2-binary
django-storages[google]
django-environ

আপনার অ্যাপ্লিকেশনের ছবি নির্ধারণ করুন

ক্লাউড রান যেকোনো কন্টেইনার চালাবে যতক্ষণ না এটি ক্লাউড রান কন্টেইনার চুক্তি মেনে চলে। এই টিউটোরিয়ালে একটি Dockerfile বাদ দেওয়া হয়েছে, বরং ক্লাউড নেটিভ বিল্ডপ্যাক ব্যবহার করা হয়েছে। বিল্ডপ্যাকগুলি পাইথন সহ সাধারণ ভাষাগুলির জন্য কন্টেইনার তৈরিতে সহায়তা করে।

এই টিউটোরিয়ালটি ওয়েব অ্যাপ্লিকেশন শুরু করতে ব্যবহৃত Procfile কাস্টমাইজ করার বিকল্প বেছে নেয়।

টেমপ্লেট প্রজেক্টকে কন্টেইনারাইজ করতে, প্রথমে আপনার প্রজেক্টের শীর্ষ স্তরে ( manage.py এর মতো একই ডিরেক্টরিতে) Procfile নামে একটি নতুন ফাইল তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু অনুলিপি করুন:

touch Procfile
cloudshell edit Procfile

প্রোকফাইল

web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application

৭. মাইগ্রেশন ধাপগুলি কনফিগার, বিল্ড এবং রান করুন

আপনার ক্লাউড SQL ডাটাবেসে ডাটাবেস স্কিমা তৈরি করতে এবং আপনার ক্লাউড স্টোরেজ বাকেটকে আপনার স্ট্যাটিক অ্যাসেট দিয়ে পূর্ণ করতে, আপনাকে migrate এবং collectstatic চালাতে হবে।

এই বেস জ্যাঙ্গো মাইগ্রেশন কমান্ডগুলি আপনার তৈরি কন্টেইনার চিত্রের প্রেক্ষাপটে চালানো উচিত এবং আপনার ডাটাবেসে অ্যাক্সেস থাকা উচিত।

জ্যাঙ্গো অ্যাডমিনে লগ ইন করার জন্য আপনাকে একটি অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট তৈরি করতে createsuperuser চালাতে হবে।

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

আপনার জ্যাঙ্গো সুপারইউজার পাসওয়ার্ড নির্ধারণ করুন

সুপারইউজার তৈরি করতে, আপনাকে createsuperuser কমান্ডের নন-ইন্টারেক্টিভ সংস্করণ ব্যবহার করতে হবে। এই কমান্ডের জন্য পাসওয়ার্ড প্রবেশের জন্য প্রম্পটের পরিবর্তে একটি বিশেষভাবে নামযুক্ত পরিবেশ ভেরিয়েবল ব্যবহার করতে হবে।

এলোমেলোভাবে তৈরি করা পাসওয়ার্ড ব্যবহার করে একটি নতুন গোপনীয়তা তৈরি করুন:

echo -n $(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1) | gcloud secrets create django_superuser_password --data-file=-

আপনার পরিষেবা অ্যাকাউন্টকে এই গোপনীয়তা অ্যাক্সেস করার অনুমতি দিন:

gcloud secrets add-iam-policy-binding django_superuser_password \
  --member serviceAccount:${SERVICE_ACCOUNT} \
  --role roles/secretmanager.secretAccessor

আপনার প্রোফাইল আপডেট করুন

আপনার ক্লাউড রান কাজের স্বচ্ছতা নিশ্চিত করতে, আপনার Procfile-এ শর্টকাট তৈরি করুন, Procfile এ নিম্নলিখিত এন্ট্রিপয়েন্টগুলি যুক্ত করুন:

migrate: python manage.py migrate && python manage.py collectstatic --noinput --clear
createuser: python manage.py createsuperuser --username admin --email noop@example.com --noinput

এখন আপনার তিনটি এন্ট্রি থাকা উচিত: ডিফল্ট web এন্ট্রিপয়েন্ট, ডাটাবেস মাইগ্রেশন প্রয়োগ করার জন্য migrate এন্ট্রিপয়েন্ট এবং createsuperuser কমান্ড চালানোর জন্য createuser এন্ট্রিপয়েন্ট।

আপনার অ্যাপ্লিকেশনের ছবি তৈরি করুন

আপনার Procfile আপডেটগুলি তৈরি করে, ছবিটি তৈরি করুন:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

ক্লাউড রান কাজ তৈরি করুন

এখন যেহেতু ছবিটি বিদ্যমান, আপনি এটি ব্যবহার করে ক্লাউড রান কাজ তৈরি করতে পারেন।

এই কাজগুলি পূর্বে তৈরি করা চিত্র ব্যবহার করে, কিন্তু বিভিন্ন command মান ব্যবহার করে। এইগুলি Procfile এর মানগুলির সাথে ম্যাপ করে।

মাইগ্রেশনের জন্য একটি চাকরি তৈরি করুন:

gcloud run jobs create migrate \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --command migrate

ব্যবহারকারী তৈরির জন্য একটি কাজ তৈরি করুন:

gcloud run jobs create createuser \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --set-secrets DJANGO_SUPERUSER_PASSWORD=django_superuser_password:latest \
  --service-account $SERVICE_ACCOUNT \
  --command createuser

ক্লাউড রান কাজগুলি সম্পাদন করুন

কাজের কনফিগারেশন ঠিকঠাক থাকলে, মাইগ্রেশনগুলি চালান:

gcloud run jobs execute migrate --region $REGION --wait

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

আপনার অ্যাপ্লিকেশনে আপডেট করার সময় আপনি এই কমান্ডটি পরে চালাবেন।

ডাটাবেস সেটআপের মাধ্যমে, নিম্নলিখিত কাজটি ব্যবহার করে ব্যবহারকারী তৈরি করুন:

gcloud run jobs execute createuser --region $REGION --wait

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

আপনাকে এই কমান্ডটি আর চালাতে হবে না।

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

ব্যাকিং পরিষেবাগুলি তৈরি এবং পূর্ণ করার মাধ্যমে, আপনি এখন সেগুলি অ্যাক্সেস করার জন্য ক্লাউড রান পরিষেবা তৈরি করতে পারেন।

ক্লাউড রানে আপনার কন্টেইনারাইজড অ্যাপ্লিকেশনের প্রাথমিক স্থাপনা নিম্নলিখিত কমান্ড ব্যবহার করে তৈরি করা হয়:

gcloud run deploy djangocms-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --allow-unauthenticated

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

Service [djangocms-cloudrun] revision [djangocms-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://djangocms-cloudrun-...run.app

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

e1fb6858bf11626a.png সম্পর্কে

যেহেতু এটি একটি নতুন ইনস্টলেশন, আপনাকে স্বয়ংক্রিয়ভাবে লগইন পৃষ্ঠায় পুনঃনির্দেশিত করা হবে।

৯. জ্যাঙ্গো অ্যাডমিন অ্যাক্সেস করা

জ্যাঙ্গো সিএমএসের অন্যতম প্রধান বৈশিষ্ট্য হল এর ইন্টারেক্টিভ অ্যাডমিন।

CSRF সেটিংস আপডেট করা হচ্ছে

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

mysite/settings.py ফাইলে, যদি CLOUDRUN_SERVICE_URL এনভায়রনমেন্ট ভেরিয়েবলটি সংজ্ঞায়িত করা থাকে তবে এটি CSRF_TRUSTED_ORIGINS এবং ALLOWED_HOSTS সেটিংসে ব্যবহৃত হয়। যদিও ALLOWED_HOSTS সংজ্ঞায়িত করা বাধ্যতামূলক নয়, তবে এটি যোগ করা ভাল অভ্যাস কারণ এটি ইতিমধ্যেই CSRF_TRUSTED_ORIGINS জন্য প্রয়োজনীয়।

যেহেতু আপনার পরিষেবা URL প্রয়োজন, তাই আপনার প্রথম স্থাপনার পরে এই কনফিগারেশনটি যোগ করা যাবে না।

এই এনভায়রনমেন্ট ভেরিয়েবলটি যোগ করার জন্য আপনাকে আপনার পরিষেবা আপডেট করতে হবে। এটি application_settings সিক্রেটে যোগ করা যেতে পারে, অথবা সরাসরি একটি এনভায়রনমেন্ট ভেরিয়েবল হিসেবে যোগ করা যেতে পারে।

নিচের বাস্তবায়নটি gcloud ফর্ম্যাটিং এবং escaping এর সুবিধা গ্রহণ করে।

আপনার পরিষেবা URL পুনরুদ্ধার করুন:

CLOUDRUN_SERVICE_URLS=$(gcloud run services describe djangocms-cloudrun \
  --region $REGION  \
  --format "value(metadata.annotations[\"run.googleapis.com/urls\"])" | tr -d '"[]')
echo $CLOUDRUN_SERVICE_URLS

আপনার ক্লাউড রান পরিষেবাতে এই মানটিকে একটি পরিবেশ পরিবর্তনশীল হিসেবে সেট করুন:

gcloud run services update djangocms-cloudrun \
  --region $REGION \
  --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"

জ্যাঙ্গো অ্যাডমিনে লগ ইন করা হচ্ছে

জ্যাঙ্গো অ্যাডমিন ইন্টারফেস অ্যাক্সেস করতে, আপনার পরিষেবা URL-এ /admin যোগ করুন।

এখন "অ্যাডমিন" ব্যবহারকারীর নাম দিয়ে লগ ইন করুন এবং নিম্নলিখিত কমান্ড ব্যবহার করে আপনার পাসওয়ার্ড পুনরুদ্ধার করুন:

gcloud secrets versions access latest --secret django_superuser_password && echo ""

da10a148bc1c7994.png সম্পর্কে

১০. অ্যাপ্লিকেশন আপডেট প্রয়োগ করা

আপনার অ্যাপ্লিকেশন তৈরি করার সময়, আপনাকে এটি স্থানীয়ভাবে পরীক্ষা করতে হবে। এটি করার জন্য, আপনাকে হয় আপনার ক্লাউড SQL ("উৎপাদন") ডাটাবেসের সাথে সংযোগ করতে হবে, অথবা একটি স্থানীয় ("পরীক্ষা") ডাটাবেসের সাথে সংযোগ করতে হবে।

আপনার প্রোডাকশন ডাটাবেসের সাথে সংযোগ করুন

আপনি ক্লাউড এসকিউএল অথ প্রক্সি ব্যবহার করে আপনার ক্লাউড এসকিউএল ইনস্ট্যান্সের সাথে সংযোগ স্থাপন করতে পারেন। এই অ্যাপ্লিকেশনটি আপনার স্থানীয় মেশিন থেকে ডাটাবেসের সাথে একটি সংযোগ তৈরি করে।

একবার আপনি ক্লাউড SQL Auth প্রক্সি ইনস্টল করার পরে, এই পদক্ষেপগুলি অনুসরণ করুন:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Run the Cloud SQL Auth Proxy
./cloud-sql-proxy ${PROJECT_ID}:${REGION}:myinstance

# In a new tab, start the local web server using these new settings
USE_CLOUD_SQL_AUTH_PROXY=true APPLICATION_SETTINGS=$(cat temp_settings) python manage.py runserver

আপনার কাজ শেষ করার পরে temp_settings ফাইলটি সরিয়ে ফেলুন।

একটি স্থানীয় SQLite ডাটাবেসের সাথে সংযোগ করুন

বিকল্পভাবে, আপনার অ্যাপ্লিকেশন তৈরি করার সময় আপনি একটি স্থানীয় ডাটাবেস ব্যবহার করতে পারেন। জ্যাঙ্গো পোস্টগ্রেএসকিউএল এবং এসকিউএলাইট উভয় ডাটাবেস সমর্থন করে এবং পোস্টগ্রেএসকিউএল-এর কিছু বৈশিষ্ট্য রয়েছে যা এসকিউএলাইট-এর নেই, তবে অনেক ক্ষেত্রে, কার্যকারিতা একই রকম।

SQLite সেটআপ করার জন্য, আপনাকে আপনার অ্যাপ্লিকেশন সেটিংস আপডেট করতে হবে, একটি স্থানীয় ডাটাবেসে নির্দেশ করতে হবে, এবং তারপর আপনাকে আপনার স্কিমা মাইগ্রেশন প্রয়োগ করতে হবে।

এই পদ্ধতিটি সেট আপ করতে:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Edit the DATABASE_URL setting to use a local sqlite file. For example:
DATABASE_URL=sqlite:////tmp/my-tmp-sqlite.db

# Set the updated settings as an environment variable
APPLICATION_SETTINGS=$(cat temp_settings) 

# Apply migrations to the local database
python manage.py migrate

# Start the local web server
python manage.py runserver

আপনার কাজ শেষ করার পরে temp_settings ফাইলটি সরিয়ে ফেলুন।

মাইগ্রেশন তৈরি করা হচ্ছে

আপনার ডাটাবেস মডেলগুলিতে পরিবর্তন করার সময়, আপনাকে python manage.py makemigrations চালিয়ে জ্যাঙ্গোর মাইগ্রেশন ফাইল তৈরি করতে হতে পারে।

প্রোডাকশন বা টেস্ট ডাটাবেস সংযোগ সেট আপ করার পরে আপনি এই কমান্ডটি চালাতে পারেন। বিকল্পভাবে, আপনি খালি সেটিংস দিয়ে ডাটাবেস ছাড়াই মাইগ্রেশন ফাইল তৈরি করতে পারেন:

SECRET_KEY="" DATABASE_URL="" GS_BUCKET_NAME="" python manage.py makemigrations

অ্যাপ্লিকেশন আপডেট প্রয়োগ করা হচ্ছে

আপনার আবেদনে পরিবর্তনগুলি প্রয়োগ করতে, আপনাকে যা করতে হবে:

  • আপনার পরিবর্তনগুলিকে একটি নতুন ছবিতে তৈরি করুন,
  • যেকোনো ডাটাবেস বা স্ট্যাটিক মাইগ্রেশন প্রয়োগ করুন, এবং তারপর
  • নতুন ছবিটি ব্যবহার করার জন্য আপনার ক্লাউড রান পরিষেবা আপডেট করুন।

আপনার ছবি তৈরি করতে:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

যদি আপনার কোন মাইগ্রেশন আবেদন করার থাকে, তাহলে ক্লাউড রান কাজটি চালান:

gcloud run jobs execute migrate --region $REGION --wait

নতুন চিত্র সহ আপনার পরিষেবা আপডেট করতে:

gcloud run services update djangocms-cloudrun \
  --platform managed \
  --region $REGION \
  --image gcr.io/${PROJECT_ID}/myimage

১১. অভিনন্দন!

আপনি ক্লাউড রানে একটি জটিল প্রকল্প স্থাপন করেছেন!

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

পরিষ্কার কর

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সের জন্য আপনার Google ক্লাউড প্ল্যাটফর্ম অ্যাকাউন্টে চার্জ এড়াতে:

  • ক্লাউড কনসোলে, রিসোর্স পরিচালনা পৃষ্ঠায় যান।
  • প্রকল্পের তালিকায়, আপনার প্রকল্পটি নির্বাচন করুন এবং তারপর মুছুন ক্লিক করুন।
  • ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলতে Shut down এ ক্লিক করুন।

আরও জানুন