Cloud Run'da Django CMS

Cloud Run'da Django CMS

Bu codelab hakkında

subjectSon güncelleme Oca 31, 2024
account_circleYazan: Katie McLaughlin

1. Giriş

894762ebb681671c.png

Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanızı sağlayan bir yönetilen bilgi 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ştirilmiş nesne depolama için Cloud Storage ve gizli anahtarları yönetmek için Secret Manager gibi Google Cloud ekosisteminin diğer birçok bölümüyle yerel olarak arayüz oluşturur.

Django CMS, Django'nun üzerine kurulmuş kurumsal bir içerik yönetim sistemidir (İYS). Django, üst düzey bir Python web çerçevesidir.

Bu eğiticide bu bileşenleri kullanarak küçük bir Django İYS projesi dağıtacaksınız.

Not: Bu codelab'in en son Django CMS 3.11.4 ile django-cms/cms-template v3.11 arasındaki sürümleri 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 nasıl kullanılır?
  • Google Cloud bileşenlerini Cloud Run hizmetine bağlama
  • Derleme container'ları depolamak için Container Registry'yi kullanma
  • Cloud Run'a dağıtım yapma
  • Cloud Build'de veritabanı şeması taşıma işlemlerini çalıştırma

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle PROJECT_ID olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Google Cloud Shell

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir 853e55310c205094.png simgesini tıklayın.

3c1dabeca90e44e5.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.

9c92662c6a846a5c.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

