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'ne Python Flask veya FastAPI web uygulamasının nasıl dağıtılacağı gösterilmektedir. Kapsayıcılar için Web App, geliştiricilerin tam olarak yönetilen Azure Uygulaması Hizmeti platformundan yararlanması için kolay bir rampa sağlar, ancak bir uygulamayı ve tüm bağımlılıklarını içeren tek bir dağıtılabilir yapıt da ister. 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ü oluşturup yerel olarak test edebilirsiniz. Azure CLI kullanarak Azure'da bir Docker görüntüsü oluşturup Azure Uygulaması Hizmeti'ne dağıtabilirsiniz. Ayrıca, Azure Araçları Uzantısı'nın yü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 Daha sonra App Service'te çalıştırılabilir bir Docker görüntüsü oluşturma işlemi gösterilmektedir. App Service'i kullanmak için bu gerekli değildir. Docker görüntüsü oluşturmadan kodu doğrudan yerel bir çalışma alanından App Service'e 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:
Azure Uygulaması Service ve Azure Container Registry'ye bir web uygulaması dağıtabileceğiniz bir Azure hesabı.
Docker görüntüsü oluşturmak ve App Service'e dağıtmak için Azure CLI . İsteğe bağlı olarak Dockerve Docker CLI bir Docker oluşturup yerel ortamınızda test eder.
Örnek kodunu alma
Yerel ortamınızda kodu alın.
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 gunicorn
emin olmak için dosyasını denetleyin.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
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.
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
az group create komutuyla bir grup oluşturun .
az group create --name web-app-simple-rg --location eastus
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.
az acr create komutuyla bir Azure Container Registry oluşturun .
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic --admin-enabled true
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. İkinci komut, az credential show komutuyla parolayı bir değişkene kaydeder. Parola, sonraki bir adımda kayıt defterinde kimlik doğrulaması yapmak için kullanılır.
Kayıt defteri için parola değerine bir ortam değişkeni ayarlayın.
$ACR_PASSWORD=(az acr credential show \ --resource-group web-app-simple-rg \ --name webappacr123 \ --query "passwords[?name == 'password'].value" \ --output tsv)
Ortam değişkeni oluşturma komutu Bash kabuğu için gösterilir. Söz dizimini ve devamlılık karakterini (
\
) diğer kabuklar için uygun şekilde değiştirin.Ayrıca azure portalından kayıt defterine gidip Erişim anahtarları'nı seçerek ve parolayı kopyalayarak da parolayı (
ACR_PASSWORD
) alabilirsiniz.
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 web-app-simple-rg \
--registry webappacr123 \
--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
az appservice plan komutuyla bir App Service planı oluşturun.
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
az webapp create komutuyla web uygulamasını oluşturun .
az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --docker-registry-server-password $ACR_PASSWORD \ --docker-registry-server-user webappacr123 \ --role acrpull \ --deployment-container-image-name webappacr123.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 ve--deployment-container-image-name
parametrelerini uygun şekilde güncelleştirdiğinizden--docker-registry-server-user
emin olun.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.net
https://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 web-app-simple-rg
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: