Aplikasi Django yang berjalan di App Engine standard akan diskalakan secara dinamis sesuai dengan traffic.
Tutorial ini mengasumsikan bahwa Anda sudah memahami pengembangan web Django. Jika Anda baru mengenal pengembangan Django, sebaiknya pelajari 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 4, yang memerlukan minimal Python 3.8. App Engine standar 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.
- Men-deploy aplikasi Django ke App Engine standar.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Jika Anda belum melakukannya, lakukan inisialisasi App Engine dan pilih region yang Anda inginkan:
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 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/appengine/standard_python3/djangoWindows
cd python-docs-samples\appengine\standard_python3\django
Mengonfirmasi 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.8.
python -VAnda akan melihat
Python 3.8.0atau 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.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 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 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 Simpan Link Sebagai 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 tempat yang umum, seperti lokasi di
PATH, atau direktori utama Anda. Jika Anda memilih untuk melakukannya, saat Anda memulai Cloud SQL Auth Proxy nanti dalam tutorial, ingatlah untuk merujuk lokasi yang Anda pilih saat menggunakan perintahcloud-sql-proxy.- Download Cloud SQL Auth Proxy:
Membuat layanan pendukung
Tutorial ini menggunakan beberapa layanan Google Cloud untuk menyediakan database, penyimpanan media, dan penyimpanan rahasia yang mendukung project Django yang di-deploy. Layanan ini di-deploy di region tertentu. Untuk efisiensi antar-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.
Tutorial ini menggunakan mekanisme hosting aset statis terintegrasi di App Engine Standard.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 PostgreSQL, database, dan pengguna database untuk aplikasi.
Buat instance PostgreSQL:
Konsol
Di konsol Google Cloud , buka halaman Instance Cloud SQL.
Klik Create Instance.
Klik Pilih PostgreSQL.
Untuk SQL Edition, pilih "Enterprise".
Untuk Edition Preset, pilih "Sandbox".
Di kolom Instance ID, masukkan
INSTANCE_NAME.Masukkan sandi untuk pengguna postgres.
Pertahankan nilai default untuk kolom lainnya.
Klik Create Instance.
Instance akan siap digunakan dalam beberapa menit.
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: Google Cloud project IDREGION: Google Cloud region
Diperlukan waktu beberapa menit untuk membuat instance dan agar instance siap digunakan.
Dalam instance yang dibuat, buat database:
Konsol
- Dalam halaman instance, buka tab Databases.
- Klik Create database.
- Dalam dialog Database Name, masukkan
DATABASE_NAME. - Klik Create.
gcloud
Buat database dalam instance yang baru saja 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.
- Dalam dialog Choose how to authenticate di bagian "Built-in Authentication":
- 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.
Menyimpan nilai secret di Secret Manager
Setelah layanan pendukung dikonfigurasi, Django memerlukan informasi tentang layanan ini. Daripada memasukkan nilai ini langsung ke kode sumber Django, tutorial ini menggunakan Secret Manager untuk menyimpan informasi ini secara aman.
Membuat file lingkungan Django sebagai secret Secret Manager
Anda menyimpan setelan yang diperlukan untuk memulai Django dalam file env yang aman.
Aplikasi contoh menggunakan Secret Manager API untuk mengambil nilai secret, dan paket django-environ untuk memuat nilai ke dalam lingkungan Django. Secret dikonfigurasi agar dapat diakses oleh App Engine standar.
Buat file bernama
.env, yang menentukan string koneksi database, nama bucket media, dan nilaiSECRET_KEYbaru: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) >> .envSimpan secret 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, tempelkan konten file
.envAnda.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 .envHapus file lokal untuk mencegah penggantian setelan lokal:
rm .env
Konfigurasikan akses ke secret:
Konsol
- Klik tab Permissions.
- Klik Grant access.
- Di kolom Anggota Baru, masukkan
PROJECT_ID@appspot.gserviceaccount.com, lalu tekanEnter. - Di menu drop-down Role, pilih Secret Manager Secret Accessor.
- Klik Simpan.
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.secretAccessorDalam output, pastikan
bindingsmencantumkan akun layanan baru.
Menjalankan aplikasi di komputer lokal Anda
Setelah layanan pendukung dikonfigurasi, Anda kini dapat menjalankan aplikasi di komputer. Penyiapan ini memungkinkan pengembangan lokal, pembuatan pengguna super, 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 akan membuat koneksi dari komputer lokal ke instance Cloud SQL Anda 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 (digunakan oleh Secret Manager API):
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_IDWindows
set GOOGLE_CLOUD_PROJECT=PROJECT_IDTetapkan variabel lingkungan untuk menunjukkan bahwa Anda menggunakan Cloud SQL Auth Proxy (nilai ini dikenali dalam kode):
Linux/macOS
export USE_CLOUD_SQL_AUTH_PROXY=trueWindows
set USE_CLOUD_SQL_AUTH_PROXY=trueJalankan 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, buka http://localhost:8080.
Jika Anda berada di Cloud Shell, klik tombol Web Preview, lalu pilih Preview on port 8080.
Halaman akan menampilkan teks berikut: "Hello, world. Anda berada di indeks polling." 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.
Men-deploy aplikasi ke lingkungan standar App Engine
Setelah semua layanan pendukung disiapkan dan aplikasi diuji secara lokal, Anda kini dapat men-deploy aplikasi ke App Engine standar:
- Upload aplikasi dengan menjalankan perintah berikut, yang men-deploy aplikasi seperti yang dijelaskan dalam
app.yamldan menetapkan versi yang baru di-deploy sebagai versi default, sehingga versi tersebut akan menyalurkan semua traffic baru:gcloud app deploy - Konfirmasi setelan dengan mengetik "yes" saat diminta.
- Tunggu hingga muncul pesan yang memberi tahu Anda bahwa update telah selesai.
- Buka
app.yamldan perbarui nilaiAPPENGINE_URLdengan URL yang di-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 kini dapat diakses:
Buka situs yang di-deploy:
gcloud app browseAtau, tampilkan URL dan buka secara manual:
gcloud app describe --format "value(defaultHostname)"
Permintaan Anda ditayangkan oleh server web yang berjalan di lingkungan standar App Engine.
Mengupdate aplikasi
Untuk mengupdate aplikasi, buat perubahan pada kode, lalu jalankan kembali perintah gcloud app deploy.
Deployment akan membuat versi baru aplikasi Anda dan mempromosikannya ke versi default. Versi aplikasi Anda sebelumnya akan tetap ada. Semua versi aplikasi ini adalah resource yang dapat ditagih. Untuk mengurangi biaya, hapus versi aplikasi non-default.
Mengonfigurasi untuk produksi
Sekarang Anda memiliki deployment Django yang berfungsi, tetapi ada langkah-langkah lebih lanjut yang dapat Anda lakukan 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 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_NAMEAnda:gcloud sql connect INSTANCE_NAME --user postgresMasukkan sandi pengguna postgres.
Anda kini menggunakan
psql. Anda akan melihat perintahpostgres=>.Buat pengguna:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';Ganti
PASSWORDdengan sandi unik acak.Berikan hak penuh pada 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 postgresGanti
INSTANCE_NAMEdengan instance Cloud SQL yang dibuat.Masukkan sandi pengguna postgres.
Anda kini menggunakan
psql. Anda akan melihat perintahpostgres=>.Buat pengguna:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';Berikan hak penuh pada 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
Konfigurasi tampilan, model, dan rute dasar disalin dari Menulis aplikasi Django pertama Anda (Bagian 1 dan Bagian 2).
Secret dari Secret Manager
File settings.py berisi kode yang menggunakan Python API Secret Manager untuk mengambil versi terbaru secret yang diberi nama, dan menariknya ke lingkungan (menggunakan django-environ):
Secret digunakan untuk menyimpan beberapa nilai secret guna mengurangi jumlah secret berbeda yang perlu dikonfigurasi.
Konfigurasi CSRF
Django memiliki perlindungan bawaan terhadap Pemalsuan Permintaan Lintas Situs (CSRF). Mulai Django 4.0, perubahan pada cara kerja ini berarti penting untuk memberi tahu Django URL yang dihosting, 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, bukan nilai dari Secret Manager. Membuat file .env secara lokal dapat membantu pengujian lokal (misalnya, pengembangan lokal terhadap database SQLite, atau setelan lokal lainnya).
Koneksi database
File settings.py berisi konfigurasi untuk database SQL Anda. Kode ini menggunakan helper env.db() dari django-environ untuk memuat string koneksi yang ditetapkan di DATABASE_URL ke dalam setelan DATABASES.
Saat menjalankan aplikasi secara lokal dan menggunakan Cloud SQL Auth Proxy untuk mengakses database yang dihosting, tanda USE_CLOUD_SQL_AUTH_PROXY akan menyesuaikan setelan database untuk menggunakan proxy.
Konten statis yang dihosting
File app.yaml
berisi informasi konfigurasi untuk deployment ke App Engine.
File app.yaml ini menentukan bahwa App Engine menyajikan file statis
dari direktori static/:
Saat menjalankan aplikasi secara lokal dengan mengaktifkan DEBUG, file ini disajikan 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 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.
Langkah berikutnya
- Pelajari cara mengonfigurasi PostgreSQL untuk produksi
- Pelajari lebih lanjut Django di Google Cloud