Aracılığıyla paylaş


Azure Uygulaması Hizmetinde kapsayıcılı Flask veya FastAPI web uygulaması dağıtma

Bu öğreticide, Kapsayıcılar için Web Uygulaması özelliğini kullanarak Azure Uygulaması Hizmeti'nePython Flask veya FastAPI web uygulamasının nasıl dağıtılacağı gösterilmektedir. Bu yaklaşım, tam olarak yönetilen bir platformun avantajlarını isteyen geliştiriciler için kolaylaştırılmış bir yol sağlarken, uygulamalarını dahil edilen tüm bağımlılıklarla tek bir kapsayıcılı yapıt olarak dağıtır. Azure'da kapsayıcıları kullanma hakkında daha fazla bilgi için bkz . Azure kapsayıcı seçeneklerini karşılaştırma.

Bu öğreticide Docker CLI ve Docker'ı kullanarak isteğe bağlı olarak bir Docker görüntüsünü yerel olarak derleyip test edebilirsiniz. Ardından Docker görüntüsünü AzureContainer Registry'ye (ACR) göndermek ve Azure App Service'e dağıtmak için Azure CLI'yi kullanırsınız. Web uygulaması, Azure rol tabanlı erişim denetimi (RBAC) kullanarak görüntüyü ACR'den çekmek için güvenli, parolasız erişim için sistem tarafından atanan yönetilen kimliğiyle yapılandırılır. Ayrıca, Azure Araçları Uzantısı'nınyüklü olduğu Visual Studio Code ile de dağıtım yapabilirsiniz.

Azure Container Apps'te çalıştırılacak bir Docker görüntüsü oluşturma ve oluşturma örneği için bkz . Azure Container Apps'te Flask veya FastPI web uygulaması dağıtma.

Not

Bu öğreticide, Azure App Service'e dağıtılabilir bir Docker görüntüsünün nasıl oluşturulacağı gösterilmektedir. Ancak, App Service'e dağıtmak için Docker görüntüsü kullanmak gerekli değildir. Uygulama kodunuzu docker görüntüsü oluşturmadan doğrudan yerel çalışma alanınızdan App Service'e de dağıtabilirsiniz. Örnek için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetine Python (Django veya Flask) web uygulaması dağıtma.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:

Örnek kodunu alma

Yerel ortamınızda kodu alın.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart

Dockerfile ve .dockerignore dosyaları ekleme

Docker'a görüntünün nasıl derleneceğini bildirmek için bir Dockerfile ekleyin. Dockerfile, web isteklerini Flask ve FastAPI çerçevelerine ileten üretim düzeyinde bir web sunucusu olan Gunicorn'un kullanımını belirtir. ENTRYPOINT ve CMD komutları Gunicorn'a uygulama nesnesi isteklerini işlemesini sağlar.

# 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 bu örnekte kapsayıcı bağlantı noktası (iç) için kullanılır, ancak herhangi bir ücretsiz bağlantı noktasını kullanabilirsiniz.

requirements.txt dosyasının içerdiğinden gunicornemin olmak için dosyasını denetleyin.

Flask==3.1.0
gunicorn

Gereksiz dosyaları görüntüden dışlamak için bir .dockerignore dosyası ekleyin.

.git*
**/*.pyc
.venv/

Gunicorn yapılandırma

Gunicorn bir gunicorn.conf.py dosyasıyla yapılandırılabilir. gunicorn.conf.py dosyası gunicorn'un çalıştırıldığı dizinde bulunduğunda Dockerfile'da konumunu belirtmeniz gerekmez. Yapılandırma dosyasını belirtme hakkında daha fazla bilgi için bkz . Gunicorn ayarları.

Bu öğreticide önerilen yapılandırma dosyası, kullanılabilir CPU çekirdeği sayısına göre çalışan sayısını artırmak için gunicorn yapılandırmaktadır. gunicorn.conf.py dosya ayarları hakkında daha fazla bilgi için bkz. Gunicorn yapılandırması.

# 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

Görüntüyü yerel olarak derleme ve çalıştırma

Görüntüyü yerel olarak oluşturun.

docker build --tag flask-demo .

Not

docker build Komut bir hata döndürürse docker deamon'un çalıştığından emin olun. Windows'ta Docker Desktop'ın çalıştığından emin olun.

Görüntüyü yerel ortamdaki bir Docker kapsayıcısında çalıştırın.

docker run --detach --publish 5000:50505 flask-demo

Web uygulamasının http://localhost:5000 yerel olarak çalıştığını görmek için tarayıcınızda URL'yi açın.

seçeneği --detach kapsayıcıyı arka planda çalıştırır. seçeneği kapsayıcı --publish bağlantı noktasını konak üzerindeki bir bağlantı noktasına eşler. Konak bağlantı noktası (dış) çiftte ilk, kapsayıcı bağlantı noktası (iç) ise ikincidir. Daha fazla bilgi için bkz . Docker çalıştırma başvurusu.

Kaynak grubu ve Azure Container Registry oluşturma

  1. Azure'da oturum açmak için az login komutunu çalıştırın.

    az login
    
  2. Azure CLI sürümünüzün güncel olduğundan emin olmak için az upgrade komutunu çalıştırın.

    az upgrade
    
  3. az group create komutuyla bir grup oluşturun .

    RESOURCE_GROUP_NAME=<resource-group-name>
    LOCATION=<location>
    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

    Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. Kaynak grubu oluştururken eastus gibi bir konum belirtirsiniz. <location> ile seçtiğiniz konumu değiştirin. Belirli SKU'lar belirli konumlarda kullanılamadığından bunu belirten bir hata alabilirsiniz. Farklı bir konum kullanın ve yeniden deneyin.

  4. az acr create komutuyla bir Azure Container Registry oluşturun . <container-registry-name>'ı örneğiniz için benzersiz bir adla değiştirin.

    CONTAINER_REGISTRY_NAME=<container-registry-name>
    az acr create --resource-group $RESOURCE_GROOUP_NAME \
    --name $CONTAINER_REGISTRY_NAME --sku Basic
    

    Not

    Kayıt defteri adı Azure'da benzersiz olmalıdır. Hata alırsanız farklı bir ad deneyin. Kayıt defteri adları 5-50 alfasayısal karakterden oluşabilir. Kısa çizgilere ve alt çizgilere izin verilmez. Daha fazla bilgi edinmek için bkz . Azure Container Registry ad kuralları. Farklı bir ad kullanıyorsanız, aşağıdaki bölümlerde kayıt defterine ve kayıt defteri yapıtlarına başvuran komutlar yerine webappacr123 adınızı kullandığınızdan emin olun.

    Azure Container Registry, Azure Container Instances, Azure Uygulaması Service, Azure Kubernetes Service ve diğer hizmetlerde kullanılmak üzere görüntüleri depolayan özel bir Docker kayıt defteridir. Kayıt defteri oluştururken bir ad, SKU ve kaynak grubu belirtirsiniz.

Görüntüyü Azure Container Registry'de oluşturma

Az acr build komutuyla Azure'da Docker görüntüsünü oluşturun . Komut geçerli dizindeki Dockerfile dosyasını kullanır ve görüntüyü kayıt defterine gönderir.

az acr build \
  --resource-group $RESOURCE_GROUP_NAME \
  --registry $CONTAINER_REGISTRY_NAME \
  --image webappsimple:latest .

--registry seçeneği kayıt defteri adını, seçeneği ise --image görüntü adını belirtir. Resim adı biçimindedir registry.azurecr.io/repository:tag.

Web uygulamasını Azure'a dağıtma

  1. az appservice plan komutuyla bir App Service planı oluşturun.

    az appservice plan create \
    --name webplan \
    --resource-group $RESOURCE_GROUP_NAME \
    --sku B1 \
    --is-linux
    
  2. Abonelik kimliğinize bir ortam değişkeni ayarlayın. Sonraki komutta --scope parametresinde kullanılır.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    Ortam değişkeni oluşturma komutu Bash kabuğu için gösterilir. Söz dizimini diğer ortamlar için uygun şekilde değiştirin.

  3. az webapp create komutuyla web uygulamasını oluşturun .

    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 
    

    Notlar:

    • Web uygulamasının adı Azure'da benzersiz olmalıdır. Hata alırsanız farklı bir ad deneyin. Ad alfasayısal karakterler ve kısa çizgilerden oluşabilir, ancak kısa çizgiyle başlayamaz veya bitemez. Daha fazla bilgi edinmek için bkz . Microsoft.Web adı kuralları.

    • Azure Container Registry'niz için farklı webappacr123 bir ad kullanıyorsanız parametreyi uygun şekilde güncelleştirdiğinizden --container-image-name emin olun.

    • --assign-identity, --roleve --scope parametreleri web uygulamasında sistem tarafından atanan yönetilen kimliği etkinleştirir ve buAcrPullkimliği kaynak grubunda atar. Bu, yönetilen kimliğe kaynak grubundaki herhangi bir Azure Container Registry'den görüntü çekme izni verir.

    • --acr-use-identity ve --acr-identity parametreleri, web uygulamasını Azure Container Registry'den görüntü çekmek için sistem tarafından atanan yönetilen kimliğini kullanacak şekilde yapılandırır.

    • Web uygulamasının oluşturulması birkaç dakika sürebilir. az webapp log tail komutuyla dağıtım günlüklerini de kontrol edebilirsiniz. Örneğin, az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. İçlerinde "ısınma" olan girdiler görürseniz kapsayıcı dağıtılır.

    • Web uygulamasının URL'si, örneğin şeklindedir<web-app-name>.azurewebsites.nethttps://webappsimple123.azurewebsites.net.

Güncelleştirmeler yapma ve yeniden dağıtma

Kod değişiklikleri yaptıktan sonra az acr build ve az webapp update komutları ile App Service'e yeniden dağıtabilirsiniz.

Temizleme

Bu öğreticide oluşturulan tüm Azure kaynakları aynı kaynak grubunda yer alır. Kaynak grubunu kaldırmak, kaynak grubundaki tüm kaynakları kaldırır ve uygulamanız için kullanılan tüm Azure kaynaklarını kaldırmanın en hızlı yoludur.

Kaynakları kaldırmak için az group delete komutunu kullanın.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Grubu Azure portalından veya Visual Studio Code'da ve Azure Araçları Uzantısı'nda da kaldırabilirsiniz.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: