1. ভূমিকা

ক্লাউড রান একটি পরিচালিত কম্পিউট প্ল্যাটফর্ম যা আপনাকে HTTP অনুরোধের মাধ্যমে স্টেটলেস কন্টেইনার চালাতে সক্ষম করে। ক্লাউড রান সার্ভারলেস: এটি সমস্ত অবকাঠামো ব্যবস্থাপনাকে বিমূর্ত করে, যাতে আপনি সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলিতে মনোনিবেশ করতে পারেন - দুর্দান্ত অ্যাপ্লিকেশন তৈরি করা।
এটি গুগল ক্লাউড ইকোসিস্টেমের অন্যান্য অনেক অংশের সাথেও স্থানীয়ভাবে ইন্টারফেস করে, যার মধ্যে রয়েছে পরিচালিত ডাটাবেসের জন্য ক্লাউড এসকিউএল , ইউনিফাইড অবজেক্ট স্টোরেজের জন্য ক্লাউড স্টোরেজ এবং গোপনীয়তা পরিচালনার জন্য সিক্রেট ম্যানেজার ।
জ্যাঙ্গো সিএমএস হল একটি এন্টারপ্রাইজ কন্টেন্ট ম্যানেজমেন্ট সিস্টেম (সিএমএস) যা জ্যাঙ্গোর উপরে তৈরি। জ্যাঙ্গো একটি উচ্চ-স্তরের পাইথন ওয়েব ফ্রেমওয়ার্ক।
এই টিউটোরিয়ালে, আপনি একটি ছোট জ্যাঙ্গো সিএমএস প্রকল্প স্থাপন করতে এই উপাদানগুলি ব্যবহার করবেন।
দ্রষ্টব্য: এই কোডল্যাবটি শেষবার Django CMS 4.1.2 দিয়ে django-cms/cms-template v4.1 এর মাধ্যমে যাচাই করা হয়েছিল।
তুমি কি শিখবে
- ক্লাউড শেল কীভাবে ব্যবহার করবেন
- কিভাবে একটি ক্লাউড SQL ডাটাবেস তৈরি করবেন
- কিভাবে একটি ক্লাউড স্টোরেজ বাকেট তৈরি করবেন
- সিক্রেট ম্যানেজারের গোপনীয়তা কীভাবে তৈরি করবেন
- বিভিন্ন গুগল ক্লাউড পরিষেবা থেকে সিক্রেটস কীভাবে ব্যবহার করবেন
- গুগল ক্লাউড কম্পোনেন্টগুলিকে ক্লাউড রান পরিষেবার সাথে কীভাবে সংযুক্ত করবেন
- তৈরি পাত্র সংরক্ষণের জন্য কনটেইনার রেজিস্ট্রি কীভাবে ব্যবহার করবেন
- ক্লাউড রানে কীভাবে স্থাপন করবেন
- ক্লাউড বিল্ডে ডাটাবেস স্কিমা মাইগ্রেশন কীভাবে চালানো যায়
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



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

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

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

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল রয়েছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি অফার করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, একটি ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণিত এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- 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 টি খুলে আপনার স্থাপন করা কন্টেইনারটি দেখতে পারেন:

যেহেতু এটি একটি নতুন ইনস্টলেশন, আপনাকে স্বয়ংক্রিয়ভাবে লগইন পৃষ্ঠায় পুনঃনির্দেশিত করা হবে।
৯. জ্যাঙ্গো অ্যাডমিন অ্যাক্সেস করা
জ্যাঙ্গো সিএমএসের অন্যতম প্রধান বৈশিষ্ট্য হল এর ইন্টারেক্টিভ অ্যাডমিন।
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 ""

১০. অ্যাপ্লিকেশন আপডেট প্রয়োগ করা
আপনার অ্যাপ্লিকেশন তৈরি করার সময়, আপনাকে এটি স্থানীয়ভাবে পরীক্ষা করতে হবে। এটি করার জন্য, আপনাকে হয় আপনার ক্লাউড 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 এ ক্লিক করুন।
আরও জানুন
- ক্লাউড রানে জ্যাঙ্গো: https://cloud.google.com/python/django/run
- পাইথনের সাথে হ্যালো ক্লাউড রান: https://codelabs.developers.google.com/codelabs/cloud-run-hello-python3
- গুগল ক্লাউডে পাইথন: https://cloud.google.com/python
- গুগল ক্লাউড পাইথন ক্লায়েন্ট: https://github.com/googleapis/google-cloud-python