Baca dalam bahasa Inggris

Bagikan melalui


Menyebarkan aplikasi web Flask atau FastAPI dalam kontainer di Azure App Service

Tutorial ini menunjukkan kepada Anda cara menyebarkan aplikasi web Python Flask atau FastAPI ke Azure App Service menggunakan fitur Web App for Containers. Aplikasi Web untuk Kontainer menyediakan jalan yang mudah bagi pengembang untuk memanfaatkan platform Azure App Service yang dikelola sepenuhnya, tetapi yang juga menginginkan artefak yang dapat disebarkan tunggal yang berisi aplikasi dan semua dependensinya. 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 membuat gambar Docker dan mengujinya secara lokal. Anda menggunakan Azure CLI untuk membuat gambar Docker di Azure Container Registry dan menyebarkannya ke Azure App Service. Aplikasi web dikonfigurasi dengan identitas terkelola yang ditetapkan sistem (koneksi tanpa kata sandi) dan akses berbasis peran Azure untuk menarik gambar Docker dari Azure Container Registry selama penyebaran. Anda juga dapat menyebarkan 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 pembuatan gambar Docker yang kemudian dapat dijalankan di App Service. Ini tidak diperlukan untuk menggunakan App Service. Anda dapat menyebarkan kode langsung dari ruang kerja lokal 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:

Mendapatkan kode sampel

Di lingkungan lokal Anda, dapatkan kodenya.

Bash
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.

Dockerfile
# 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.

Python
Flask==3.1.0
gunicorn

Tambahkan file .dockerignore untuk mengecualikan file yang tidak perlu dari gambar.

dockerignore
.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 Konfigurasi gunicorn.

text
# 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.

Bash
docker build --tag flask-demo .

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.

Bash
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 eksekusi Docker.

Membuat grup sumber daya dan Azure Container Registry

  1. Jalankan perintah az login untuk masuk ke Azure.

    Azure CLI
    az login
    
  2. Jalankan perintah az upgrade untuk memastikan versi Azure CLI Anda saat ini.

    Azure CLI
    az upgrade
    
  3. Buat grup dengan perintah az group create .

    Azure CLI
    az group create --name web-app-simple-rg --location eastus
    

    Grup sumber daya Azure adalah kontainer logis tempat sumber daya Azure disebarkan dan dikelola. Saat membuat grup sumber daya, Anda menentukan lokasi, seperti eastus.

  4. Buat Azure Container Registry dengan perintah az acr create . Ganti <container-registry-name> dengan nama unik untuk instans Anda.

    Azure CLI
    az acr create --resource-group web-app-simple-rg \
    --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 nama Azure Container Registry. Jika Anda menggunakan nama yang berbeda, pastikan Anda menggunakan nama Anda daripada webappacr123 dalam perintah yang mereferensikan artefak registri dan 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 mendorong gambar ke registri.

Azure CLI
az acr build \
  --resource-group web-app-simple-rg \
  --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

  1. Buat paket App Service dengan perintah az appservice plan .

    Azure CLI
    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Atur variabel lingkungan ke ID langganan Anda. Ini digunakan dalam --scope parameter di perintah berikutnya.

    Azure CLI
    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.

  3. Buat aplikasi web dengan perintah az webapp create .

    Azure CLI
    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name <container-registry-name> \
    --assign-identity [system] \
    --role AcrPull \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-rg \
    --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 ditetapkan sistem di aplikasi web dan menetapkan peranAcrPull grup sumber daya. Ini memberikan izin identitas terkelola untuk menarik gambar dari Azure Container Registry apa pun di grup 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 dengan perintah az webapp log tail . Contohnya,az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Jika Anda melihat entri dengan "pemanasan" di dalamnya, kontainer 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 .

Penghapusan

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 .

Azure CLI
az group delete --name web-app-simple-rg

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: