Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini menunjukkan kepada Anda cara menyebarkan aplikasi web Python Flask atau FastAPI ke Azure App Service menggunakan fitur Web App for Containers. Pendekatan ini menyediakan jalur yang disederhanakan bagi pengembang yang menginginkan manfaat dari platform yang dikelola sepenuhnya sambil menyebarkan aplikasi mereka sebagai artefak kontainer tunggal dengan semua dependensi disertakan. Untuk informasi selengkapnya tentang menggunakan kontainer di Azure, lihat Membandingkan opsi kontainer Azure.
Dalam tutorial ini, Anda menggunakan Docker CLI dan Docker untuk secara opsional membangun dan menguji gambar Docker secara lokal. Anda kemudian menggunakan Azure CLI untuk mendorong gambar Docker ke Azure Container Registry (ACR) dan menyebarkannya ke Azure App Service. Aplikasi web dikonfigurasi dengan identitas terkelola yang ditetapkan sistem untuk akses aman tanpa kata sandi untuk menarik gambar dari ACR menggunakan kontrol akses berbasis peran Azure (RBAC). Anda juga dapat melakukan penyebaran dengan Visual Studio Code dengan Ekstensi Alat Azure terinstal.
Untuk contoh membangun dan membuat gambar Docker untuk dijalankan di Azure Container Apps, lihat Menyebarkan aplikasi web Flask atau FastPI di Azure Container Apps.
Catatan
Tutorial ini menunjukkan cara membuat gambar Docker yang dapat disebarkan ke Azure App Service. Namun, penggunaan image Docker tidak wajib untuk menerapkan ke App Service. Anda juga dapat menyebarkan kode aplikasi langsung dari ruang kerja lokal Anda ke App Service tanpa membuat gambar Docker. Misalnya, lihat Mulai Cepat: Menyebarkan aplikasi web Python (Django atau Flask) ke Azure App Service.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda perlu:
Akun Azure tempat Anda dapat menyebarkan aplikasi web ke Azure App Service dan Azure Container Registry. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Azure CLI untuk membuat gambar Docker dan menyebarkannya ke App Service. Dan secara opsional, Dockerdan Docker CLI untuk membuat Docker dan mengujinya di lingkungan lokal Anda.
Dapatkan kode sampel
Di lingkungan lokal Anda, dapatkan kodenya.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
Menambahkan file Dockerfile dan .dockerignore
Tambahkan Dockerfile untuk menginstruksikan Docker cara membuat gambar. Dockerfile menentukan penggunaan Gunicorn, server web tingkat produksi yang meneruskan permintaan web ke kerangka kerja Flask dan FastAPI. Perintah ENTRYPOINT dan CMD menginstruksikan Gunicorn untuk menangani permintaan objek aplikasi.
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "app:app"]
50505
digunakan untuk port kontainer (internal) dalam contoh ini, tetapi Anda dapat menggunakan port gratis apa pun.
Periksa file requirements.txt untuk memastikan file berisi gunicorn
.
Flask==3.1.0
gunicorn
Tambahkan file .dockerignore untuk mengecualikan file yang tidak perlu dari gambar.
.git*
**/*.pyc
.venv/
Mengonfigurasi gunicorn
Gunicorn dapat dikonfigurasi dengan file gunicorn.conf.py . Ketika file gunicorn.conf.py terletak di direktori yang sama tempat gunicorn dijalankan, Anda tidak perlu menentukan lokasinya di Dockerfile. Untuk informasi selengkapnya tentang menentukan file konfigurasi, lihat Pengaturan Gunicorn.
Dalam tutorial ini, file konfigurasi yang disarankan mengonfigurasi gunicorn untuk meningkatkan jumlah pekerjanya berdasarkan jumlah inti CPU yang tersedia. Untuk informasi selengkapnya tentang pengaturan file gunicorn.conf.py, lihat bagian Konfigurasi Gunicorn.
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
Membangun dan menjalankan gambar secara lokal
Buat gambar secara lokal.
Catatan
docker build
Jika perintah mengembalikan kesalahan, pastikan deamon docker berjalan. Di Windows, pastikan Docker Desktop sedang berjalan.
Jalankan gambar secara lokal dalam kontainer Docker.
docker run --detach --publish 5000:50505 flask-demo
http://localhost:5000
Buka URL di browser Anda untuk melihat aplikasi web berjalan secara lokal.
Opsi --detach
menjalankan kontainer di latar belakang. Opsi --publish
memetakan port kontainer ke port pada host. Port host (eksternal) adalah yang pertama dalam pasangan, dan port kontainer (internal) adalah yang kedua. Untuk informasi selengkapnya, lihat Referensi Docker run.
Membuat grup sumber daya dan Azure Container Registry
Jalankan perintah az login untuk masuk ke Azure.
az login
Jalankan perintah az upgrade untuk memastikan versi Azure CLI Anda saat ini.
az upgrade
Buat grup dengan perintah az group create .
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Grup sumber daya Azure adalah kontainer logis tempat sumber daya Azure disebarkan dan dikelola. Saat membuat grup sumber daya, Anda menentukan lokasi seperti eastus. Ganti
<location>
dengan lokasi yang Anda pilih. SKU tertentu tidak tersedia di lokasi tertentu, sehingga Anda mungkin mendapatkan kesalahan yang menunjukkan hal ini. Gunakan lokasi lain dan coba lagi.Buat Azure Container Registry dengan perintah az acr create . Ganti
<container-registry-name>
dengan nama unik untuk instans Anda.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku Basic
Catatan
Nama registri harus unik di Azure. Jika Anda mendapatkan kesalahan, coba nama lain. Nama registri dapat terdiri dari 5-50 karakter alfanumerik. Tanda hubung dan garis bawah tidak diperbolehkan. Untuk mempelajari selengkapnya, lihat aturan penamaan Azure Container Registry. Jika Anda menggunakan nama yang berbeda, pastikan Anda menggunakan nama Anda sendiri dan bukan
webappacr123
dalam perintah yang merujuk pada registri dan artefak registri di bagian berikut.Azure Container Registry adalah registri Docker privat yang menyimpan gambar untuk digunakan dalam Azure Container Instances, Azure App Service, Azure Kubernetes Service, dan layanan lainnya. Saat membuat registri, Anda menentukan nama, SKU, dan grup sumber daya.
Membangun gambar di Azure Container Registry
Buat gambar Docker di Azure dengan perintah az acr build . Perintah menggunakan Dockerfile di direktori saat ini, dan mengunggah citra ke registri.
az acr build \
--resource-group $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--image webappsimple:latest .
Opsi --registry
menentukan nama registri, dan --image
opsi menentukan nama gambar. Nama gambar dalam format registry.azurecr.io/repository:tag
.
Menyebarkan aplikasi web ke Azure
Buat paket App Service menggunakan perintah az appservice plan.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Atur variabel lingkungan ke ID langganan Anda. Ini digunakan dalam
--scope
parameter di perintah berikutnya.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Perintah untuk membuat variabel lingkungan ditampilkan untuk shell Bash. Ubah sintaks yang sesuai untuk lingkungan lain.
Buat aplikasi web dengan perintah az webapp create .
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latest
Catatan:
Nama aplikasi web harus unik di Azure. Jika Anda mendapatkan kesalahan, coba nama lain. Nama dapat terdiri dari karakter alfanumerik dan tanda hubung, tetapi tidak dapat dimulai atau diakhir dengan tanda hubung. Untuk mempelajari selengkapnya, lihat aturan nama Microsoft.Web.
Jika Anda menggunakan nama yang berbeda dari
webappacr123
untuk Azure Container Registry, pastikan Anda memperbarui--container-image-name
parameter dengan tepat.Parameter
--assign-identity
,--role
, dan--scope
mengaktifkan identitas terkelola yang ditugaskan sistem di aplikasi web dan menetapkannya peranAcrPull
pada grup sumber daya. Ini memberikan izin kepada identitas terkelola untuk mengambil gambar dari Azure Container Registry mana pun di dalam kelompok sumber daya.Parameter
--acr-use-identity
dan--acr-identity
mengonfigurasi aplikasi web untuk menggunakan identitas terkelola yang ditetapkan sistem untuk menarik gambar dari Azure Container Registry.Dibutuhkan beberapa menit agar aplikasi web dibuat. Anda dapat memeriksa log penyebaran menggunakan perintah az webapp log tail. Contohnya,
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Jika Anda melihat entri dengan "warmup" di dalamnya, wadah sedang disebarkan.URL aplikasi web adalah
<web-app-name>.azurewebsites.net
, misalnya,https://webappsimple123.azurewebsites.net
.
Membuat pembaruan dan menyebarkan ulang
Setelah membuat perubahan kode, Anda dapat menyebarkan ulang ke App Service dengan perintah az acr build dan az webapp update .
Bersihkan
Semua sumber daya Azure yang dibuat dalam tutorial ini berada dalam grup sumber daya yang sama. Menghapus grup sumber daya akan menghapus semua sumber daya dalam grup sumber daya dan merupakan cara tercepat untuk menghapus semua sumber daya Azure yang digunakan untuk aplikasi Anda.
Untuk menghapus sumber daya, gunakan perintah az group delete .
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Anda juga dapat menghapus grup di portal Azure atau di Visual Studio Code dan Ekstensi Alat Azure.
Langkah berikutnya
Untuk informasi selengkapnya, lihat sumber daya berikut: