इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. परिचय
Cloud Run एक मैनेज किया गया कंप्यूट प्लैटफ़ॉर्म है. इसकी मदद से, स्टेटलेस कंटेनर को चलाया जा सकता है. इन कंटेनर को एचटीटीपी अनुरोधों के ज़रिए ऐक्सेस किया जा सकता है. Cloud Run बिना सर्वर वाली सेवा है: यह इन्फ़्रास्ट्रक्चर मैनेजमेंट को अलग रखता है, ताकि आप सबसे अहम ऐप्लिकेशन बनाने पर फ़ोकस कर सकें.
यह Google Cloud नेटवर्क के कई अन्य हिस्सों के साथ भी इंटरफ़ेस करता है. इनमें मैनेज किए जा रहे डेटाबेस के लिए Cloud SQL, यूनिफ़ाइड ऑब्जेक्ट स्टोरेज के लिए Cloud Storage, और सीक्रेट मैनेज करने के लिए सीक्रेट मैनेजर शामिल हैं.
Django CMS, एंटरप्राइज़ कॉन्टेंट मैनेजमेंट सिस्टम (सीएमएस) है. इसे Django पर बनाया गया है. Django एक हाई-लेवल Python वेब फ़्रेमवर्क है.
इस ट्यूटोरियल में, Django CMS से जुड़े एक छोटे प्रोजेक्ट को डिप्लॉय करने के लिए, इन कॉम्पोनेंट का इस्तेमाल किया जाएगा.
ध्यान दें: इस कोडलैब की पुष्टि, पिछली बार Django CMS 3.11.4 के साथ django-cms/cms-template v3.11 की मदद से की गई थी.
आपको इनके बारे में जानकारी मिलेगी
- Cloud Shell का इस्तेमाल कैसे करें
- Cloud SQL डेटाबेस बनाने का तरीका
- Cloud Storage बकेट बनाने का तरीका
- सीक्रेट मैनेजर सीक्रेट बनाने का तरीका
- Google Cloud की अलग-अलग सेवाओं के सीक्रेट इस्तेमाल करने का तरीका
- Google Cloud के कॉम्पोनेंट को Cloud Run सेवा से कनेक्ट करने का तरीका
- बनाए गए कंटेनर को स्टोर करने के लिए, Container Registry का इस्तेमाल करने का तरीका
- Cloud Run पर डिप्लॉय करने का तरीका
- Cloud Build में डेटाबेस स्कीमा माइग्रेशन चलाने का तरीका
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको अपना प्रोजेक्ट आईडी बताना होगा. आम तौर पर, इसकी पहचान
PROJECT_ID
के रूप में की जाती है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. दूसरा तरीका यह है कि आप खुद भी आज़माकर देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. साथ ही, यह प्रोजेक्ट के खत्म होने तक बना रहता है. - आपकी जानकारी के लिए, प्रोजेक्ट नंबर नाम की एक तीसरी वैल्यू दी गई है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Google Cloud शेल
Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें
पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री ऑफ़र करता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list
कमांड आउटपुट
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:
gcloud config set project <PROJECT_ID>
कमांड आउटपुट
Updated property [core/project].
3. Cloud API चालू करें
Cloud Shell से, उन कॉम्पोनेंट के लिए Cloud 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 से एपीआई को कॉल किया है. इसलिए, अनुरोध करने के लिए, आपसे आपके क्रेडेंशियल का इस्तेमाल करके अनुमति देने के लिए कहा जाएगा. ऐसा हर Cloud Shell सेशन के लिए एक बार होगा.
इस कार्रवाई को पूरा होने में कुछ समय लग सकता है.
फ़ॉर्म भरने के बाद, इस मैसेज से मिलता-जुलता मैसेज दिखेगा:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
4. टेंप्लेट प्रोजेक्ट बनाना
अपने सैंपल Django CMS प्रोजेक्ट के तौर पर, Django CMS cms-template का इस्तेमाल कर सकता है.
Cloud Shell का इस्तेमाल करके, djangocms-cloudrun
नाम की एक नई डायरेक्ट्री बनाएं और इस टेंप्लेट प्रोजेक्ट पर जाएं:
mkdir ~/djangocms-cloudrun cd ~/djangocms-cloudrun
django-cms पैकेज को अस्थायी वर्चुअल एनवायरमेंट में इंस्टॉल करें:
virtualenv venv source venv/bin/activate pip install djangocms-frontend\[cms-3]
cms-टेंप्लेट प्रोजेक्ट की कॉपी बनाएं:
django-admin startproject --template https://github.com/django-cms/cms-template/archive/3.11.zip myproject .
अब आपके पास myproject
नाम के फ़ोल्डर में एक Django CMS प्रोजेक्ट होगा:
ls -F
manage.py* media/ myproject/ project.db requirements.in requirements.txt static/ venv/
अब आपके पास, अस्थायी वर्चुअल एनवायरमेंट से बाहर निकलने और उसे हटाने का विकल्प है:
deactivate rm -rf venv
यहां से, कंटेनर के अंदर Django CMS को कॉल किया जाएगा.
अपने-आप कॉपी होने वाली ज़रूरी शर्तों.in फ़ाइल को भी हटाया जा सकता है. इस फ़ाइल का इस्तेमाल pip-tools करके, ज़रूरी शर्तें.txt फ़ाइल जनरेट करने के लिए किया जाता है. इसका इस्तेमाल इस कोडलैब के लिए नहीं किया जाएगा:
rm requirements.in
5. बैकिंग सेवाएं बनाएं
अब आपको अपनी बैकिंग सेवाएं बनानी होंगी: एक खास सेवा खाता, Artifact Registry, Cloud SQL डेटाबेस, Cloud Storage बकेट, और कई Secret Manager वैल्यू.
डिप्लॉयमेंट में इस्तेमाल किए गए पासवर्ड की वैल्यू को सुरक्षित रखना, किसी भी प्रोजेक्ट की सुरक्षा के लिए अहम होता है. साथ ही, यह पक्का करता है कि कोई भी व्यक्ति गलती से उस जगह पर न डाले जहां वह नहीं है. उदाहरण के लिए, सीधे सेटिंग फ़ाइलों में या सीधे आपके टर्मिनल में टाइप करने पर, जहां उसे इतिहास से वापस लाया जा सकता हो.
शुरू करने के लिए, दो बेस एनवायरमेंट वैरिएबल सेट करें. पहला, प्रोजेक्ट आईडी के लिए:
PROJECT_ID=$(gcloud config get-value core/project)
इनमें से एक विकल्प इस इलाके के लिए है:
REGION=us-central1
सेवा खाता बनाना
Google Cloud के अन्य हिस्सों के लिए सेवा के ऐक्सेस को सीमित करने के लिए, खास तौर पर एक सेवा खाता बनाएं:
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
डेटाबेस बनाना
Cloud 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
स्टोरेज बकेट बनाना
Cloud Storage बकेट बनाएं (यह ध्यान रखें कि नाम दुनिया भर में अलग होना चाहिए):
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
बकेट में स्टोर किए गए ऑब्जेक्ट का ऑरिजिन अलग होगा (Cloud Run यूआरएल के बजाय बकेट यूआरएल), इसलिए आपको क्रॉस ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस) की सेटिंग कॉन्फ़िगर करनी होंगी.
cors.json
नाम की एक नई फ़ाइल बनाएं, जिसमें ये कॉन्टेंट शामिल हों:
touch cors.json cloudshell edit cors.json
cors.json
[
{
"origin": ["*"],
"responseHeader": ["Content-Type"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
इस सीओआरएस कॉन्फ़िगरेशन को बनाए गए नए स्टोरेज बकेट पर लागू करें:
gsutil cors set cors.json gs://$GS_BUCKET_NAME
स्टोर कॉन्फ़िगरेशन को सीक्रेट के तौर पर सेव करना
बैकिंग सेवाएं सेट अप करने के बाद, अब इन वैल्यू को सीक्रेट मैनेजर का इस्तेमाल करके सुरक्षित की गई फ़ाइल में सेव किया जा सकेगा.
सीक्रेट मैनेजर की मदद से, सीक्रेट को बाइनरी ब्लॉब या टेक्स्ट स्ट्रिंग के तौर पर सेव, मैनेज, और ऐक्सेस किया जा सकता है. यह रनटाइम के दौरान किसी ऐप्लिकेशन के लिए ज़रूरी कॉन्फ़िगरेशन की जानकारी, जैसे कि डेटाबेस पासवर्ड, एपीआई पासकोड या TLS सर्टिफ़िकेट जैसी कॉन्फ़िगरेशन की जानकारी सेव करने के लिए अच्छे से काम करता है.
सबसे पहले, डेटाबेस कनेक्शन स्ट्रिंग, मीडिया बकेट, Django के लिए एक सीक्रेट कुंजी (सेशन और टोकन पर क्रिप्टोग्राफ़िक हस्ताक्षर करने के लिए इस्तेमाल की जाने वाली) वैल्यू का इस्तेमाल करके, और डीबग करने की सुविधा चालू करने के लिए एक फ़ाइल बनाएं:
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. अपनी ऐप्लिकेशन कॉन्फ़िगर करें
आपने अभी-अभी जो बैकिंग सेवाएं बनाई हैं उन्हें देखते हुए, आपको ज़रूरत के मुताबिक टेंप्लेट प्रोजेक्ट में कुछ बदलाव करने होंगे.
इसमें आपकी कॉन्फ़िगरेशन सेटिंग के तौर पर एनवायरमेंट वैरिएबल का इस्तेमाल करने के लिए, 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
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 URL to Django security settings
CLOUDRUN_SERVICE_URL = env("CLOUDRUN_SERVICE_URL", default=None)
if CLOUDRUN_SERVICE_URL:
ALLOWED_HOSTS = [urlparse(CLOUDRUN_SERVICE_URL).netloc]
CSRF_TRUSTED_ORIGINS = [CLOUDRUN_SERVICE_URL]
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 = []
DEFAULT_FILE_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"
STATICFILES_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"
GS_DEFAULT_ACL = "publicRead"
हर कॉन्फ़िगरेशन के बारे में जोड़ी गई कमेंट्री पढ़ें.
ध्यान दें कि आपको इस फ़ाइल पर लिंटिंग से जुड़ी गड़बड़ियां दिख सकती हैं. ऐसा होता है. Cloud Shell में इस प्रोजेक्ट की ज़रूरी शर्तों की जानकारी नहीं है. इस वजह से, यह अमान्य इंपोर्ट और इस्तेमाल न किए गए इंपोर्ट की रिपोर्ट कर सकता है.
Python डिपेंडेंसी
requirements.txt
फ़ाइल ढूंढें और इन पैकेज को जोड़ें:
cloudshell edit requirements.txt
ज़रूरी शर्तें.txt (जोड़ें)
gunicorn psycopg2-binary django-storages[google] django-environ
अपने ऐप्लिकेशन की इमेज तय करना
Cloud Run हर कंटेनर को तब तक चलाएगा, जब तक वह Cloud Run कंटेनर के अनुबंध के मुताबिक होगा. इस ट्यूटोरियल में Dockerfile
को हटाने का विकल्प चुना गया है, लेकिन इसके बजाय Cloud Native Buildpacks का इस्तेमाल किया गया है. Buildpack Python जैसी सामान्य भाषाओं के लिए कंटेनर बनाने में मदद करते हैं.
इस ट्यूटोरियल में, वेब ऐप्लिकेशन को शुरू करने के लिए इस्तेमाल की जाने वाली Procfile को पसंद के मुताबिक बनाने का विकल्प चुना गया है.
टेंप्लेट प्रोजेक्ट को कंटेनर में बदलने के लिए, सबसे पहले अपने प्रोजेक्ट के टॉप लेवल (उसी डायरेक्ट्री में) में Procfile
नाम की एक नई फ़ाइल बनाएं, जिसमें manage.py
मौजूद है. इसके बाद, यहां दिया गया कॉन्टेंट कॉपी करें:
touch Procfile cloudshell edit Procfile
प्रोकफ़ाइल
web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application
7. माइग्रेशन के चरण कॉन्फ़िगर करना, बनाना, और चलाना
अपने Cloud SQL डेटाबेस में डेटाबेस स्कीमा बनाने और Cloud Storage बकेट को अपनी स्टैटिक ऐसेट से भरने के लिए, आपको migrate
और collectstatic
चलाना होगा.
Django के इन बुनियादी माइग्रेशन कमांड को, आपकी बनाई गई कंटेनर इमेज के हिसाब से चलाना चाहिए. साथ ही, इसे आपके डेटाबेस के ऐक्सेस के साथ चलाया जाना चाहिए.
Django एडमिन में लॉग इन करने के लिए, एडमिन खाता बनाने के लिए आपको createsuperuser
चलाना होगा.
ऐसा करने के लिए, आप इन टास्क को करने के लिए Cloud Run जॉब का उपयोग करेंगे. Cloud Run जॉब आपको ऐसी प्रोसेस चलाने में मदद करती हैं जिनके खत्म होने का समय तय होता है. इससे एडमिन के तौर पर काम करने में मदद मिलती है.
Django के सुपर उपयोगकर्ता का पासवर्ड तय करना
सुपर उपयोगकर्ता बनाने के लिए, आपको 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
अपनी Procफ़ाइल अपडेट करें
Cloud Run जॉब के बारे में बेहतर जानकारी पाने के लिए, अपनी 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
अब आपके पास तीन एंट्री होनी चाहिए: डिफ़ॉल्ट वेब एंट्रीपॉइंट, डेटाबेस माइग्रेशन लागू करने के लिए migrate
एंट्रीपॉइंट, और createsuperuser
कमांड चलाने के लिए createuser
एंट्रीपॉइंट.
अपने ऐप्लिकेशन की इमेज बनाएं
अपने Procfile के अपडेट होने के बाद, इमेज बनाएं:
gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage
Cloud Run जॉब बनाना
इमेज मौजूद होने के बाद, उसका इस्तेमाल करके Cloud Run जॉब बनाया जा सकता है.
इन जॉब में, पहले बनाई गई इमेज का इस्तेमाल किया जाता है, लेकिन 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
Cloud Run के काम लागू करना
जॉब कॉन्फ़िगरेशन तय करके, माइग्रेशन चलाएं:
gcloud run jobs execute migrate --region $REGION --wait
पक्का करें कि यह निर्देश आउटपुट, "पूरा हुआ" के बारे में बताता हो.
अपने ऐप्लिकेशन को अपडेट करने पर, इस निर्देश को बाद में चलाया जाएगा.
डेटाबेस सेटअप के साथ, जॉब का इस्तेमाल करके उपयोगकर्ता बनाएं:
gcloud run jobs execute createuser --region $REGION --wait
पक्का करें कि यह निर्देश आउटपुट, "पूरा हुआ" के बारे में बताता हो.
आपको इस निर्देश को फिर से चलाने की ज़रूरत नहीं पड़ेगी.
8. Cloud Run पर डिप्लॉय करें
बैकिंग सेवाओं को बनाने और भरने की सुविधा के साथ, अब आप उन्हें ऐक्सेस करने के लिए Cloud Run सेवा बना सकते हैं.
आपके कंटेनर वाला ऐप्लिकेशन Cloud Run पर पहली बार डिप्लॉय करने के लिए, नीचे दिए गए निर्देश का इस्तेमाल किया जाता है:
gcloud run deploy djangocms-cloudrun \ --platform managed \ --region $REGION \ --image gcr.io/${PROJECT_ID}/myimage \ --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \ --set-secrets APPLICATION_SETTINGS=application_settings:latest \ --service-account $SERVICE_ACCOUNT \ --allow-unauthenticated
डिप्लॉयमेंट पूरा होने तक इंतज़ार करें. सफल होने पर, कमांड लाइन सेवा का यूआरएल दिखाती है:
Service [djangocms-cloudrun] revision [djangocms-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic. Service URL: https://djangocms-cloudrun-...-uc.a.run.app
अब इस यूआरएल को किसी वेब ब्राउज़र में खोलकर, डिप्लॉय किए गए कंटेनर पर जाएं:
चूंकि यह एक नई स्थापना है, इसलिए आपको स्वचालित रूप से लॉगिन पृष्ठ पर रीडायरेक्ट कर दिया जाएगा.
9. Django एडमिन ऐक्सेस करना
इसका इंटरैक्टिव एडमिन, Django CMS की मुख्य सुविधाओं में से एक है.
सीएसआरएफ़ सेटिंग अपडेट की जा रही हैं
Django में क्रॉस-साइट अनुरोध जालसाज़ी (सीएसआरएफ) से सुरक्षा शामिल है. जब भी आपकी Django साइट पर कोई फ़ॉर्म सबमिट किया जाता है, तो Django एडमिन में लॉग इन करने के साथ ही, Trusted Origins सेटिंग की जांच की जाती है. अगर यह अनुरोध के मूल से मेल नहीं खाता है, तो Django एक गड़बड़ी देता है.
अगर mysite/settings.py
फ़ाइल में, CLOUDRUN_SERVICE_URL
एनवायरमेंट वैरिएबल तय किया गया है, तो इसका इस्तेमाल CSRF_TRUSTED_ORIGINS
और ALLOWED_HOSTS
सेटिंग में किया जाता है. हालांकि, ALLOWED_HOSTS
तय करना ज़रूरी नहीं है, लेकिन इसे जोड़ना अच्छा रहता है, क्योंकि CSRF_TRUSTED_ORIGINS
के लिए यह पहले से ही ज़रूरी है.
आपको सेवा यूआरएल की ज़रूरत है, इसलिए इस कॉन्फ़िगरेशन को आपके पहले डिप्लॉयमेंट के बाद ही जोड़ा जा सकता है.
इस एनवायरमेंट वैरिएबल को जोड़ने के लिए, आपको अपनी सेवा अपडेट करनी होगी. इसे app_settings सीक्रेट में जोड़ा जा सकता है या सीधे एनवायरमेंट वैरिएबल के तौर पर जोड़ा जा सकता है.
अपना सेवा यूआरएल वापस पाएं:
CLOUDRUN_SERVICE_URL=$(gcloud run services describe djangocms-cloudrun \ --platform managed \ --region $REGION \ --format "value(status.url)") echo $CLOUDRUN_SERVICE_URL
इस वैल्यू को अपनी Cloud Run सेवा पर, एनवायरमेंट वैरिएबल के तौर पर सेट करें:
gcloud run services update djangocms-cloudrun \ --region $REGION \ --update-env-vars CLOUDRUN_SERVICE_URL=$CLOUDRUN_SERVICE_URL
Django एडमिन में लॉग इन करना
Django के एडमिन इंटरफ़ेस को ऐक्सेस करने के लिए, अपने सेवा यूआरएल में /admin जोड़ें.
अब उपयोगकर्ता नाम "एडमिन" से लॉग इन करें और निम्न कमांड का उपयोग करके अपना पासवर्ड पुनर्प्राप्त करें:
gcloud secrets versions access latest --secret django_superuser_password && echo ""
10. ऐप्लिकेशन अपडेट लागू किए जा रहे हैं
ऐप्लिकेशन डेवलप करने पर, आपको स्थानीय तौर पर उसकी जांच करनी होगी. ऐसा करने के लिए, आपको अपने Cloud SQL ("प्रोडक्शन") डेटाबेस या लोकल ("टेस्ट") डेटाबेस से कनेक्ट करना होगा.
अपने प्रोडक्शन डेटाबेस से कनेक्ट करें
Cloud SQL ऑथेंट प्रॉक्सी का इस्तेमाल करके, अपने Cloud SQL इंस्टेंस से कनेक्ट किया जा सकता है. यह ऐप्लिकेशन आपकी लोकल मशीन से डेटाबेस में कनेक्शन बनाता है.
Cloud 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 --instances=${PROJECT_ID}:${REGION}:myinstance=tcp:5432 # 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 डेटाबेस से कनेक्ट करना
इसके अलावा, अपना ऐप्लिकेशन डेवलप करते समय, स्थानीय डेटाबेस का इस्तेमाल किया जा सकता है. Django, 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
ऐप्लिकेशन अपडेट लागू किए जा रहे हैं
अपने ऐप्लिकेशन में बदलाव लागू करने के लिए, आपको ये काम करने होंगे:
- अपने बदलावों को एक नई इमेज,
- कोई डेटाबेस या स्थैतिक माइग्रेशन लागू करें, और फिर
- नई इमेज का इस्तेमाल करने के लिए, अपनी Cloud Run सेवा को अपडेट करें.
इमेज बनाने के लिए:
gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage
अगर आपको कोई माइग्रेशन लागू करना है, तो Cloud Run जॉब चलाएं:
gcloud run jobs execute migrate --region $REGION --wait
नई इमेज से अपनी सेवा अपडेट करने के लिए:
gcloud run services update djangocms-cloudrun \ --platform managed \ --region $REGION \ --image gcr.io/${PROJECT_ID}/myimage
11. बधाई हो!
आपने अभी-अभी Cloud Run पर एक जटिल प्रोजेक्ट डिप्लॉय किया है!
- Cloud Run, मिलने वाले अनुरोधों के हिसाब से आपके कंटेनर की इमेज को अपने-आप और हॉरिज़ॉन्टल तौर पर स्केल करता है. इसके बाद, मांग कम होने पर उसका साइज़ छोटा कर देता है. अनुरोध मैनेज करने के दौरान इस्तेमाल किए गए सीपीयू, मेमोरी, और नेटवर्किंग के लिए ही आपको पैसे चुकाने होंगे.
- Cloud SQL की मदद से, मैनेज किए जा रहे PostgreSQL इंस्टेंस का प्रावधान किया जा सकता है. यह इंस्टेंस अपने-आप मैनेज होता है और इसे Google Cloud के कई सिस्टम में नेटिव तौर पर इंटिग्रेट किया जाता है.
- Cloud Storage से आपको क्लाउड स्टोरेज मिलता है, जिसे Django में आसानी से ऐक्सेस कर सकता है.
- सीक्रेट मैनेजर की मदद से, सीक्रेट स्टोर किए जा सकते हैं. साथ ही, उन्हें Google Cloud के कुछ ही हिस्सों में ऐक्सेस किया जा सकता है, दूसरों से नहीं.
खाली करने के लिए जगह
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud Platform खाते पर लगने वाले शुल्क से बचने के लिए:
- Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, अपना प्रोजेक्ट चुनें. इसके बाद, Delete पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए शट डाउन करें पर क्लिक करें.
ज़्यादा जानें
- Cloud Run पर Django: https://cloud.google.com/python/django/run
- नमस्ते Cloud Run with Python: https://codelabs.developers.google.com/codelabs/cloud-run-hello-python3
- Google Cloud पर Python: https://cloud.google.com/python
- Google Cloud Python क्लाइंट: https://github.com/googleapis/google-cloud-python