1. Giriş
Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanıza olanak tanıyan bir yönetilen işlem platformudur. Cloud Run sunucusuzdur: Tüm altyapı yönetimini soyutladığı için en önemli işe, yani harika uygulamalar geliştirmeye odaklanabilirsiniz.
Ayrıca yönetilen veritabanları için Cloud SQL, birleşik nesne depolama için Cloud Storage ve gizli anahtarları yönetmek için Secret Manager gibi Google Cloud ekosisteminin diğer birçok parçasıyla yerel olarak arayüz oluşturur.
Wagtail, Django'nun üzerine inşa edilmiş açık kaynak bir içerik yönetim sistemidir (İYS). Django, üst düzey bir Python web çerçevesidir.
Bu eğitimde, küçük bir Wagtail projesi dağıtmak için bu bileşenleri kullanacaksınız.
Not: Bu kod laboratuvarı en son, Django 5'i destekleyen Wagtail 5.2.2 ile doğrulanmıştır.
Neler öğreneceksiniz?
- Cloud Shell'i kullanma
- Cloud SQL veritabanı oluşturma
- Cloud Storage paketi oluşturma
- Secret Manager gizli anahtarları oluşturma
- Farklı Google Cloud hizmetlerindeki Gizli Anahtarları kullanma
- Google Cloud bileşenlerini Cloud Run hizmetine bağlama
- Oluşturulan kapsayıcıları depolamak için Container Registry'yi kullanma
- Cloud Run'a dağıtma
- Cloud Build'de veritabanı şeması taşıma işlemlerini çalıştırma
2. Kurulum ve şartlar
Kendine ait tempoda ortam oluşturma
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Google Cloud Shell
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir olsa da bu kod laboratuvarında bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız Cloud Shell'in ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.
Cloud Shell'e bağlanmak ve ortam oluşturmak yalnızca birkaç dakikanızı alır.
Bu sanal makinede, ihtiyaç duyulan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu kod laboratuvarındaki çalışmanızın tamamı olmasa da büyük bir kısmı tarayıcıda yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizi doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Aksi takdirde aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Cloud API'lerini etkinleştirme
Cloud Shell'den, kullanılacak bileşenler için Cloud API'leri etkinleştirin:
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'dan API'leri ilk kez çağırdığınız için bu isteği yapmak üzere kimlik bilgilerinizi kullanarak yetkilendirmeniz istenir. Bu işlem, Cloud Shell oturumu başına bir kez gerçekleşir.
Bu işlemin tamamlanması birkaç dakika sürebilir.
İşlem tamamlandığında şuna benzer bir başarı mesajı gösterilir:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
4. Şablon proje oluşturma
Örnek Wagtail projeniz olarak varsayılan Wagtail proje şablonunu kullanacaksınız. Bunun için şablonu oluşturmak üzere Wagtail'i geçici olarak yüklersiniz.
Bu şablon projesini oluşturmak için Cloud Shell'i kullanarak wagtail-cloudrun
adlı yeni bir dizin oluşturun ve bu dizine gidin:
mkdir ~/wagtail-cloudrun cd ~/wagtail-cloudrun
Ardından Wagtail'i geçici bir sanal ortama yükleyin:
virtualenv venv source venv/bin/activate pip install wagtail
Ardından, mevcut klasörde yeni bir şablon projesi oluşturun:
wagtail start myproject .
Artık mevcut klasörde bir şablon Wagtail projeniz var:
ls -F
Dockerfile home/ manage.py* myproject/ requirements.txt search/ venv/
Artık geçici sanal ortamınızdan çıkıp ortamı kaldırabilirsiniz:
deactivate rm -rf venv
Bu noktadan itibaren Wagtail, kapsayıcı içinde çağrılır.
5. Destek hizmetlerini oluşturma
Ardından, destekleyici hizmetlerinizi oluşturun: özel bir hizmet hesabı, Artifact Registry, Cloud SQL veritabanı, Cloud Storage paketi ve birkaç Secret Manager değeri.
Dağıtım sırasında kullanılan şifrelerin değerlerinin güvenliğini sağlamak, herhangi bir projenin güvenliği açısından önemlidir ve kimsenin şifreleri yanlışlıkla ait olmadıkları yerlere (ör. doğrudan ayarlar dosyalarına veya doğrudan terminalinize yazarak geçmişten alınabilecekleri yerlere) koymasını önler.
Başlamak için biri proje kimliği için olmak üzere iki temel ortam değişkeni ayarlayın:
PROJECT_ID=$(gcloud config get-value core/project)
Bölge için de bir tane:
REGION=us-central1
Hizmet hesabı oluşturma
Hizmetin Google Cloud'un diğer bölümlerine erişimini sınırlamak için özel bir hizmet hesabı oluşturun:
gcloud iam service-accounts create cloudrun-serviceaccount
Bu kod laboratuvarının sonraki bölümlerinde bu hesaba e-posta adresiyle referans vereceksiniz. Bu değeri bir ortam değişkeninde ayarlayın:
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --filter cloudrun-serviceaccount --format "value(email)")
Artifact Registry oluşturma
Oluşturulan container görüntüsünü depolamak için seçtiğiniz bölgede bir Container Registry oluşturun:
gcloud artifacts repositories create containers --repository-format docker --location $REGION
Bu kayıt otoritesine bu kod laboratuvarının sonraki bölümlerinde adla referans vereceksiniz:
ARTIFACT_REGISTRY=${REGION}-docker.pkg.dev/${PROJECT_ID}/containers
Veritabanını oluşturma
Cloud SQL örneği oluşturun:
gcloud sql instances create myinstance --project $PROJECT_ID \ --database-version POSTGRES_14 --tier db-f1-micro --region $REGION
Bu işlemin tamamlanması birkaç dakika sürebilir.
Bu durumda, bir veritabanı oluşturun:
gcloud sql databases create mydatabase --instance myinstance
Aynı örnekte bir kullanıcı oluşturun:
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
Hizmet hesabına örneğe bağlanma izni verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:${SERVICE_ACCOUNT} \ --role roles/cloudsql.client
Storage paketini oluşturma
Cloud Storage paketi oluşturun (adın dünya genelinde benzersiz olması gerekir):
GS_BUCKET_NAME=${PROJECT_ID}-media gcloud storage buckets create gs://${GS_BUCKET_NAME} --location ${REGION}
Hizmet hesabına paketi yönetme izni verin:
gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET_NAME} \ --member serviceAccount:${SERVICE_ACCOUNT} \ --role roles/storage.admin
Pakette depolanan nesnelerin kaynağı farklı olacağından (Cloud Run URL'si yerine paket URL'si) Merkezler Arası Kaynak Paylaşımı (CORS) ayarlarını yapılandırmanız gerekir.
Aşağıdaki içerikleri içeren cors.json
adlı yeni bir dosya oluşturun:
touch cors.json cloudshell edit cors.json
cors.json
[
{
"origin": ["*"],
"responseHeader": ["Content-Type"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
Yeni oluşturulan depolama paketine şu CORS yapılandırmasını uygulayın:
gsutil cors set cors.json gs://$GS_BUCKET_NAME
Yapılandırmayı gizli anahtar olarak depolama
Destek hizmetlerini ayarladıktan sonra bu değerleri Secret Manager kullanılarak korunan bir dosyada depolarsınız.
Secret Manager, gizli anahtarları ikili blob veya metin dizesi olarak depolamanıza, yönetmenize ve bunlara erişmenize olanak tanır. Bu yöntem, veritabanı şifreleri, API anahtarları veya bir uygulamanın çalışma zamanında ihtiyaç duyduğu TLS sertifikaları gibi yapılandırma bilgilerini depolamak için iyi bir yöntemdir.
Öncelikle, veritabanı bağlantı dizesi, medya paketi, Django için gizli anahtar (oturumların ve jetonların kriptografik olarak imzalanması için kullanılır) ve hata ayıklama özelliğini etkinleştirmek üzere değerleri içeren bir dosya oluşturun:
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
Ardından, bu dosyayı gizli anahtar olarak kullanarak application_settings
adlı bir gizli anahtar oluşturun:
gcloud secrets create application_settings --data-file .env
Hizmet hesabının bu gizliye erişmesine izin verin:
gcloud secrets add-iam-policy-binding application_settings \ --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor
Gizli anahtarları listeleyerek gizli anahtarın oluşturulduğunu onaylayın:
gcloud secrets versions list application_settings
Gizli anahtarın oluşturulduğunu onayladıktan sonra yerel dosyayı kaldırın:
rm .env
6. Uygulamanızı yapılandırın
Daha önce oluşturduğunuz şablon projede bazı değişiklikler yapmanız gerekiyor. Bu değişiklikler, Wagtail ile birlikte gelen şablon ayarları yapılandırmalarının karmaşıklığını azaltacak ve ayrıca Wagtail'i daha önce oluşturduğunuz destekleyici hizmetlerle entegre edecektir.
Ayarları yapılandırma
Oluşturulan base.py
ayarlar dosyasını bulun ve ana myproject
klasöründe basesettings.py
olarak yeniden adlandırın:
mv myproject/settings/base.py myproject/basesettings.py
Cloud Shell web düzenleyicisini kullanarak aşağıdaki kodu içeren yeni bir settings.py
dosyası oluşturun:
touch myproject/settings.py cloudshell edit myproject/settings.py
projem/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",
},
}
Her yapılandırmayla ilgili eklenen yorumları okumaya zaman ayırın.
Bu dosyada linting hataları görebilirsiniz. Bu beklenen bir durumdur. Cloud Shell, bu projenin koşullarıyla ilgili bağlama sahip olmadığından geçersiz ve kullanılmayan içe aktarma işlemlerini bildirebilir.
Ardından eski ayarlar klasörünü kaldırın.
rm -rf myproject/settings/
Ardından iki ayar dosyanız olur: biri Wagtail'den, diğeri de bu ayarlardan yararlanarak oluşturduğunuz dosya:
ls myproject/*settings*
myproject/basesettings.py myproject/settings.py
Son olarak, manage.py
ayarlar dosyasını açın ve Wagtail'e ana settings.py
dosyasını işaret etmesini söyleyecek şekilde yapılandırmayı güncelleyin.
cloudshell edit manage.py
manage.py satırı (önceki)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
manage.py satırı (sonra)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
myproject/wsgi.py
dosyası için aynı yapılandırma değişikliğini yapın:
cloudshell edit myproject/wsgi.py
myproject/wsgi.py satırı (önceki)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")
myproject/wsgi.py satırı (sonra)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
Otomatik olarak oluşturulan Dockerfile dosyasını kaldırın:
rm Dockerfile
Python bağımlılıkları
requirements.txt
dosyasını bulun ve aşağıdaki paketleri ekleyin:
cloudshell edit requirements.txt
requirements.txt (ekleme)
gunicorn psycopg2-binary django-storages[google] django-environ
Uygulama resminizi tanımlama
Cloud Run, Cloud Run Container Sözleşmesi'ne uygun olduğu sürece tüm container'ları çalıştırır. Bu eğitimde, Dockerfile
yerine Cloud Native Buildpacks kullanılmıştır. Buildpack'ler, Python da dahil olmak üzere yaygın diller için kapsayıcı oluşturmaya yardımcı olur.
Bu eğitimde, web uygulamasını başlatmak için kullanılan Procfile
öğesini özelleştirmeyi seçiyoruz.
Şablon projeyi kapsayıcıya yerleştirmek için önce projenizin üst düzeyinde (manage.py
ile aynı dizinde) Procfile
adlı yeni bir dosya oluşturun ve aşağıdaki içeriği kopyalayın:
touch Procfile cloudshell edit Procfile
Procfile
web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application
7. Taşıma adımlarını yapılandırma, derleme ve çalıştırma
Cloud SQL veritabanınızda veritabanı şemasını oluşturmak ve Cloud Storage paketinizi statik öğelerinizle doldurmak için migrate
ve collectstatic
komutlarını çalıştırmanız gerekir.
Bu temel Django taşıma komutlarının, derlenmiş kapsayıcı görüntünüzün bağlamında veritabanınıza erişerek çalıştırılması gerekir.
Django yöneticisine giriş yapmak için bir yönetici hesabı oluşturmak üzere createsuperuser
komutunu da çalıştırmanız gerekir.
Bunu yapmak için bu görevleri gerçekleştirmek üzere Cloud Run Jobs'ı kullanırsınız. Cloud Run işleri, belirli bir sonu olan işlemleri çalıştırmanıza olanak tanır. Bu da onları yönetim görevleri için ideal kılar.
Django süper kullanıcı şifrenizi tanımlama
Süper kullanıcı oluşturmak için createsuperuser
komutunun etkileşimli olmayan sürümünü kullanırsınız. Bu komut, şifre girme istemi yerine özel olarak adlandırılmış bir ortam değişkeni kullanılmasını gerektirir.
Rastgele oluşturulmuş bir şifre kullanarak yeni bir gizli anahtar oluşturun:
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=-
Hizmet hesabınızın bu gizliye erişmesine izin verin:
gcloud secrets add-iam-policy-binding django_superuser_password \ --member serviceAccount:${SERVICE_ACCOUNT} \ --role roles/secretmanager.secretAccessor
Procfile dosyanızı güncelleme
Cloud Run işlerinizin netliğini artırmak için Procfile dosyanızda kısayollar oluşturun ve aşağıdaki giriş noktalarını Procfile
dosyasına ekleyin:
migrate: python manage.py migrate && python manage.py collectstatic --noinput --clear createuser: python manage.py createsuperuser --username admin --email noop@example.com --noinput
Artık üç girişiniz olmalıdır: varsayılan web
giriş noktası, veritabanı taşıma işlemlerini uygulamak için migrate
giriş noktası ve createsuperuser
komutunu çalıştırmak için createuser
giriş noktası.
Uygulama görüntünüzü oluşturma
Procfile güncellemelerinizi yaptıktan sonra görüntüyü oluşturun:
gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage
Cloud Run işleri oluşturma
Görüntü oluşturulduğuna göre bu görüntüyü kullanarak Cloud Run işleri oluşturabilirsiniz.
Bu işler, daha önce oluşturulan resmi kullanır ancak farklı command
değerleri kullanır. Bunlar Procfile
'teki değerlerle eşlenir.
Taşıma işlemi için bir iş oluşturun:
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
Kullanıcı oluşturma işlemi için bir iş oluşturun:
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 işlerini yürütme
İş yapılandırmaları uygulandıktan sonra taşıma işlemlerini çalıştırın:
gcloud run jobs execute migrate --region $REGION --wait
Bu komut çıkışında yürütmenin "başarıyla tamamlandığı"ndan emin olun.
Bu komutu daha sonra uygulamanızda güncelleme yaptığınızda çalıştırırsınız.
Veritabanı kurulumuyla, işi kullanarak kullanıcıyı oluşturun:
gcloud run jobs execute createuser --region $REGION --wait
Bu komut çıkışında yürütmenin "başarıyla tamamlandığı"ndan emin olun.
Bu komutu tekrar çalıştırmanız gerekmez.
8. Cloud Run'a dağıt
Destek hizmetleri oluşturulup doldurulduğuna göre, bunlara erişmek için Cloud Run hizmetini oluşturabilirsiniz.
Kapsüllenen uygulamanızın Cloud Run'a ilk dağıtımı aşağıdaki komut kullanılarak oluşturulur:
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
Dağıtım tamamlanana kadar birkaç dakika bekleyin. İşlem başarılı olursa komut satırı hizmet URL'sini gösterir:
Service [wagtail-cloudrun] revision [wagtail-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic. Service URL: https://wagtail-cloudrun-...run.app
Artık bir web tarayıcısında bu URL'yi açarak dağıtılan kapsayıcınızı ziyaret edebilirsiniz:
9. Django Yöneticisi'ne erişme
CSRF ayarlarını güncelleme
Django, Siteler Arası İstek Sahteciliği (CSRF)'ye karşı korumalar içerir. Django yöneticisine giriş yapma dahil olmak üzere Django sitenizde bir form gönderildiğinde Güvenilir Kaynaklar ayarı kontrol edilir. Bu, isteğin kaynağıyla eşleşmezse Django bir hata döndürür.
mysite/settings.py
dosyasında CLOUDRUN_SERVICE_URL
ortam değişkeni tanımlanmışsa CSRF_TRUSTED_ORIGINS
ve ALLOWED_HOSTS
ayarlarında kullanılır. ALLOWED_HOSTS
'ü tanımlamak zorunlu olmasa da CSRF_TRUSTED_ORIGINS
için zaten gerekli olduğundan bunu eklemek iyi bir uygulamadır.
Hizmet URL'nize ihtiyacınız olduğu için bu yapılandırma, ilk dağıtımınızdan sonra eklenebilir.
Bu ortam değişkenini eklemek için hizmetinizi güncellemeniz gerekir. application_settings
gizlisine veya doğrudan ortam değişkeni olarak eklenebilir.
Aşağıdaki uygulamada gcloud biçimlendirme ve kaçış karakteri özelliklerinden yararlanılmıştır.
Hizmet URL'nizi alın:
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
Bu değeri Cloud Run hizmetinizde bir ortam değişkeni olarak ayarlayın:
gcloud run services update wagtail-cloudrun \ --region $REGION \ --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"
Django Yöneticisi'ne giriş yapma
Django yönetici arayüzüne erişmek için hizmet URL'nize /admin
ekleyin.
Ardından "admin" kullanıcı adıyla giriş yapın ve aşağıdaki komutu kullanarak şifrenizi alın:
gcloud secrets versions access latest --secret django_superuser_password && echo ""
10. Uygulamanızı geliştirme
Uygulamanızı geliştirirken yerel olarak test etmek istersiniz. Bunu yapmak için Cloud SQL ("üretim") veritabanınıza veya yerel ("test") bir veritabanına bağlanmanız gerekir.
Üretim veritabanınıza bağlanma
Cloud SQL Auth Proxy'yi kullanarak Cloud SQL örneklerinize bağlanabilirsiniz. Bu uygulama, yerel makineniz ile veritabanı arasında bir bağlantı oluşturur.
Cloud SQL Auth Proxy'yi yükledikten sonra aşağıdaki adımları uygulayın:
# 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
İşinizi tamamladıktan sonra temp_settings
dosyasını kaldırdığınızdan emin olun.
Yerel bir SQLite veritabanına bağlanma
Alternatif olarak, uygulamanızı geliştirirken yerel bir veritabanı da kullanabilirsiniz. Django hem PostgreSQL hem de SQLite veritabanlarını destekler. PostgreSQL'in SQLite'te bulunmayan bazı özellikleri vardır ancak çoğu durumda işlevler aynıdır.
SQLite'i kurmak için uygulama ayarlarınızı güncelleyerek yerel bir veritabanına yönlendirmeniz ve ardından şema taşıma işlemlerinizi uygulamanız gerekir.
Bu yöntemi ayarlamak için:
# 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
İşinizi tamamladıktan sonra temp_settings
dosyasını kaldırdığınızdan emin olun.
Taşıma işlemleri oluşturma
Veritabanı modellerinizde değişiklik yaparken python manage.py makemigrations
'yi çalıştırarak Django'nun taşıma dosyalarını oluşturmanız gerekebilir.
Bu komutu, üretim veya test veritabanı bağlantısını oluşturduktan sonra çalıştırabilirsiniz. Alternatif olarak, boş ayarlar vererek taşıma dosyalarını veritabanı olmadan da oluşturabilirsiniz:
SECRET_KEY="" DATABASE_URL="" GS_BUCKET_NAME="" python manage.py makemigrations
Uygulama güncellemelerini uygulama
Uygulamanızda değişiklikleri uygulamak için:
- Değişikliklerinizi yeni bir resimde birleştirin,
- Tüm veritabanı veya statik taşıma işlemlerini uygulayın ve ardından
- Cloud Run hizmetinizi yeni görüntüyü kullanacak şekilde güncelleyin.
Görüntünüzü oluşturmak için:
gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage
Uygulamanız gereken taşıma işlemleriniz varsa Cloud Run işini çalıştırın:
gcloud run jobs execute migrate --region $REGION --wait
Hizmetinizi yeni görüntüyle güncellemek için:
gcloud run services update wagtail-cloudrun \ --region $REGION \ --image ${ARTIFACT_REGISTRY}/myimage
11. Tebrikler!
Karmaşık bir projeyi Cloud Run'a dağıttınız.
- Cloud Run, alınan istekleri işlemek için kapsayıcı resminizi otomatik ve yatay olarak ölçeklendirir, ardından talep azaldığında ölçeği düşürür. Yalnızca istek işleme sırasında tüketilen CPU, bellek ve ağ bağlantısı için ödeme yaparsınız.
- Cloud SQL, sizin için otomatik olarak yönetilen ve birçok Google Cloud sistemine doğal olarak entegre edilen bir yönetilen PostgreSQL örneği sağlamanıza olanak tanır.
- Cloud Storage, Django'da sorunsuz bir şekilde erişebileceğiniz bulut depolama alanı sağlar.
- Secret Manager, gizli anahtarları depolamanıza ve bunlara Google Cloud'un belirli bölümlerinden erişilmesine izin verir.
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirilmesini istemiyorsanız şunları yapın:
- Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde projenizi seçip Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
Daha fazla bilgi
- Cloud Run'da Django: https://cloud.google.com/python/django/run
- Python ile Hello Cloud Run: https://codelabs.developers.google.com/codelabs/cloud-run-hello-python3
- Google Cloud'da Python: https://cloud.google.com/python
- Google Cloud Python istemcisi: https://github.com/googleapis/google-cloud-python
/