9f0e51b578fecce5.png

Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak 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`
  1. gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud APIs&#39;i etkinleştirme

Cloud Shell'den, kullanılacak bileşenler için Cloud API'lerini 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 ilk kez API çağırdığınız için bu istekte bulunmak için kimlik bilgilerinizi kullanarak yetkilendirme yapmanız istenir. Bu işlem, her 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örünecektir:

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

4. Şablon projesi oluşturma

Örnek Django içerik yönetim sistemi projeniz olarak Django CMS cms-template şablonunu kullanacaksınız.

Bu şablon projesini oluşturmak için Cloud Shell'i kullanarak djangocms-cloudrun adında yeni bir dizin oluşturun ve bu dizine gidin:

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

django-cms paketini geçici bir sanal ortama yükleyin:

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

Cms-şablonu projesinin bir kopyasını oluşturun:

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

Artık myproject adlı klasörde bir şablon Django CMS projeniz olacak:

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

Artık geçici sanal ortamınızdan çıkıp bunu kaldırabilirsiniz:

deactivate
rm -rf venv

Buradan, kapsayıcı içinde Django CMS çağrılır.

Ayrıca, otomatik olarak kopyalanan gereklilikler.in dosyasını da kaldırabilirsiniz (requirements.txt dosyaları oluşturmak için pip-tools tarafından kullanılır). Şu codelab'de kullanılmayacaktır:

rm requirements.in

5. Destek hizmetlerini oluşturma

Yedekleme hizmetlerinizi oluşturacaksınız: özel bir hizmet hesabı, Artifact Registry, Cloud SQL veritabanı, Cloud Storage paketi ve birkaç Secret Manager değeri.

Dağıtımda kullanılan şifrelerin değerlerinin güvenliğini sağlamak projelerin güvenliği için önemlidir ve hiç kimse şifreleri ait olmadığı bir yere yanlışlıkla koymamasını sağlar (örneğin, doğrudan ayar dosyalarına veya geçmişten alınabilecekleri terminalinize doğrudan yazılabilir).

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)

İkincisi, bölge için:

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 codelab'in gelecekteki bölümlerinde bu hesaba, e-posta adresi aracılığıyla referans verebilirsiniz. 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

Derlenen container görüntüsünü depolamak için seçtiğiniz bölgede bir container kayıt defteri oluşturun:

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

Bu codelab'in gelecekteki bölümlerinde bu kayıt defterine adını kullanarak referans olacaksınız:

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 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

Depolama paketi oluşturma

Cloud Storage paketi oluşturun (adın global olarak benzersiz olması gerektiğini belirtmek isteriz):

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

Hizmet hesabına paketi yönetme izinlerini 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ğı için (Cloud Run URL'si yerine paket URL'si) Kaynaklar Arası Kaynak Paylaşımı (CORS) ayarlarını yapılandırmanız gerekir.

Aşağıdaki içeriğe sahip 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
   
}
]

Bu CORS yapılandırmasını yeni oluşturulan depolama paketine uygulayın:

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

Yapılandırmayı gizli anahtar olarak depola

Yedekleme hizmetlerini ayarladıktan sonra bu değerleri Secret Manager ile korunan bir dosyada depolayacaksınız.

Secret Manager, gizli anahtarları ikili blob'lar veya metin dizeleri olarak depolamanıza, yönetmenize ve bunlara erişmenize olanak tanır. Çalışma zamanında bir uygulamanın ihtiyaç duyduğu veritabanı şifreleri, API anahtarları veya TLS sertifikaları gibi yapılandırma bilgilerini depolamak için iyi bir şekilde çalışır.

Öncelikle veri tabanı bağlantı dizesi, medya paketi ve Django için gizli anahtar (oturumların ve jetonların şifreli imzalanması için kullanılır) değerlerini içeren bir dosya oluşturun ve hata ayıklamayı etkinleştirin:

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 kullanıp application_settings adında bir gizli anahtar oluşturun:

gcloud secrets create application_settings --data-file .env

Hizmet hesabının bu gizli anahtara 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

Az önce oluşturduğunuz destek hizmetlerini göz önünde bulundurarak şablon projesinde buna uygun bazı değişiklikler yapmanız gerekir.

Bu kapsamda, yapılandırma ayarlarınız olarak ortam değişkenlerini kullanmak üzere django-environ özelliği kullanıma sunulacaktır. Bu değişkenleri, gizli anahtar olarak tanımladığınız değerleri temel alarak oluşturacaksınız. Bunu uygulamak için şablon ayarlarını genişletirsiniz. Ayrıca, başka Python bağımlılıkları da eklemeniz gerekir.

Ayarları yapılandırma

settings.py dosyasını basesettings.py: olarak yeniden adlandırarak taşıyın

mv myproject/settings.py myproject/basesettings.py

Cloud Shell web düzenleyicisini kullanarak aşağıdaki kodla yeni bir settings.py dosyası oluşturun:

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"

Her yapılandırma hakkında eklenen yorumları okumak için zaman ayırın.

Bu dosyada hata analizi hataları görebileceğinizi unutmayın. Bu beklenen bir durumdur. Cloud Shell'de bu projenin koşulları hakkında bilgi bulunmadığından geçersiz içe aktarmalar ve kullanılmayan içe aktarmalar raporlanabilir.

Python bağımlılıkları

requirements.txt dosyasını bulun ve aşağıdaki paketleri ekleyin:

cloudshell edit requirements.txt

requirements.txt (ek)

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

Uygulama görüntünüzü tanımlama

Cloud Run, Cloud Run Kapsayıcı Sözleşmesi'ne uygun olduğu sürece her container'ı çalıştırır. Bu eğiticide Dockerfile atlanır ancak bunun yerine Cloud Yerel Derleme Paketleri kullanılır. Derleme paketleri, Python dahil olmak üzere yaygın olarak kullanılan diller için container oluşturmaya yardımcı olur.

Bu eğiticide, web uygulamasını başlatmak için kullanılan Procfile'ın özelleştirilmesi amaçlanır.

Şablon projesini kapsayıcıya almak için önce projenizin üst düzeyinde Procfile adlı yeni bir dosya oluşturun (manage.py ile aynı dizinde) 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ı oluşturmak ve Cloud Storage paketinizi statik öğelerinizle doldurmak için migrate ve collectstatic çalıştırmanız gerekir.

Bu temel Django taşıma komutlarının, veritabanınıza erişimi olan derleme container görüntünüz bağlamında çalıştırılması gerekir.

Ayrıca, Django yöneticisine giriş yapmak üzere bir yönetici hesabı oluşturmak için createsuperuser komutunu çalıştırmanız gerekir.

Bunun için Cloud Run İşlerini kullanarak bu görevleri gerçekleştireceksiniz. Cloud Run işleri, belirli bir sona eren işlemleri çalıştırmanızı sağladığından yönetim görevleri için idealdir.

Django süper kullanıcı şifrenizi tanımlayın

Süper kullanıcıyı oluşturmak için createsuperuser komutunun etkileşimsiz sürümünü kullanırsınız. Bu komut, şifre girme isteminin yerine kullanılacak özel olarak adlandırılmış bir ortam değişkeni 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 gizli anahtara erişmesine izin verin:

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

Procfile'ınızı güncelleme

Cloud Run işlerinizin daha anlaşılır olması için Procfile'ınızda kısayollar oluşturun ve aşağıdaki giriş noktalarını Procfile öğesine 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ü derleyin:

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

Cloud Run işleri oluşturma

Görüntü mevcut olduğuna göre artık bu görüntüyü kullanarak Cloud Run işleri oluşturabilirsiniz.

Bu işler daha önce oluşturulan görüntüyü kullanır ancak farklı command değerleri kullanır. Bunlar, Procfile içindeki değerlerle eşleşir.

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ı hazır olduğunda taşıma işlemlerini çalıştırın:

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

Bu komut çıkışının, yürütmenin "başarıyla tamamlandı" ifadesini içerdiğinden emin olun.

Bu komutu daha sonra uygulamanızda güncelleme yaparken çalıştıracaksınız.

Veritabanı kurulumunda işi kullanarak kullanıcıyı oluşturun:

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

Bu komut çıkışının, yürütmenin "başarıyla tamamlandı" ifadesini içerdiğinden emin olun.

Bu komutu tekrar çalıştırmanız gerekmez.

8. Cloud Run&#39;a dağıt

Yedek hizmetleri oluşturulup doldurulduktan sonra artık bunlara erişmek için Cloud Run hizmetini oluşturabilirsiniz.

Container mimarisine alınmış uygulamanızın Cloud Run'a ilk dağıtımı, aşağıdaki komut kullanılarak oluşturulur:

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

Dağıtım tamamlanana kadar birkaç dakika bekleyin. İşlem başarılı olursa komut satırında hizmet URL'si gösterilir:

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

Artık bir web tarayıcısında şu URL'yi açarak dağıtılan kapsayıcınızı ziyaret edebilirsiniz:

e54d1a1486427431.png

Bu yeni bir yükleme olduğundan, otomatik olarak giriş sayfasına yönlendirileceksiniz.

9. Django Yöneticisine Erişme

Django CMS'nin temel özelliklerinden biri, etkileşimli yöneticisidir.

CSRF ayarları güncelleniyor

Django, Siteler Arası İstek Sahtekarlığına (CSRF) karşı koruma içerir. Django yöneticisine giriş yapmak da dahil olmak üzere Django sitenizde her form gönderildiğinde Güvenilir Kaynaklar ayarı işaretlenir. Django, 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 eklemeniz önerilir.

Hizmet URL'nize ihtiyaç duyduğunuzdan bu yapılandırma, ilk dağıtımınıza kadar eklenemez.

Bu ortam değişkenini eklemek için hizmetinizi güncellemeniz gerekir. Application_settings gizli anahtarına veya doğrudan bir ortam değişkeni olarak eklenebilir.

Hizmet URL'nizi alın:

CLOUDRUN_SERVICE_URL=$(gcloud run services describe djangocms-cloudrun \
  --platform managed \
  --region $REGION  \
  --format "value(status.url)")
echo $CLOUDRUN_SERVICE_URL

Bu değeri, Cloud Run hizmetinizde bir ortam değişkeni olarak ayarlayın:

gcloud run services update djangocms-cloudrun \
  --region $REGION \
  --update-env-vars CLOUDRUN_SERVICE_URL=$CLOUDRUN_SERVICE_URL

Django Yöneticisine giriş yapma

Django yönetici arayüzüne erişmek için hizmet URL'nize /admin ifadesini ekleyin.

Şimdi "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 ""

13d77046e2e7427.png

10. Uygulama güncellemeleri uygulanıyor

Uygulamanızı geliştirdikçe yerel olarak test etmek istersiniz. Bunun için Cloud SQL ("üretim") veritabanınıza veya yerel ("test") veritabanına bağlanmanız gerekir.

Üretim veritabanınıza bağlanın

Cloud SQL Auth Proxy'yi kullanarak Cloud SQL örneklerinize bağlanabilirsiniz. Bu uygulama, yerel makinenizle 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 --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

Çalışmanızı bitirdikten sonra temp_settings dosyasını kaldırdığınızdan emin olun.

Yerel SQLite veritabanına bağlanın

Alternatif olarak, uygulamanızı geliştirirken yerel bir veritabanı da kullanabilirsiniz. Django, hem PostgreSQL hem de SQLite veritabanlarını destekler. Ayrıca, PostgreSQL'de SQLite'ta bulunmayan bazı özellikler vardır ancak çoğu durumda işlevler aynıdır.

SQLite'ı kurmak için uygulama ayarlarınızı güncellemeniz, kullanıcıları yerel bir veritabanını işaret edecek şekilde değiştirmeniz 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

Çalışmanızı bitirdikten sonra temp_settings dosyasını kaldırdığınızdan emin olun.

Taşıma işlemi oluşturma

Veritabanı modellerinizde değişiklik yaparken python manage.py makemigrations komutunu çalıştırarak Django'nun taşıma dosyalarını oluşturmanız gerekebilir.

Bu komutu, üretim veya test veritabanı bağlantısını kurduktan 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üncellemeleri uygulanıyor

Değişiklikleri uygulamanıza uygulamak için yapmanız gerekenler:

  • değişikliklerinizi yeni bir görüntüye
  • gerekli tüm veritabanı veya statik taşımaları uygulayıp
  • yeni görüntüyü kullanmak için Cloud Run hizmetinizi güncelleyin.

Görüntünüzü oluşturmak için:

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

Uygulanacak taşıma işleminiz 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 djangocms-cloudrun \
  --platform managed \
  --region $REGION \
  --image gcr.io/${PROJECT_ID}/myimage

11. Tebrikler!

Cloud Run'a karmaşık bir proje dağıttınız.

  • Cloud Run, alınan istekleri işlemek için container görüntünüzü otomatik ve yatay olarak ölçeklendirir. Ardından, talep azaldığında ölçeği küçültür. Yalnızca istek işleme sırasında tüketilen CPU, bellek ve ağ için ödeme yaparsınız.
  • Cloud SQL, sizin için otomatik olarak korunan ve birçok Google Cloud sistemine yerel olarak entegre edilen, yönetilen bir PostgreSQL örneği sağlamanıza olanak tanır.
  • Cloud Storage, Django'da sorunsuz olarak erişilebilen bulut depolama alanına sahip olmanızı sağlar.
  • Secret Manager, gizli anahtarları depolamanıza ve bunlara Google Cloud'un belirli bölümleri tarafından erişilmesini sağlamanıza olanak tanır.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirilmesini önlemek amacıyla:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinde projenizi seçin ve 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