Aplikasi Django yang berjalan di GKE diskalakan secara dinamis sesuai dengan traffic.
Tutorial ini mengasumsikan bahwa Anda sudah memahami pengembangan web Django. Jika Anda baru dalam pengembangan Django, sebaiknya pelajari cara menulis aplikasi Django pertama Anda sebelum melanjutkan.
Meskipun tutorial ini menunjukkan Django secara khusus, Anda dapat menggunakan proses deployment ini dengan framework berbasis Django lainnya, seperti Wagtail dan Django CMS.
Tutorial ini menggunakan Django 5, yang memerlukan setidaknya Python 3.10.Anda juga harus menginstal Docker.
Tujuan
Dalam tutorial ini, Anda akan:
- Membuat dan menghubungkan database Cloud SQL.
- Membuat dan menggunakan nilai secret Kubernetes.
- Men-deploy aplikasi Django ke Google Kubernetes Engine.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Cloud de Confiance by S3NSyang dapat ditagih berikut:
Sebelum memulai
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Cloud SQL, GKE and Compute Engine APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the gcloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Menyiapkan lingkungan Anda
Meng-clone aplikasi sampel
Kode untuk aplikasi contoh Django ada di repositori GoogleCloudPlatform/python-docs-samples di GitHub.
Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya atau meng-clone repositori ke komputer lokal Anda:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitBuka direktori yang berisi kode contoh:
Linux/macOS
cd python-docs-samples/kubernetes_engine/django_tutorialWindows
cd python-docs-samples\kubernetes_engine\django_tutorial
Konfirmasi penyiapan Python Anda
Tutorial ini mengandalkan Python untuk menjalankan aplikasi contoh di komputer Anda. Kode contoh juga memerlukan penginstalan dependensi
Untuk mengetahui detail selengkapnya, lihat panduan lingkungan pengembangan Python.
Pastikan Python Anda minimal versi 3.10.
python -VAnda akan melihat
Python 3.10.0atau lebih tinggi.Buat lingkungan virtual Python dan instal dependensi:
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txtWindows
python -m venv venv venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Download Cloud SQL Auth Proxy untuk terhubung ke Cloud SQL dari komputer lokal Anda
Saat di-deploy, aplikasi Anda menggunakan Cloud SQL Auth Proxy yang di-build ke dalam lingkungan Google Kubernetes Engine untuk berkomunikasi dengan instance Cloud SQL Anda. Namun, untuk menguji aplikasi secara lokal, Anda harus menginstal dan menggunakan salinan lokal proxy di lingkungan pengembangan Anda. Untuk mengetahui detail selengkapnya, lihat Panduan Proxy Auth Cloud SQL.
Cloud SQL Auth Proxy menggunakan Cloud SQL API untuk berinteraksi dengan instance SQL Anda. Untuk melakukannya, diperlukan autentikasi aplikasi melalui gcloud CLI.
Lakukan autentikasi dan dapatkan kredensial untuk API:
gcloud auth application-default loginDownload dan instal Cloud SQL Auth Proxy ke komputer lokal Anda.
Sebelum memulai, Anda harus menentukan arsitektur mesin Anda.
Jika berjalan di Linux atau Mac, Anda dapat menemukannya dengan menjalankan perintah berikut:
uname -a
Linux 64 bit
- Download Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.linux.amd64
- Buat Cloud SQL Auth Proxy agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Linux 32 bit
- Download Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.linux.386
- Jika perintah
curltidak ditemukan, jalankansudo apt install curldan ulangi perintah download. - Buat Cloud SQL Auth Proxy agar dapat dieksekusi:
chmod +x cloud-sql-proxy
macOS 64-bit
- Download Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.darwin.amd64
- Buat Cloud SQL Auth Proxy agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Mac M1
- Download Cloud SQL Auth Proxy:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.darwin.arm64
- Buat Cloud SQL Auth Proxy agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Windows 64 bit
Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.x64.exe dan pilih Save Link As untuk mendownload Cloud SQL Auth Proxy. Ganti nama file menjadicloud-sql-proxy.exe.Windows 32 bit
Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.2/cloud-sql-proxy.x86.exe dan pilih Simpan Link Sebagai untuk mendownload Cloud SQL Auth Proxy. Ganti nama file menjadicloud-sql-proxy.exe.Image Docker Cloud SQL Auth Proxy
Cloud SQL Auth Proxy memiliki image container yang berbeda, seperti
distroless,alpine, danbuster. Image container Cloud SQL Auth Proxy default menggunakandistroless, yang tidak berisi shell. Jika Anda memerlukan shell atau alat terkait, download image berdasarkanalpineataubuster. Untuk mengetahui informasi selengkapnya, lihat Image Container Cloud SQL Auth Proxy.Anda dapat menarik image terbaru ke mesin lokal menggunakan Docker dengan perintah berikut:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.2
OS Lainnya
Untuk sistem operasi lain yang tidak disertakan di sini, Anda dapat mengompilasi Cloud SQL Auth Proxy dari sumber.Anda dapat memilih untuk memindahkan hasil download ke lokasi umum, seperti lokasi di
PATH, atau direktori utama Anda. Jika Anda memilih untuk melakukannya, saat memulai Cloud SQL Auth Proxy nanti dalam tutorial, ingatlah untuk mereferensikan lokasi yang Anda pilih saat menggunakan perintahcloud-sql-proxy.- Download Cloud SQL Auth Proxy:
Membuat layanan pendukung
Tutorial ini menggunakan beberapa layanan Cloud de Confiance by S3NS untuk menyediakan database, penyimpanan media, dan penyimpanan secret yang mendukung project Django yang di-deploy. Layanan ini di-deploy di region tertentu. Agar efisien di antara layanan, semua layanan harus di-deploy di region yang sama. Untuk mengetahui informasi selengkapnya tentang region terdekat dengan Anda, lihat Produk yang tersedia menurut region.
Menyiapkan instance Cloud SQL untuk PostgreSQL
Django secara resmi mendukung beberapa database relasional, tetapi menawarkan dukungan terbanyak untuk PostgreSQL. PostgreSQL didukung oleh Cloud SQL, sehingga tutorial ini memilih untuk menggunakan jenis database tersebut.
Bagian berikut menjelaskan pembuatan instance, database, dan pengguna database PostgreSQL untuk aplikasi.
Buat instance PostgreSQL:
Konsol
Di konsol Cloud de Confiance , buka halaman Instance Cloud SQL.
Klik Create Instance.
Klik Pilih PostgreSQL.
Untuk SQL Edition, pilih "Enterprise".
Untuk Edition Preset, pilih "Sandbox".
Di kolom ID Instance, masukkan
INSTANCE_NAME.Masukkan sandi untuk pengguna postgres.
Pertahankan nilai default untuk kolom lainnya.
Klik Create Instance.
Perlu waktu beberapa menit hingga instance siap digunakan.
gcloud
Buat instance PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_16 \ --tier db-n1-standard-2 \ --region REGION
Ganti kode berikut:
INSTANCE_NAME: nama instance Cloud SQLPROJECT_ID: Cloud de Confiance by S3NS project IDREGION: Cloud de Confiance by S3NS region
Perlu waktu beberapa menit untuk membuat instance dan menyiapkannya untuk digunakan.
Dalam instance yang dibuat, buat database:
Konsol
- Di halaman instance, buka tab Databases.
- Klik Create database.
- Dalam dialog Database Name, masukkan
DATABASE_NAME. - Klik Create.
gcloud
Buat database dalam instance yang baru dibuat:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAMEGanti
DATABASE_NAMEdengan nama untuk database di dalam instance.
Buat pengguna database:
Konsol
- Di halaman instance, buka tab Users.
- Klik Add User Account.
- Di dialog Pilih cara mengautentikasi di bagian "Autentikasi Bawaan":
- Masukkan nama pengguna
DATABASE_USERNAME. - Masukkan sandi
DATABASE_PASSWORD - Klik Tambahkan.
gcloud
Buat pengguna dalam instance yang baru dibuat:
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORDGanti
PASSWORDdengan sandi yang aman.
Membuat akun layanan
Proxy memerlukan akun layanan dengan hak istimewa Editor untuk instance Cloud SQL Anda. Untuk mengetahui informasi selengkapnya tentang akun layanan, lihat ringkasan autentikasiCloud de Confiance .
- Di konsol Cloud de Confiance , buka halaman Service accounts.
- Pilih project yang berisi instance Cloud SQL.
- Klik Create service account.
- Pada kolom Nama akun layanan, masukkan nama deskriptif untuk akun tersebut.
- Ubah ID akun layanan menjadi nilai yang unik dan dapat dikenali, kemudian klik Buat dan lanjutkan.
-
Klik kolom Pilih peran dan pilih salah satu dari peran berikut:
- Cloud SQL > Klien Cloud SQL
- Cloud SQL > Editor Cloud SQL
- Cloud SQL > Admin Cloud SQL
- Klik Selesai untuk menyelesaikan pembuatan akun layanan.
- Klik menu tindakan untuk akun layanan baru kemudian pilih Mengelola kunci.
- Klik menu drop-down Tambahkan kunci kemudian klik Buat kunci baru.
-
Lakukan konfirmasi bahwa jenis kunci tersebut adalah JSON kemudian klik Buat.
File kunci pribadi telah didownload ke mesin. Anda dapat memindahkan file tersebut ke lokasi lain. Jaga agar file kunci tetap aman.
Mengonfigurasi setelan database
Gunakan perintah berikut untuk menetapkan variabel lingkungan untuk akses database. Variabel lingkungan ini digunakan untuk pengujian lokal.
Linux/MacOS
export DATABASE_NAME=DATABASE_NAME
export DATABASE_USER=DATABASE_USERNAME
export DATABASE_PASSWORD=DATABASE_PASSWORD
Windows
set DATABASE_USER=DATABASE_USERNAME
set DATABASE_PASSWORD=DATABASE_PASSWORD
Menyiapkan konfigurasi GKE
Aplikasi ini direpresentasikan dalam satu konfigurasi Kubernetes yang disebut
polls. Dipolls.yaml, ganti<your-project-id>dengan project IDCloud de Confiance Anda (PROJECT_ID).Jalankan perintah berikut dan catat nilai
connectionName:gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"Dalam file
polls.yaml, ganti<your-cloudsql-connection-string>dengan nilaiconnectionName.
Menjalankan aplikasi di komputer lokal Anda
Setelah layanan pendukung dikonfigurasi, Anda kini dapat menjalankan aplikasi di komputer. Penyiapan ini memungkinkan pengembangan lokal, pembuatan superuser, dan penerapan migrasi database.
Di terminal terpisah, mulai Cloud SQL Auth Proxy:
Linux/macOS
./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAMEWindows
cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAMELangkah ini membuat koneksi dari komputer lokal Anda ke instance Cloud SQL untuk tujuan pengujian lokal. Pastikan Cloud SQL Auth Proxy tetap berjalan selama Anda menguji aplikasi secara lokal. Menjalankan proses ini di terminal terpisah memungkinkan Anda untuk terus bekerja saat proses ini berjalan.
Di terminal asli, tetapkan Project ID secara lokal:
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_IDWindows
set GOOGLE_CLOUD_PROJECT=PROJECT_IDJalankan migrasi Django untuk menyiapkan model dan aset Anda:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstaticMulai server web Django:
python manage.py runserver 8080Di browser Anda, buka http://localhost:8080.
Jika Anda berada di Cloud Shell, klik tombol Web Preview, lalu pilih Preview on port 8080.
Halaman menampilkan teks berikut: "Hello, world. Anda berada di indeks jajak pendapat." Server web Django yang berjalan di komputer Anda akan mengirimkan halaman aplikasi contoh.
Tekan
Ctrl/Cmd+Cuntuk menghentikan server web lokal.
Menggunakan konsol admin Django
Untuk login ke konsol admin Django, Anda harus membuat superuser. Karena memiliki koneksi yang dapat diakses secara lokal ke database, Anda dapat menjalankan perintah pengelolaan:
Buat superuser. Anda akan diminta untuk memasukkan nama pengguna, email, dan sandi.
python manage.py createsuperuserMulai server web lokal:
python manage.py runserverDi browser, buka http://localhost:8000/admin.
Login ke situs admin menggunakan nama pengguna dan sandi yang Anda gunakan saat menjalankan
createsuperuser.
Deploy aplikasi ke GKE
Saat di-deploy ke Cloud de Confiance by S3NS, aplikasi menggunakan server Gunicorn. Gunicorn tidak menyajikan konten statis, sehingga aplikasi menggunakan Cloud Storage untuk menyajikan konten statis.
Mengumpulkan dan mengupload resource statis
Membuat bucket Cloud Storage dan menjadikannya dapat dibaca oleh publik.
gcloud storage buckets create gs://PROJECT_ID_MEDIA_BUCKET gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID_MEDIA_BUCKET --member=allUsers --role=roles/storage.legacyObjectReaderKumpulkan semua konten statis secara lokal ke dalam satu folder:
python manage.py collectstaticUpload konten statis ke Cloud Storage:
gcloud storage rsync ./static gs://PROJECT_ID_MEDIA_BUCKET/static --recursiveDi
mysite/settings.py, tetapkan nilaiSTATIC_URLke URL berikut, dengan mengganti[YOUR_GCS_BUCKET]dengan nama bucket Anda:http://storage.googleapis.com/PROJECT_ID_MEDIA_BUCKET/static/
Menyiapkan GKE
Untuk melakukan inisialisasi GKE, buka halaman Clusters.
Saat menggunakan GKE untuk pertama kalinya dalam sebuah project, Anda harus menunggu hingga "Kubernetes Engine is getting ready. Proses ini mungkin memerlukan waktu satu menit atau lebih" hingga pesan menghilang.
-
gcloud container clusters create polls \ --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \ --num-nodes 4 --zone "us-central1-a"Jika muncul pesan error yang mirip dengan
Project is not fully initialized with the default service accounts, Anda mungkin perlu menginisialisasi Google Kubernetes Engine.Lakukan inisialisasi GKE
Jika Anda menerima error, buka konsol Cloud de Confiance untuk melakukan inisialisasi GKE di project Anda.
Tunggu hingga pesan "Kubernetes Engine is getting ready. Proses ini mungkin memerlukan waktu satu menit atau lebih" menghilang.
Setelah cluster dibuat, gunakan alat command line
kubectl, yang terintegrasi dengan gcloud CLI, untuk berinteraksi dengan cluster GKE Anda. Karenagclouddankubectladalah alat yang terpisah, pastikankubectldikonfigurasi untuk berinteraksi dengan cluster yang tepat.gcloud container clusters get-credentials polls --zone "us-central1-a"
Menyiapkan Cloud SQL
Anda memerlukan beberapa secret agar aplikasi GKE dapat terhubung dengan instance Cloud SQL. Satu diperlukan untuk akses tingkat instance (koneksi), sementara dua lainnya diperlukan untuk akses database. Untuk mengetahui informasi selengkapnya tentang dua tingkat kontrol akses, lihat Kontrol akses instance.
Untuk membuat secret untuk akses tingkat instance, berikan lokasi,
PATH_TO_CREDENTIAL_FILE, kunci akun layanan JSON yang Anda download saat membuat akun layanan (lihat Membuat akun layanan):kubectl create secret generic cloudsql-oauth-credentials \ --from-file=credentials.json=PATH_TO_CREDENTIAL_FILEUntuk membuat secret bagi akses database, gunakan database SQL, nama pengguna, dan sandi yang ditentukan saat Anda membuat layanan pendukung. Lihat Menyiapkan instance Cloud SQL untuk PostgreSQL:
kubectl create secret generic cloudsql \ --from-literal=database=DATABASE_NAME \ --from-literal=username=DATABASE_USERNAME \ --from-literal=password=DATABASE_PASSWORD
Ambil image Docker publik untuk proxy Cloud SQL.
docker pull b.gcr.io/cloudsql-docker/gce-proxyBuat image Docker, ganti
<your-project-id>dengan project ID Anda.docker build -t gcr.io/PROJECT_ID/polls .Konfigurasikan Docker untuk menggunakan
gcloudsebagai helper kredensial, sehingga Anda dapat mengirim image ke Container Registry:gcloud auth configure-dockerKirim image Docker. Ganti
<your-project-id>dengan project ID Anda.docker push gcr.io/PROJECT_ID/pollsBuat resource GKE:
kubectl create -f polls.yaml
Deploy aplikasi ke GKE
Setelah resource dibuat, ada tiga pod polls di cluster.
Periksa status pod Anda:
kubectl get pods
Tunggu beberapa menit hingga status pod ditampilkan sebagai Running. Jika pod belum siap atau jika Anda melihat mulai ulang, Anda bisa mendapatkan log untuk pod tertentu guna mencari tahu masalahnya. [YOUR-POD-ID] adalah bagian dari output yang ditampilkan oleh perintah kubectl get pods sebelumnya.
kubectl logs [YOUR_POD_ID]
Lihat aplikasi berjalan di Cloud de Confiance
Setelah pod siap, Anda bisa mendapatkan alamat IP eksternal load balancer:
kubectl get services polls
Catat alamat EXTERNAL-IP, dan buka http://[EXTERNAL-IP] di browser Anda untuk melihat halaman landing polling Django dan mengakses konsol administrator.
Memahami kode
Contoh aplikasi
Aplikasi contoh Django dibuat menggunakan alat Django standar. Perintah berikut akan membuat project dan aplikasi polling:
django-admin startproject mysite
python manage.py startapp polls
Konfigurasi tampilan, model, dan rute dasar disalin dari Menulis aplikasi Django pertama Anda (Bagian 1 dan Bagian 2).
Konfigurasi database
settings.py berisi konfigurasi untuk database SQL Anda:
Konfigurasi pod Kubernetes
File polls.yaml menentukan dua resource Kubernetes. Yang pertama adalah
Service,
yang menentukan nama dan alamat IP internal yang konsisten untuk aplikasi web Django.
Yang kedua adalah load balancer HTTP
dengan alamat IP eksternal yang menghadap publik.
Service menyediakan nama jaringan dan alamat IP, dan
pod GKE menjalankan kode aplikasi di balik service.
File polls.yaml menentukan deployment yang menyediakan update deklaratif untuk pod GKE. Layanan
mengarahkan traffic ke deployment dengan mencocokkan pemilih layanan dengan
label deployment. Dalam hal ini, pemilih polls cocok dengan label
polls.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
- Di konsol Cloud de Confiance , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource satu per satu
Jika Anda tidak ingin menghapus project, hapus resource satu per satu.
Hapus cluster Google Kubernetes Engine:
gcloud container clusters delete pollsHapus image Docker yang Anda kirim ke Container Registry:
gcloud container images delete gcr.io/PROJECT_ID/pollsHapus instance Cloud SQL:
gcloud sql instances delete INSTANCE_NAME
Langkah berikutnya
- Pelajari cara mengonfigurasi PostgreSQL untuk produksi
- Pelajari lebih lanjut Django di Cloud de Confiance