1. ভূমিকা
ক্লাউড রান হল একটি পরিচালিত কম্পিউট প্ল্যাটফর্ম যা আপনাকে HTTP অনুরোধের মাধ্যমে আবেদনযোগ্য স্টেটলেস কন্টেনার চালাতে সক্ষম করে। ক্লাউড রান সার্ভারবিহীন: এটি সমস্ত অবকাঠামো ব্যবস্থাপনাকে বিমূর্ত করে দেয়, যাতে আপনি সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলির উপর ফোকাস করতে পারেন — দুর্দান্ত অ্যাপ্লিকেশন তৈরি করা।
এটি Google ক্লাউড ইকোসিস্টেমের অন্যান্য অনেক অংশের সাথে নেটিভভাবে ইন্টারফেস করে, যার মধ্যে রয়েছে পরিচালিত ডাটাবেসের জন্য ক্লাউড এসকিউএল , ইউনিফাইড অবজেক্ট স্টোরেজের জন্য ক্লাউড স্টোরেজ এবং গোপনীয়তা পরিচালনার জন্য সিক্রেট ম্যানেজার ।
ওয়াগটেল হল একটি ওপেন সোর্স কন্টেন্ট ম্যানেজমেন্ট সিস্টেম (সিএমএস) যা জ্যাঙ্গোর উপরে নির্মিত। জ্যাঙ্গো একটি উচ্চ-স্তরের পাইথন ওয়েব ফ্রেমওয়ার্ক।
এই টিউটোরিয়ালে, আপনি একটি ছোট Wagtail প্রকল্প স্থাপন করতে এই উপাদানগুলি ব্যবহার করবেন।
দ্রষ্টব্য: এই কোডল্যাবটি শেষবার Wagtail 5.2.2 দিয়ে যাচাই করা হয়েছিল, যা Django 5 সমর্থন করে।
আপনি কি শিখবেন
- ক্লাউড শেল কিভাবে ব্যবহার করবেন
- কিভাবে একটি ক্লাউড এসকিউএল ডাটাবেস তৈরি করবেন
- কিভাবে একটি ক্লাউড স্টোরেজ বালতি তৈরি করবেন
- কীভাবে সিক্রেট ম্যানেজার সিক্রেট তৈরি করবেন
- বিভিন্ন Google ক্লাউড পরিষেবাগুলি থেকে কীভাবে গোপনীয়তাগুলি ব্যবহার করবেন
- একটি ক্লাউড রান পরিষেবাতে Google ক্লাউড উপাদানগুলিকে কীভাবে সংযুক্ত করবেন
- বিল্ট কন্টেইনার সংরক্ষণ করতে কনটেইনার রেজিস্ট্রি কীভাবে ব্যবহার করবেন
- ক্লাউড রানে কীভাবে স্থাপন করবেন
- ক্লাউড বিল্ডে ডাটাবেস স্কিমা মাইগ্রেশন কীভাবে চালাবেন
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
গুগল ক্লাউড শেল
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .
যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].
3. ক্লাউড API সক্রিয় করুন৷
ক্লাউড শেল থেকে, যে উপাদানগুলি ব্যবহার করা হবে তার জন্য ক্লাউড এপিআই সক্ষম করুন:
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.
4. একটি টেমপ্লেট প্রকল্প তৈরি করুন
আপনি আপনার নমুনা Wagtail প্রকল্প হিসাবে ডিফল্ট Wagtail প্রকল্প টেমপ্লেট ব্যবহার করবেন। এটি করার জন্য, আপনি সাময়িকভাবে টেমপ্লেট তৈরি করতে Wagtail ইনস্টল করবেন।
এই টেমপ্লেট প্রকল্পটি তৈরি করতে, wagtail-cloudrun
নামে একটি নতুন ডিরেক্টরি তৈরি করতে ক্লাউড শেল ব্যবহার করুন এবং এটিতে নেভিগেট করুন:
mkdir ~/wagtail-cloudrun cd ~/wagtail-cloudrun
তারপরে, একটি অস্থায়ী ভার্চুয়াল পরিবেশে ওয়াগটেল ইনস্টল করুন:
virtualenv venv source venv/bin/activate pip install wagtail
তারপরে, বর্তমান ফোল্ডারে একটি নতুন টেমপ্লেট প্রকল্প তৈরি করুন:
wagtail start myproject .
আপনার কাছে এখন বর্তমান ফোল্ডারে একটি টেমপ্লেট ওয়াগটেল প্রকল্প থাকবে:
ls -F
Dockerfile home/ manage.py* myproject/ requirements.txt search/ venv/
আপনি এখন প্রস্থান করতে এবং আপনার অস্থায়ী ভার্চুয়াল পরিবেশ সরাতে পারেন:
deactivate rm -rf venv
এখান থেকে কন্টেইনারের মধ্যে ওয়াগটেইল ডাকা হবে।
5. ব্যাকিং পরিষেবা তৈরি করুন
আপনি এখন আপনার ব্যাকিং পরিষেবাগুলি তৈরি করবেন: একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্ট, একটি আর্টিফ্যাক্ট রেজিস্ট্রি, একটি ক্লাউড SQL ডাটাবেস, একটি ক্লাউড স্টোরেজ বালতি এবং বেশ কয়েকটি সিক্রেট ম্যানেজার মান৷
স্থাপনায় ব্যবহৃত পাসওয়ার্ডের মানগুলি সুরক্ষিত করা যেকোন প্রকল্পের নিরাপত্তার জন্য গুরুত্বপূর্ণ, এবং নিশ্চিত করে যে কেউ ভুলবশত এমন পাসওয়ার্ডগুলি রাখে না যেখানে সেগুলি অন্তর্ভুক্ত নয় (উদাহরণস্বরূপ, সরাসরি সেটিংস ফাইলগুলিতে, বা সরাসরি আপনার টার্মিনালে টাইপ করা যেখানে তারা পারে ইতিহাস থেকে পুনরুদ্ধার করা হবে।)
শুরু করতে, দুটি বেস এনভায়রনমেন্ট ভেরিয়েবল সেট করুন, একটি প্রকল্প আইডির জন্য:
PROJECT_ID=$(gcloud config get-value core/project)
এবং অঞ্চলের জন্য একটি:
REGION=us-central1
একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
Google ক্লাউডের অন্যান্য অংশে পরিষেবার অ্যাক্সেস সীমিত করতে, একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্ট তৈরি করুন:
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
6. আপনার আবেদন কনফিগার করুন
আপনি পূর্বে যে টেমপ্লেট প্রকল্পটি তৈরি করেছিলেন তা এখন কিছু পরিবর্তনের প্রয়োজন। এই পরিবর্তনগুলি Wagtail এর সাথে আসা টেমপ্লেট সেটিংস কনফিগারেশনের জটিলতা কমিয়ে দেবে এবং আপনার পূর্বে তৈরি করা ব্যাকিং পরিষেবাগুলির সাথে Wagtail-কে একীভূত করবে৷
সেটিংস কনফিগার করুন
জেনারেট করা base.py
সেটিংস ফাইলটি খুঁজুন এবং মূল myproject
ফোল্ডারে basesettings.py
নামকরণ করুন:
mv myproject/settings/base.py myproject/basesettings.py
ক্লাউড শেল ওয়েব এডিটর ব্যবহার করে, নিম্নলিখিত কোড সহ একটি নতুন settings.py
ফাইল তৈরি করুন:
touch myproject/settings.py cloudshell edit myproject/settings.py
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",
},
}
প্রতিটি কনফিগারেশন সম্পর্কে যোগ করা মন্তব্য পড়তে সময় নিন।
মনে রাখবেন আপনি এই ফাইলে লিন্টিং ত্রুটি দেখতে পারেন। এটা প্রত্যাশিত. ক্লাউড শেল এই প্রকল্পের জন্য প্রয়োজনীয়তার প্রসঙ্গ নেই, এবং এইভাবে অবৈধ আমদানি, এবং অব্যবহৃত আমদানি রিপোর্ট করতে পারে।
তারপরে, পুরানো সেটিংস ফোল্ডারটি সরান।
rm -rf myproject/settings/
তারপরে আপনার কাছে দুটি সেটিংস ফাইল থাকবে: একটি Wagtail থেকে, এবং একটি আপনি এইমাত্র তৈরি করেছেন যা এই সেটিংস থেকে তৈরি করে:
ls myproject/*settings*
myproject/basesettings.py myproject/settings.py
অবশেষে, manage.py
সেটিংস ফাইলটি খুলুন এবং Wagtail কে প্রধান settings.py
ফাইলের দিকে নির্দেশ করতে বলার জন্য কনফিগারেশন আপডেট করুন।
cloudshell edit manage.py
manage.py লাইন (আগে)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
manage.py লাইন (পরে)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
myproject/wsgi.py
ফাইলের জন্য একই কনফিগারেশন পরিবর্তন করুন:
cloudshell edit myproject/wsgi.py
myproject/wsgi.py লাইন (আগে)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
myproject/wsgi.py লাইন (পরে)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
স্বয়ংক্রিয়ভাবে তৈরি ডকারফাইল সরান:
rm Dockerfile
পাইথন নির্ভরতা
requirements.txt
ফাইলটি সনাক্ত করুন এবং নিম্নলিখিত প্যাকেজগুলি যুক্ত করুন:
cloudshell edit requirements.txt
requirements.txt (সংযোজন)
gunicorn psycopg2-binary django-storages[google] django-environ
আপনার অ্যাপ্লিকেশন ইমেজ সংজ্ঞায়িত করুন
ক্লাউড রান যতক্ষণ পর্যন্ত ক্লাউড রান কন্টেইনার চুক্তির সাথে সামঞ্জস্যপূর্ণ হবে ততক্ষণ পর্যন্ত ক্লাউড রান যেকোনো কন্টেইনার চালাবে। এই টিউটোরিয়ালটি একটি Dockerfile
বাদ দিতে বেছে নেয়, কিন্তু পরিবর্তে Cloud Native Buildpacks ব্যবহার করে। বিল্ডপ্যাকগুলি পাইথন সহ সাধারণ ভাষার জন্য পাত্র তৈরি করতে সহায়তা করে।
এই টিউটোরিয়ালটি ওয়েব অ্যাপ্লিকেশন শুরু করতে ব্যবহৃত 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
7. মাইগ্রেশন ধাপগুলি কনফিগার করুন, তৈরি করুন এবং চালান৷
আপনার ক্লাউড 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-এ শর্টকাট তৈরি করুন, 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
নিশ্চিত করুন যে এই কমান্ড আউটপুটটি "সফলভাবে সম্পন্ন" বলেছে।
আপনাকে আর এই কমান্ড চালাতে হবে না।
8. ক্লাউড রানে স্থাপন করুন
ব্যাকিং পরিষেবাগুলি তৈরি এবং জনবহুল করার সাথে, আপনি এখন সেগুলি অ্যাক্সেস করতে ক্লাউড রান পরিষেবা তৈরি করতে পারেন৷
ক্লাউড রানে আপনার কন্টেইনারাইজড অ্যাপ্লিকেশনটির প্রাথমিক স্থাপনা নিম্নলিখিত কমান্ড ব্যবহার করে তৈরি করা হয়েছে:
gcloud run deploy wagtail-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 [wagtail-cloudrun] revision [wagtail-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic. Service URL: https://wagtail-cloudrun-...run.app
আপনি এখন একটি ওয়েব ব্রাউজারে এই URLটি খোলার মাধ্যমে আপনার স্থাপন করা ধারকটি দেখতে পারেন:
9. জ্যাঙ্গো অ্যাডমিন অ্যাক্সেস করা
CSRF সেটিংস আপডেট করা হচ্ছে
জ্যাঙ্গো ক্রস-সাইট রিকোয়েস্ট ফোরজি (CSRF) এর বিরুদ্ধে সুরক্ষা অন্তর্ভুক্ত করে। Django অ্যাডমিনে লগ ইন করা সহ আপনার জ্যাঙ্গো সাইটে যে কোনো সময় একটি ফর্ম জমা দেওয়া হয়, বিশ্বস্ত অরিজিন সেটিং চেক করা হয়। যদি এটি অনুরোধের উত্সের সাথে মেলে না, Django একটি ত্রুটি ফেরত দেয়।
mysite/settings.py
ফাইলে, যদি CLOUDRUN_SERVICE_URL
এনভায়রনমেন্ট ভেরিয়েবল সংজ্ঞায়িত করা হয় তবে এটি CSRF_TRUSTED_ORIGINS
এবং ALLOWED_HOSTS
সেটিংসে ব্যবহৃত হয়। যদিও ALLOWED_HOSTS
সংজ্ঞায়িত করা বাধ্যতামূলক নয়, এটি যোগ করা ভাল অনুশীলন কারণ এটি ইতিমধ্যেই CSRF_TRUSTED_ORIGINS
এর জন্য প্রয়োজনীয়।
যেহেতু আপনার পরিষেবার URL প্রয়োজন, এই কনফিগারেশনটি আপনার প্রথম স্থাপনার পরে যোগ করা যাবে না।
এই পরিবেশ পরিবর্তনশীল যোগ করার জন্য আপনাকে আপনার পরিষেবা আপডেট করতে হবে। এটি application_settings
গোপনে যোগ করা যেতে পারে, বা সরাসরি একটি পরিবেশ পরিবর্তনশীল হিসাবে যোগ করা যেতে পারে।
নীচের বাস্তবায়ন gcloud বিন্যাস এবং পালানোর সুবিধা নেয়।
আপনার পরিষেবা URL পুনরুদ্ধার করুন:
CLOUDRUN_SERVICE_URLS=$(gcloud run services describe wagtail-cloudrun \ --region $REGION \ --format "value(metadata.annotations[\"run.googleapis.com/urls\"])" | tr -d '"[]') echo $CLOUDRUN_SERVICE_URLS
আপনার ক্লাউড রান পরিষেবাতে একটি পরিবেশ পরিবর্তনশীল হিসাবে এই মানটি সেট করুন:
gcloud run services update wagtail-cloudrun \ --region $REGION \ --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"
জ্যাঙ্গো অ্যাডমিনে লগ ইন করা হচ্ছে
জ্যাঙ্গো অ্যাডমিন ইন্টারফেস অ্যাক্সেস করতে, আপনার পরিষেবার URL- /admin
যোগ করুন।
এখন ব্যবহারকারীর নাম "অ্যাডমিন" দিয়ে লগ ইন করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে আপনার পাসওয়ার্ড পুনরুদ্ধার করুন:
gcloud secrets versions access latest --secret django_superuser_password && echo ""
10. আপনার আবেদন উন্নয়ন
আপনি আপনার অ্যাপ্লিকেশনটি বিকাশ করার সাথে সাথে আপনি এটি স্থানীয়ভাবে পরীক্ষা করতে চাইবেন। এটি করার জন্য, আপনাকে হয় আপনার ক্লাউড এসকিউএল ("উৎপাদন") ডাটাবেসের সাথে বা একটি স্থানীয় ("পরীক্ষা") ডাটাবেসের সাথে সংযোগ করতে হবে৷
আপনার উৎপাদন ডাটাবেসের সাথে সংযোগ করুন
আপনি ক্লাউড SQL প্রমাণ প্রক্সি ব্যবহার করে আপনার ক্লাউড SQL দৃষ্টান্তগুলির সাথে সংযোগ করতে পারেন৷ এই অ্যাপ্লিকেশনটি আপনার স্থানীয় মেশিন থেকে ডাটাবেসের সাথে একটি সংযোগ তৈরি করে।
একবার আপনি ক্লাউড এসকিউএল অথ প্রক্সি ইনস্টল করলে, এই পদক্ষেপগুলি অনুসরণ করুন:
# 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 ডাটাবেসের সাথে সংযোগ করুন
বিকল্পভাবে, আপনার অ্যাপ্লিকেশন বিকাশ করার সময় আপনি একটি স্থানীয় ডাটাবেস ব্যবহার করতে পারেন। জ্যাঙ্গো PostgreSQL এবং SQLite উভয় ডেটাবেসকে সমর্থন করে, এবং কিছু বৈশিষ্ট্য আছে PostgreSQL-এ যা 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
চালিয়ে Django-এর মাইগ্রেশন ফাইল তৈরি করতে হতে পারে।
আপনি উত্পাদন সেট আপ করার পরে বা ডাটাবেস সংযোগ পরীক্ষা করার পরে এই কমান্ডটি চালাতে পারেন। বিকল্পভাবে, আপনি খালি সেটিংস দিয়ে ডাটাবেস ছাড়াই মাইগ্রেশন ফাইল তৈরি করতে পারেন:
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 wagtail-cloudrun \ --region $REGION \ --image ${ARTIFACT_REGISTRY}/myimage
11. অভিনন্দন!
আপনি সবেমাত্র ক্লাউড রানে একটি জটিল প্রকল্প স্থাপন করেছেন!
- ক্লাউড রান স্বয়ংক্রিয়ভাবে এবং অনুভূমিকভাবে প্রাপ্ত অনুরোধগুলি পরিচালনা করতে আপনার কন্টেইনার চিত্রকে স্কেল করে, তারপর চাহিদা কমে গেলে স্কেল করে। অনুরোধ পরিচালনার সময় আপনি শুধুমাত্র CPU, মেমরি এবং নেটওয়ার্কিংয়ের জন্য অর্থ প্রদান করেন।
- ক্লাউড এসকিউএল আপনাকে একটি পরিচালিত PostgreSQL দৃষ্টান্ত প্রদান করতে দেয় যা আপনার জন্য স্বয়ংক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় এবং অনেকগুলি Google ক্লাউড সিস্টেমে স্থানীয়ভাবে সংহত করে।
- ক্লাউড স্টোরেজ আপনাকে ক্লাউড স্টোরেজ এমনভাবে রাখতে দেয় যা জ্যাঙ্গোতে নির্বিঘ্নে অ্যাক্সেসযোগ্য।
- সিক্রেট ম্যানেজার আপনাকে গোপনীয়তা সঞ্চয় করার অনুমতি দেয় এবং সেগুলিকে Google ক্লাউডের নির্দিষ্ট অংশে অ্যাক্সেসযোগ্য করে দেয় এবং অন্যদের দ্বারা নয়।
পরিষ্কার করুন
এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড প্ল্যাটফর্ম অ্যাকাউন্টে চার্জ এড়াতে:
- ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
- প্রকল্প তালিকায়, আপনার প্রকল্প নির্বাচন করুন তারপর মুছুন ক্লিক করুন।
- ডায়ালগে, প্রকল্প আইডি টাইপ করুন এবং তারপরে প্রকল্পটি মুছে ফেলতে শাট ডাউন ক্লিক করুন।
আরও জানুন
- ক্লাউড রানে জ্যাঙ্গো: https://cloud.google.com/python/django/run
- Hello Cloud Run with Python: https://codelabs.developers.google.com/codelabs/cloud-run-hello-python3
- Google ক্লাউডে পাইথন: https://cloud.google.com/python
- গুগল ক্লাউড পাইথন ক্লায়েন্ট: https://github.com/googleapis/google-cloud-python
/