Sebarkan aplikasi web Python (Django) dengan PostgreSQL di Azure App Service
Dalam tutorial ini, Anda akan menyebarkan aplikasi web Python berbasis data (Django atau Flask) ke Azure App Service dengan layanan database relasional Azure Database for PostgreSQL. Azure App Service mendukung Python di lingkungan server Linux.
Untuk menyelesaikan tutorial ini, Anda memerlukan:
- Akun Azure dengan langganan aktif. Jika Anda tidak memiliki akun Azure, Anda dapat membuat akun secara gratis.
- Pengetahuan Python dengan pengembangan Flask atau Python dengan pengembangan Django
- Akun Azure dengan langganan aktif. Jika Anda tidak memiliki akun Azure, Anda dapat membuat akun secara gratis.
- Azure Developer CLI terinstal. Anda dapat mengikuti langkah-langkah dengan Azure Cloud Shell karena sudah menginstal Azure Developer CLI.
- Pengetahuan Python dengan pengembangan Flask atau Python dengan pengembangan Django
Lewati ke akhir
Dengan Azure Developer CLI terinstal, Anda dapat menyebarkan aplikasi sampel yang dikonfigurasi sepenuhnya yang ditampilkan dalam tutorial ini dan melihatnya berjalan di Azure. Cukup jalankan perintah berikut di direktori kerja kosong:
azd auth login
azd init --template msdocs-flask-postgresql-sample-app
azd up
Aplikasi sampel
Aplikasi Python sampel menggunakan kerangka termos dan Django disediakan untuk membantu Anda mengikuti tutorial ini. Untuk menyebarkannya tanpa menjalankannya secara lokal, lewati bagian ini.
Untuk menjalankan aplikasi secara lokal, pastikan Anda memiliki Python 3.7 atau lebih tinggi dan PostgreSQL yang diinstal secara lokal. Kemudian, kloning cabang repositori starter-no-infra
sampel dan ubah ke akar repositori.
git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
Buat file .env seperti yang ditunjukkan di bawah ini menggunakan file .env.sample sebagai panduan. Atur nilai DBNAME
ke nama database yang ada di instans PostgreSQL lokal Anda. Atur nilai DBHOST
, , DBUSER
, dan DBPASS
sesuai untuk instans PostgreSQL lokal Anda.
DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>
Buat lingkungan virtual untuk aplikasi:
py -m venv .venv
.venv\scripts\activate
Pasang dependensi:
pip install -r requirements.txt
Jalankan aplikasi sampel dengan perintah berikut:
# Run database migration
flask db upgrade
# Run the app at http://127.0.0.1:5000
flask run
1. Buat App Service dan PostgreSQL
Dalam langkah ini, Anda membuat sumber daya Azure. Langkah-langkah yang digunakan dalam tutorial ini membuat sekumpulan sumber daya aman secara default yang menyertakan App Service dan Azure Database for PostgreSQL. Untuk proses pembuatan, Anda akan menentukan:
- Nama untuk aplikasi web. Ini adalah nama yang digunakan sebagai bagian dari nama DNS untuk aplikasi web Anda dalam bentuk
https://<app-name>.azurewebsites.net
. - Wilayah tempat menjalankan aplikasi secara fisik di dunia.
- Tumpukan runtime untuk aplikasi. Di sinilah Anda memilih versi Python yang akan digunakan untuk aplikasi Anda.
- Paket hosting untuk aplikasi. Ini adalah tingkat harga yang mencakup serangkaian fitur dan kapasitas penskalaan untuk aplikasi Anda.
- Resource Group untuk aplikasi. Grup sumber daya memungkinkan Anda mengelompokkan (dalam kontainer logika) semua sumber daya Azure yang diperlukan untuk aplikasi.
Masuk ke portal Microsoft Azure dan ikuti langkah-langkah ini untuk membuat sumber daya Azure App Service Anda.
Langkah 1: Di portal Azure:
- Masukkan "database apl web" di bilah pencarian di bagian atas portal Azure.
- Pilih item berlabel Apl Web + Database di bawah judul Marketplace. Anda juga dapat menavigasi ke wizard pembuatan secara langsung.
Langkah 2: Di halaman Buat Aplikasi Web + Database , isi formulir sebagai berikut.
- Grup Sumber Daya → Pilih Buat baru dan gunakan nama msdocs-python-postgres-tutorial.
- Wilayah → Wilayah Azure di dekat Anda.
- Nama → msdocs-python-postgres-XYZ di mana XYZ adalah tiga karakter acak. Nama ini harus unik di seluruh Azure.
- Tumpukan runtime → Python 3.10.
- Database → PostgreSQL - Server Fleksibel dipilih secara default sebagai mesin database. Nama server dan nama database juga diatur secara default ke nilai yang sesuai.
- Paket hosting → Dasar. Setelah siap, Anda dapat melakukan peningkatan ke tingkat harga produksi nanti.
- Pilih Tinjau + buat.
- Setelah validasi selesai, pilih Buat.
Langkah 3: Penyebaran membutuhkan waktu beberapa menit untuk diselesaikan. Setelah penyebaran selesai, pilih tombol Buka sumber daya. Anda diarahkan ke aplikasi App Service, tetapi sumber daya berikut dibuat:
- Grup sumber daya → Kontainer untuk semua sumber daya yang dibuat.
- App Service → Menentukan sumber daya komputasi untuk App Service. Paket Linux di tingkat Dasar dibuat.
- App Service → Mewakili aplikasi Anda dan berjalan dalam paket App Service.
- Jaringan virtual → Terintegrasi dengan aplikasi App Service dan mengisolasi lalu lintas jaringan back-end.
- Server fleksibel Azure Database for PostgreSQL → Hanya dapat diakses dari dalam jaringan virtual. Database dan pengguna dibuat untuk Anda di server.
- Zona DNS privat → Memungkinkan resolusi DNS server PostgreSQL di jaringan virtual.
2. Verifikasi pengaturan koneksi
Wizard pembuatan menghasilkan variabel konektivitas untuk Anda sudah sebagai pengaturan aplikasi. Pengaturan aplikasi adalah salah satu cara untuk menjaga rahasia koneksi keluar dari repositori kode Anda. Saat Anda siap untuk memindahkan rahasia Anda ke lokasi yang lebih aman, berikut adalah artikel tentang menyimpan di Azure Key Vault.
Langkah 1: Di halaman App Service, di menu sebelah kiri, pilih Konfigurasi.
Langkah 2: Di tab Pengaturan aplikasi di halaman Konfigurasi , verifikasi bahwa AZURE_POSTGRESQL_CONNECTIONSTRING
ada. Itu akan disuntikkan ke lingkungan runtime sebagai variabel lingkungan.
Langkah 3: Di terminal atau prompt perintah, jalankan skrip Python berikut untuk menghasilkan rahasia unik: python -c 'import secrets; print(secrets.token_hex())'
. Salin nilai output yang akan digunakan di langkah berikutnya.
3. Menyebarkan kode sampel
Dalam langkah ini, Anda akan mengonfigurasi penyebaran GitHub menggunakan GitHub Actions. Ini hanya salah satu dari banyak cara untuk menyebarkan ke App Service, tetapi juga cara yang bagus untuk memiliki integrasi berkelanjutan dalam proses penyebaran Anda. Secara default, setiap git push
repositori GitHub Anda akan memulai tindakan build dan deploy.
Langkah 1: Di jendela browser baru:
- Masuk ke akun GitHub Anda.
- Buka https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app.
- Pilih Fork.
- Pilih Buat fork.
Langkah 2: Di halaman GitHub, buka Visual Studio Code di browser dengan menekan tombol .
.
Langkah 3: Di Visual Studio Code di browser, buka azureproject/production.py di penjelajah. Lihat variabel lingkungan yang digunakan di lingkungan produksi, termasuk pengaturan aplikasi yang Anda lihat di halaman konfigurasi.
Langkah 4: Kembali ke halaman App Service, di menu sebelah kiri, pilih Pusat Penyebaran.
Langkah 5: Di halaman Pusat Penyebaran:
- Di Sumber, pilih GitHub. Secara default, GitHub Actions dipilih sebagai penyedia build.
- Masuk ke akun GitHub Anda dan ikuti perintah untuk mengotorisasi Azure.
- Di Organisasi, pilih akun Anda.
- Di Repositori, pilih msdocs-flask-postgresql-sample-app.
- Di Cabang, pilih utama.
- Pertahankan opsi default dipilih untuk Menambahkan alur kerja.
- Di bawah Jenis autentikasi, pilih Identitas yang ditetapkan pengguna.
- Di menu atas, pilih Simpan. App Service menerapkan file alur kerja ke dalam repositori GitHub yang dipilih, di direktori
.github/workflows
.
Langkah 6: Di halaman Pusat Penyebaran:
- Pilih Log. Eksekusi penyebaran sudah dimulai.
- Di item log untuk eksekusi penyebaran, pilih Build/Sebarkan Log.
Langkah 7: Anda dibawa ke repositori GitHub Anda dan melihat bahwa tindakan GitHub sedang berjalan. File alur kerja menentukan dua tahap terpisah, mem-build dan menyebarkan. Tunggu hingga eksekusi GitHub menampilkan status Selesai. Dibutuhkan sekitar 5 menit.
Mengalami masalah? Periksa panduan Pemecahan Masalah.
4. Hasilkan skema database
Dengan database PostgreSQL yang dilindungi oleh jaringan virtual, cara termampu untuk menjalankan migrasi database Flask adalah dalam sesi SSH dengan kontainer App Service.
Langkah 1: Kembali ke halaman App Service, di menu sebelah kiri,
- Pilih SSH.
- Pilih Buka.
Langkah 2: Di terminal SSH, jalankan flask db upgrade
. Jika berhasil, App Service berhasil tersambung ke database.
Hanya perubahan pada file di /home
yang dapat bertahan di luar mulai ulang aplikasi. Perubahan di luar /home
tidak dipertahankan.
5. Telusuri aplikasi
Langkah 1: Di halaman App Service:
- Dari menu kiri, pilih Ringkasan.
- Pilih URL aplikasi Anda. Anda juga dapat menavigasi langsung ke
https://<app-name>.azurewebsites.net
.
Langkah 2: Tambahkan beberapa restoran ke daftar. Selamat, Anda menjalankan aplikasi web di Azure App Service, dengan konektivitas yang aman ke Azure Database for PostgreSQL.
6. Mengalirkan log diagnostik
Azure App Service mengambil semua output pesan ke konsol untuk membantu Anda mendiagnosis masalah dengan aplikasi Anda. Aplikasi sampel menyertakan print()
pernyataan untuk mendemonstrasikan kemampuan ini seperti yang ditunjukkan di bawah ini.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Langkah 1: Di halaman App Service:
- Dari menu kiri, pilih Log App Service.
- Di Pengelogan aplikasi, pilih Sistem File.
- Di menu atas, pilih Simpan.
Langkah 2: Dari menu sebelah kiri, pilih Aliran log. Anda melihat log untuk aplikasi Anda, termasuk log platform dan log dari dalam kontainer.
Pelajari selengkapnya tentang pengelogan di aplikasi Python dalam seri tentang menyiapkan Azure Monitor untuk aplikasi Python Anda.
7. Membersihkan sumber daya
Setelah selesai, Anda dapat menghapus semua sumber daya dari langganan Azure dengan menghapus grup sumber daya.
Langkah 1: Di bilah pencarian di bagian atas portal Azure:
- Masukkan nama grup sumber daya.
- Pilih grup sumber daya.
Langkah 2: Di halaman grup sumber daya, pilih Hapus grup sumber daya.
Langkah 3:
- Masukkan nama grup sumber daya untuk mengonfirmasi penghapusan Anda.
- Pilih Hapus.
1. Buat sumber daya Azure dan sebarkan aplikasi sampel
Dalam langkah ini, Anda membuat sumber daya Azure dan menyebarkan aplikasi sampel ke App Service di Linux. Langkah-langkah yang digunakan dalam tutorial ini membuat sekumpulan sumber daya aman secara default yang menyertakan App Service dan Azure Database for PostgreSQL.
Jika Anda belum melakukannya, kloning cabang repositori
starter-no-infra
sampel di terminal lokal.git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app cd msdocs-flask-postgresql-sample-app
Cabang kloning ini adalah titik awal Anda. Ini berisi aplikasi Flask drive data sederhana.
Dari akar repositori, jalankan
azd init
.azd init --template python-app-service-postgresql-infra
Saat diminta, berikan jawaban berikut:
Pertanyaan Jawaban Direktori saat ini tidak kosong. Apakah Anda ingin menginisialisasi proyek di sini di '<your-directory>'? Y Apa yang ingin Anda lakukan dengan file-file ini? Jaga agar file saya yang ada tidak berubah Masukkan nama lingkungan baru Ketik nama unik. Templat azd menggunakan nama ini sebagai bagian dari nama DNS aplikasi web Anda di Azure ( <app-name>.azurewebsites.net
). Karakter alfanumerik dan tanda hubung diperbolehkan.Jalankan
azd up
perintah untuk menyediakan sumber daya Azure yang diperlukan dan menyebarkan kode aplikasi. Jika Anda belum masuk ke Azure, browser akan meluncurkan dan meminta Anda untuk masuk. Perintah jugaazd up
akan meminta Anda untuk memilih langganan dan lokasi yang diinginkan untuk disebarkan.azd up
Perintah
azd up
mungkin perlu waktu beberapa menit untuk diselesaikan. Ini juga mengkompilasi dan menyebarkan kode aplikasi Anda, tetapi Anda akan memodifikasi kode nanti untuk bekerja dengan App Service. Saat sedang berjalan, perintah menyediakan pesan tentang proses provisi dan penyebaran, termasuk tautan ke penyebaran di Azure. Setelah selesai, perintah juga menampilkan tautan ke aplikasi penyebaran.Templat azd ini berisi file (azure.yaml dan direktori infra ) yang menghasilkan arsitektur aman secara default dengan sumber daya Azure berikut:
- Grup sumber daya → Kontainer untuk semua sumber daya yang dibuat.
- App Service → Menentukan sumber daya komputasi untuk App Service. Paket Linux di tingkat B1 ditentukan.
- App Service → Mewakili aplikasi Anda dan berjalan dalam paket App Service.
- Jaringan virtual → Terintegrasi dengan aplikasi App Service dan mengisolasi lalu lintas jaringan back-end.
- Server fleksibel Azure Database for PostgreSQL → Hanya dapat diakses dari dalam jaringan virtual. Database dan pengguna dibuat untuk Anda di server.
- Zona DNS privat → Memungkinkan resolusi DNS server PostgreSQL di jaringan virtual.
- Ruang kerja Analitik Log → Bertindak sebagai kontainer target bagi aplikasi Anda untuk mengirimkan lognya, di mana Anda juga dapat mengkueri log.
2. Gunakan database string koneksi
Templat azd yang Anda gunakan menghasilkan variabel konektivitas untuk Anda sudah sebagai pengaturan aplikasi dan mengeluarkannya ke terminal untuk kenyamanan Anda. Pengaturan aplikasi adalah salah satu cara untuk menjaga rahasia koneksi keluar dari repositori kode Anda.
Dalam output azd, temukan pengaturan aplikasi dan temukan pengaturan
AZURE_POSTGRESQL_CONNECTIONSTRING
danAZURE_REDIS_CONNECTIONSTRING
. Untuk menjaga rahasia tetap aman, hanya nama pengaturan yang ditampilkan. Mereka terlihat seperti ini dalam output azd:App Service app has the following settings: - AZURE_POSTGRESQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - FLASK_DEBUG - SCM_DO_BUILD_DURING_DEPLOYMENT - SECRET_KEY
AZURE_POSTGRESQL_CONNECTIONSTRING
berisi string koneksi ke database Postgres di Azure, danAZURE_REDIS_CONNECTIONSTRING
berisi string koneksi ke cache Redis di Azure. Anda perlu menggunakannya kode Anda untuk menyambungkannya. Buka azureproject/production.py, batalkan komentar baris berikut, dan simpan file:conn_str = os.environ['AZURE_POSTGRESQL_CONNECTIONSTRING'] conn_str_params = {pair.split('=')[0]: pair.split('=')[1] for pair in conn_str.split(' ')} DATABASE_URI = 'postgresql+psycopg2://{dbuser}:{dbpass}@{dbhost}/{dbname}'.format( dbuser=conn_str_params['user'], dbpass=conn_str_params['password'], dbhost=conn_str_params['host'], dbname=conn_str_params['dbname'] )
Kode aplikasi Anda sekarang dikonfigurasi untuk menyambungkan ke database PostgreSQL di Azure. Jika Anda mau, buka
app.py
dan lihat bagaimanaDATABASE_URI
variabel lingkungan digunakan.Di terminal, jalankan
azd deploy
.azd deploy
4. Hasilkan skema database
Dengan database PostgreSQL yang dilindungi oleh jaringan virtual, cara termampu untuk menjalankan migrasi database Flask adalah dalam sesi SSH dengan kontainer App Service.
Dalam output azd, temukan URL untuk sesi SSH dan navigasikan ke dalamnya di browser. Ini terlihat seperti ini dalam output:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Di terminal SSH, jalankan
flask db upgrade
. Jika berhasil, App Service berhasil tersambung ke database.Catatan
Hanya perubahan pada file di
/home
yang dapat bertahan di luar mulai ulang aplikasi. Perubahan di luar/home
tidak dipertahankan.
5. Telusuri aplikasi
Dalam output azd, temukan URL aplikasi Anda dan navigasikan ke url tersebut di browser. URL terlihat seperti ini dalam output AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Tambahkan beberapa restoran ke daftar.
Selamat, Anda menjalankan aplikasi web di Azure App Service, dengan konektivitas yang aman ke Azure Database for PostgreSQL.
6. Mengalirkan log diagnostik
Azure App Service dapat mengambil log konsol untuk membantu Anda mendiagnosis masalah dengan aplikasi Anda. Untuk kenyamanan, templat azd telah mengaktifkan pengelogan ke sistem file lokal serta mengirimkannya ke ruang kerja Analitik Log.
Aplikasi sampel menyertakan print()
pernyataan untuk menunjukkan kemampuan ini seperti yang ditunjukkan dalam cuplikan berikut.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Dalam output azd, temukan tautan untuk mengalirkan log App Service dan navigasikan ke log tersebut di browser. Tautan terlihat seperti ini dalam output azd:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Pelajari selengkapnya tentang pengelogan di aplikasi Python dalam seri tentang menyiapkan Azure Monitor untuk aplikasi Python Anda.
7. Membersihkan sumber daya
Untuk menghapus semua sumber daya Azure di lingkungan penyebaran saat ini, jalankan azd down
.
azd down
Pemecahan Masalah
Tercantum di bawah ini adalah masalah yang mungkin Anda temui saat mencoba bekerja melalui tutorial ini dan langkah-langkah untuk mengatasinya.
Saya tidak dapat tersambung ke sesi SSH
Jika Anda tidak dapat terhubung ke sesi SSH, aplikasi itu sendiri telah gagal dimulai. Periksa log diagnostik untuk detailnya. Misalnya, jika Anda melihat kesalahan seperti KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'
, itu mungkin berarti bahwa variabel lingkungan hilang (Anda mungkin telah menghapus pengaturan aplikasi).
Saya mendapatkan kesalahan saat menjalankan migrasi database
Jika Anda mengalami kesalahan yang terkait dengan menyambungkan ke database, periksa apakah pengaturan aplikasi (AZURE_POSTGRESQL_CONNECTIONSTRING
) telah diubah. Tanpa string koneksi itu, perintah migrasi tidak dapat berkomunikasi dengan database.
Tanya jawab umum
- Berapa biaya untuk penyiapan ini?
- Bagaimana cara menyambungkan ke server PostgreSQL yang diamankan di belakang jaringan virtual dengan alat lain?
- Bagaimana cara kerja pengembangan aplikasi lokal dengan GitHub Actions?
- Bagaimana sampel Django dikonfigurasi untuk berjalan di Azure App Service?
Berapa biaya untuk penyiapan ini?
Harga untuk sumber daya yang dibuat adalah sebagai berikut:
- Paket App Service dibuat di tingkat Dasar dan dapat ditingkatkan atau diturunkan. Lihat Harga App Service.
- Server fleksibel PostgreSQL dibuat di tingkat burstable terendah Standard_B1ms, dengan ukuran penyimpanan minimum, yang dapat ditingkatkan atau diturunkan skalanya. Lihat Azure Database untuk harga PostgreSQL.
- Jaringan virtual tidak dikenakan biaya kecuali Anda mengonfigurasi fungsionalitas tambahan, seperti peering. Lihat Harga Azure Virtual Network.
- Zona DNS privat dikenakan biaya kecil. Lihat Harga Azure DNS.
Bagaimana cara menyambungkan ke server PostgreSQL yang diamankan di belakang jaringan virtual dengan alat lain?
- Untuk akses dasar dari alat baris perintah, Anda dapat menjalankan
psql
dari terminal SSH aplikasi. - Untuk terhubung dari alat desktop, komputer Anda harus berada dalam jaringan virtual. Misalnya, itu bisa berupa Azure VM yang terhubung ke salah satu subnet, atau komputer di jaringan lokal yang memiliki koneksi VPN situs-ke-situs dengan jaringan virtual Azure.
- Anda juga dapat mengintegrasikan Azure Cloud Shell dengan jaringan virtual.
Bagaimana cara kerja pengembangan aplikasi lokal dengan GitHub Actions?
Menggunakan file alur kerja yang dibuat secara otomatis dari App Service sebagai contoh, masing-masing git push
memulai eksekusi build dan penyebaran baru. Dari klon lokal repositori GitHub, Anda membuat pembaruan yang diinginkan dan mendorong ke GitHub. Contohnya:
git add .
git commit -m "<some-message>"
git push origin main
Bagaimana sampel Django dikonfigurasi untuk berjalan di Azure App Service?
Catatan
Jika Anda mengikuti tutorial ini dengan aplikasi Anda sendiri, lihat deskripsi file requirements.txt di setiap file README.md proyek (Flask, Django) untuk melihat paket apa yang dibutuhkan.
Aplikasi sampel Django mengonfigurasi pengaturan dalam file azureproject/production.py sehingga dapat berjalan di Azure App Service. Perubahan ini umum untuk menyebarkan Django ke produksi, dan tidak khusus untuk App Service.
Django memvalidasi header HTTP_HOST dalam permintaan masuk. Kode sampel menggunakan
WEBSITE_HOSTNAME
variabel lingkungan di App Service untuk menambahkan nama domain aplikasi ke pengaturan ALLOWED_HOSTS Django.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Django tidak mendukung penyajian file statis dalam produksi. Untuk tutorial ini, Anda menggunakan WhiteNoise untuk mengaktifkan penyajian file. Paket WhiteNoise sudah diinstal dengan requirements.txt, dan middleware-nya ditambahkan ke daftar.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Kemudian pengaturan file statis dikonfigurasi sesuai dengan dokumentasi Django.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Untuk informasi selengkapnya, lihat Pengaturan produksi untuk aplikasi Django.
Langkah berikutnya
Lanjutkan ke tutorial berikutnya untuk mempelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.
Pelajari cara Azure App Service menjalankan aplikasi Python: