Aplikasi Django yang berjalan pada standar App Engine diskalakan secara dinamis sesuai dengan traffic.
Tutorial ini mengasumsikan bahwa Anda sudah memahami pengembangan web Django. Jika Anda baru mengenal pengembangan Django, sebaiknya pelajari penulisan aplikasi Django pertama Anda sebelum melanjutkan.
Meskipun tutorial ini secara khusus menunjukkan Django, Anda dapat menggunakan proses deployment ini dengan framework berbasis Django lainnya, seperti Wagtail dan Django CMS.
Tutorial ini menggunakan Django 4, yang memerlukan setidaknya Python 3.8. Standar App Engine mendukung Python 3.7 dan yang lebih tinggi, termasuk Python 3.8.
Tujuan
Dalam tutorial ini, Anda akan:
- Membuat dan menghubungkan database Cloud SQL.
- Membuat dan menggunakan nilai secret Secret Manager.
- Deploy aplikasi Django ke standar App Engine.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Cloud SQL Admin API, Secret Manager, and Cloud Build.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Cloud SQL Admin API, Secret Manager, and Cloud Build.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
- Jika Anda belum melakukannya, inisialisasi App Engine dan pilih region pilihan Anda:
gcloud app create
Menyiapkan lingkungan Anda
Meng-clone aplikasi sampel
Kode untuk aplikasi contoh Django ada di repositori GoogleCloudPlatform/python-docs-samples di GitHub.
Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya atau meng-clone repositori ke mesin lokal Anda:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Buka direktori yang berisi kode contoh:
Linux/macOS
cd python-docs-samples/appengine/standard_python3/django
Windows
cd python-docs-samples\appengine\standard_python3\django
Konfirmasi penyiapan Python Anda
Tutorial ini mengandalkan Python untuk menjalankan aplikasi contoh di mesin Anda. Kode contoh juga memerlukan penginstalan dependensi
Untuk detail selengkapnya, lihat panduan lingkungan pengembangan Python.
Pastikan Python Anda setidaknya versi 3.8.
python -V
Anda akan melihat
Python 3.8.0
atau yang 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.txt
Windows
python -m venv venv venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Download Proxy Auth Cloud SQL untuk terhubung ke Cloud SQL dari mesin lokal Anda
Saat di-deploy, aplikasi Anda menggunakan Cloud SQL Auth Proxy yang tertanam di lingkungan standar App 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. Untuk mengetahui detail selengkapnya, baca panduan Proxy Auth Cloud SQL.
Auth Proxy Cloud SQL menggunakan Cloud SQL API untuk berinteraksi dengan instance SQL Anda. Untuk melakukannya, diperlukan autentikasi aplikasi melalui gcloud CLI.
Autentikasi dan dapatkan kredensial untuk API:
gcloud auth application-default login
Download dan instal Proxy Auth Cloud SQL ke komputer lokal Anda.
Linux 64 bit
- Download Proxy Auth Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.linux.amd64
- Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Linux 32 bit
- Download Proxy Auth Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.linux.386
- Jika perintah
curl
tidak ditemukan, jalankansudo apt install curl
dan ulangi perintah download. - Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
chmod +x cloud-sql-proxy
macOS 64-bit
- Download Proxy Auth Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.darwin.amd64
- Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Mac M1
- Download Proxy Auth Cloud SQL:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.darwin.arm64
- Buat Proxy Auth Cloud SQL agar dapat dieksekusi:
chmod +x cloud-sql-proxy
Windows 64 bit
Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.x64.exe, lalu pilih Save Link As untuk mendownload Proxy Auth Cloud SQL. Ganti nama file menjadicloud-sql-proxy.exe
.Windows 32 bit
Klik kanan https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.x86.exe, lalu pilih Save Link As untuk mendownload Proxy Auth Cloud SQL. Ganti nama file menjadicloud-sql-proxy.exe
.Image Docker Proxy Auth Cloud SQL
Auth Proxy Cloud SQL memiliki image container yang berbeda, seperti
distroless
,alpine
, danbuster
. Image container Proxy Auth Cloud SQL default menggunakandistroless
, yang tidak berisi shell. Jika Anda memerlukan shell atau alat terkait, download gambar berdasarkanalpine
ataubuster
. Untuk mengetahui informasi selengkapnya, lihat Image Container Proxy Auth Cloud SQL.Anda dapat menarik image terbaru ke mesin lokal menggunakan Docker dengan menggunakan perintah berikut:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.11.0
OS lainnya
Untuk sistem operasi lain yang tidak disertakan di sini, Anda dapat mengompilasi Proxy Auth Cloud SQL dari sumber.Anda dapat memilih untuk memindahkan hasil download ke tempat yang umum, seperti lokasi di
PATH
, atau direktori utama Anda. Jika Anda memilih untuk melakukannya, ketika Anda memulai Proxy Auth Cloud SQL nanti dalam tutorial, ingatlah untuk mereferensikan lokasi yang Anda pilih saat menggunakan perintahcloud_sql_proxy
.- Download Proxy Auth Cloud SQL:
Membuat layanan pendukung
Tutorial ini menggunakan beberapa layanan Google Cloud untuk menyediakan database, penyimpanan media, dan penyimpanan secret yang mendukung project Django yang di-deploy. Layanan ini di-deploy di region tertentu. Untuk efisiensi antarlayanan, semua layanan harus di-deploy di region yang sama. Untuk mengetahui informasi selengkapnya tentang region terdekat dengan Anda, lihat Produk yang tersedia menurut region.
Tutorial ini menggunakan mekanisme hosting aset statis terintegrasi dalam standar App Engine.Menyiapkan instance Cloud SQL untuk PostgreSQL
Django secara resmi mendukung beberapa database relasional, tetapi menawarkan sebagian besar dukungan untuk PostgreSQL. PostgreSQL didukung oleh Cloud SQL, jadi tutorial ini memilih untuk menggunakan jenis database tersebut.
Bagian berikut menjelaskan pembuatan instance PostgreSQL, database, dan pengguna database untuk aplikasi.
Buat instance PostgreSQL:
Konsol
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
Klik Create Instance.
Klik PostgreSQL.
Di kolom Instance ID, masukkan
INSTANCE_NAME
.Masukkan sandi untuk pengguna postgres.
Pertahankan nilai default untuk kolom lainnya.
Klik Create.
Butuh waktu beberapa menit untuk membuat instance dan sampai siap digunakan.
gcloud
Buat instance PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_13 \ --tier db-f1-micro \ --region REGION
Ganti kode berikut:
INSTANCE_NAME
: nama instance Cloud SQLPROJECT_ID
: project ID Google CloudREGION
: region Google Cloud
Butuh waktu beberapa menit untuk membuat instance dan sampai siap digunakan.
Dalam instance yang dibuat, buat database:
Konsol
- Di halaman instance, buka tab Databases.
- Klik Buat database.
- Pada dialog Database name, masukkan
DATABASE_NAME
. - Klik Create.
gcloud
Buat database dalam instance yang baru dibuat:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAME
Ganti
DATABASE_NAME
dengan nama untuk database di dalam instance.
Buat pengguna database:
Konsol
- Di halaman instance, buka tab Users.
- Klik Add User Account.
- Pada dialog Add a user account to instance 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_PASSWORD
Ganti
PASSWORD
dengan sandi yang aman.
Menyimpan nilai secret di Secret Manager
Setelah layanan pendukung dikonfigurasi, Django memerlukan informasi tentang layanan ini. Tutorial ini menggunakan Secret Manager untuk menyimpan informasi tersebut dengan aman, bukan langsung memasukkan nilai-nilai ini ke dalam kode sumber Django.
Standar App Engine berinteraksi dengan secret menggunakan akun layanannya.Membuat file lingkungan Django sebagai rahasia Secret Manager
Anda menyimpan pengaturan yang diperlukan untuk memulai Django dalam file {i>secure env<i}.
Aplikasi contoh menggunakan Secret Manager API untuk mengambil nilai
rahasia, dan paket django-environ
untuk memuat nilai ke lingkungan Django. Rahasia ini dikonfigurasi agar dapat diakses oleh standar App Engine.
Buat file bernama
.env
, yang menentukan string koneksi database, nama bucket media, dan nilaiSECRET_KEY
baru:echo DATABASE_URL=postgres://DATABASE_USERNAME:DATABASE_PASSWORD@//cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/DATABASE_NAME > .env echo GS_BUCKET_NAME=PROJECT_ID_MEDIA_BUCKET >> .env echo SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1) >> .env
Simpan rahasia di Secret Manager:
Konsol
Di konsol Google Cloud, buka halaman Secret Manager.
Klik Create secret
Di kolom Name, masukkan
django_settings
.Dalam dialog Secret value, tempel konten file
.env
Anda.Klik Create secret.
Hapus file lokal untuk mencegah penggantian setelan lokal.
gcloud
Buat secret baru,
django_settings
, dengan nilai file.env
:gcloud secrets create django_settings --data-file .env
Untuk mengonfirmasi pembuatan rahasia, periksa:
gcloud secrets describe django_settings gcloud secrets versions access latest --secret django_settings
Hapus file lokal untuk mencegah penggantian setelan lokal:
rm .env
Konfigurasi akses ke secret:
Konsol
- Klik tab Izin.
- Klik Tambahkan.
- Di kolom New Members, masukkan
PROJECT_ID@appspot.gserviceaccount.com
, lalu tekanEnter
. - Di menu drop-down Peran, pilih Aksesor Rahasia Secret Manager.
- Klik Save.
gcloud
Berikan akses ke secret ke akun layanan standar App Engine:
gcloud secrets add-iam-policy-binding django_settings \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Menjalankan aplikasi di komputer lokal
Dengan layanan pendukung yang dikonfigurasi, Anda kini dapat menjalankan aplikasi di komputer. Penyiapan ini memungkinkan pengembangan lokal, pembuatan superuser, dan penerapan migrasi database.
Di terminal terpisah, mulai Auth Proxy Cloud SQL:
Linux/macOS
./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
Windows
cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
Langkah ini akan membuat koneksi dari komputer lokal Anda ke instance Cloud SQL untuk tujuan pengujian lokal. Tetap jalankan Proxy Auth Cloud SQL selama Anda menguji aplikasi secara lokal. Menjalankan proses ini di terminal terpisah memungkinkan Anda untuk tetap bekerja saat proses ini berjalan.
Di terminal asli, tetapkan Project ID secara lokal (digunakan oleh Secret Manager API):
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Windows
set GOOGLE_CLOUD_PROJECT=PROJECT_ID
Tetapkan variabel lingkungan untuk menunjukkan bahwa Anda menggunakan Proxy Auth Cloud SQL (nilai ini dikenali dalam kode):
Linux/macOS
export USE_CLOUD_SQL_AUTH_PROXY=true
Windows
set USE_CLOUD_SQL_AUTH_PROXY=true
Jalankan migrasi Django untuk menyiapkan model dan aset Anda:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstatic
Mulai server web Django:
python manage.py runserver 8080
Di browser, buka http://localhost:8080.
Jika Anda sedang membuka Cloud Shell, klik tombol Web Preview, lalu pilih Preview on port 8080.
Halaman tersebut akan menampilkan teks berikut: "Hello, world. Anda berada di indeks polling." Server web Django yang berjalan di komputer Anda mengirimkan halaman aplikasi contoh.
Tekan
Ctrl
/Cmd
+C
untuk menghentikan server web lokal.
Menggunakan konsol admin Django
Untuk masuk ke konsol admin Django, Anda perlu membuat superuser. Karena Anda memiliki koneksi yang dapat diakses secara lokal ke database, Anda dapat menjalankan perintah pengelolaan:
Membuat superuser. Anda akan diminta untuk memasukkan nama pengguna, email, dan sandi.
python manage.py createsuperuser
Mulai server web lokal:
python manage.py runserver
Di browser, buka http://localhost:8000/admin.
Login ke situs admin menggunakan nama pengguna dan sandi yang Anda gunakan saat menjalankan
createsuperuser
.
Men-deploy aplikasi ke lingkungan standar App Engine
Setelah semua layanan pencadangan disiapkan dan aplikasi diuji secara lokal, Anda kini dapat men-deploy aplikasi ke standar App Engine:
- Upload aplikasi dengan menjalankan perintah berikut, yang men-deploy aplikasi seperti yang dijelaskan di
app.yaml
dan menetapkan versi yang baru di-deploy sebagai versi default, sehingga menyebabkan aplikasi menyalurkan semua traffic baru:gcloud app deploy
- Konfirmasi setelan dengan mengetik "yes" saat diminta.
- Tunggu pesan yang memberi tahu Anda bahwa pembaruan telah selesai.
- Buka
app.yaml
dan perbarui nilaiAPPENGINE_URL
dengan URL yang Anda deploy:... env_variables: APPENGINE_URL: https://PROJECT_ID.uc.r.appspot.com
- Upload perubahan konfigurasi Anda:
gcloud app deploy
Menjalankan aplikasi yang di-deploy
Aplikasi telah di-deploy, dan sekarang dapat diakses:
Buka situs yang di-deploy:
gcloud app browse
Atau, tampilkan URL dan buka secara manual:
gcloud app describe --format "value(defaultHostname)"
Permintaan Anda dilayani oleh server web yang berjalan di lingkungan standar App Engine.
Mengupdate aplikasi
Untuk mengupdate aplikasi Anda, buat perubahan pada kode, lalu jalankan kembali perintah gcloud app deploy
.
Deployment akan membuat versi baru aplikasi Anda dan mempromosikannya ke versi default. Versi lama aplikasi Anda tetap ada. Semua versi aplikasi tersebut merupakan resource yang dapat ditagih. Untuk mengurangi biaya, hapus versi non-default aplikasi Anda.
Mengonfigurasi untuk produksi
Anda sekarang memiliki deployment Django yang berfungsi, tetapi ada langkah lebih lanjut yang dapat Anda ambil untuk memastikan aplikasi Anda siap produksi.
Menonaktifkan proses debug
Pastikan variabel DEBUG
di mysite/settings.py
disetel ke False
. Tindakan ini akan mencegah halaman error mendetail ditampilkan kepada pengguna, yang dapat membocorkan informasi tentang konfigurasi.
Membatasi hak istimewa pengguna database
Setiap pengguna yang dibuat menggunakan Cloud SQL memiliki hak istimewa yang terkait dengan peran cloudsqlsuperuser
: CREATEROLE
, CREATEDB
, dan LOGIN
.
Untuk mencegah pengguna database Django memiliki izin ini, buat pengguna secara manual di PostgreSQL. Anda harus sudah menginstal terminal interaktif psql
, atau menggunakan Cloud Shell yang telah menginstal alat ini.
Konsol
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di Cloud Shell, gunakan terminal bawaan untuk terhubung ke instance
INSTANCE_NAME
Anda:gcloud sql connect INSTANCE_NAME --user postgres
Masukkan sandi pengguna postgres.
Anda sekarang menggunakan
psql
. Anda akan melihat perintahpostgres=>
.Buat pengguna:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Ganti
PASSWORD
dengan sandi acak yang unik.Berikan hak penuh atas database baru kepada pengguna baru:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Keluar dari
psql
:\q
gcloud
Mulai koneksi ke instance SQL:
gcloud sql connect INSTANCE_NAME --user postgres
Ganti
INSTANCE_NAME
dengan instance Cloud SQL yang dibuat.Masukkan sandi pengguna postgres.
Anda sekarang menggunakan
psql
. Anda akan melihat perintahpostgres=>
.Buat pengguna:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Berikan hak penuh atas database baru kepada pengguna baru:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Keluar dari
psql
:\q
Memahami kode
Contoh aplikasi
Aplikasi contoh Django dibuat menggunakan alat Django standar. Perintah berikut membuat project dan aplikasi polling:
django-admin startproject mysite
python manage.py startapp polls
Tampilan dasar, model, dan konfigurasi rute disalin dari Menulis aplikasi Django pertama Anda (Bagian 1 dan Bagian 2).
Secret dari Secret Manager
File settings.py
berisi kode yang menggunakan Secret Manager Python API untuk mengambil versi terbaru dari secret yang diberi nama, dan menariknya ke lingkungan (menggunakan django-environ
):
Rahasia digunakan untuk menyimpan beberapa nilai secret guna mengurangi jumlah secret yang berbeda yang perlu dikonfigurasi.
Konfigurasi CSRF
Django memiliki perlindungan bawaan terhadap Pemalsuan Permintaan Lintas Situs (CSRF). Mulai dari Django 4.0, perubahan pada cara kerja ini berarti penting untuk memberi tahu Django apa URL yang dihostingnya, sehingga dapat menawarkan perlindungan terbaik bagi pengguna yang mengirimkan data.
Anda memberikan URL aplikasi sebagai variabel lingkungan dalam file settings.py
.
Ini adalah nilai yang digunakan Django untuk setelan yang relevan.
Penggantian rahasia lokal
Jika file .env
ditemukan di sistem file lokal, file tersebut akan digunakan sebagai pengganti nilai dari Secret Manager. Membuat file .env
secara lokal dapat membantu pengujian lokal (mis. pengembangan lokal terhadap database SQLite, atau setelan lokal lainnya).
Koneksi database
File settings.py
berisi konfigurasi untuk database SQL Anda. Fungsi ini menggunakan helper env.db()
dari django-environ
untuk memuat string koneksi yang disetel di DATABASE_URL
ke setelan DATABASES
.
Saat menjalankan aplikasi secara lokal dan menggunakan Auth Proxy Cloud SQL untuk mengakses database yang dihosting, flag USE_CLOUD_SQL_AUTH_PROXY
menyesuaikan setelan database untuk menggunakan proxy tersebut.
Konten statis yang dihosting
File app.yaml
berisi informasi konfigurasi untuk deployment ke App Engine.
File app.yaml
ini menentukan bahwa App Engine menayangkan file statis
dari direktori static/
:
Saat menjalankan aplikasi secara lokal dengan DEBUG
diaktifkan, file berikut akan ditayangkan secara lokal oleh Django:
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 Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Pelajari cara mengonfigurasi PostgreSQL untuk produksi
- Pelajari Django di Google Cloud lebih lanjut