Megosztás a következőn keresztül:


Tárolóalapú Flask- vagy FastAPI-webalkalmazás üzembe helyezése Azure-alkalmazás Szolgáltatásban

Ez az oktatóanyag bemutatja, hogyan helyezhet üzembe Python Flask- vagy FastAPI-webalkalmazást Azure-alkalmazás Szolgáltatásban a Web App for Containers funkcióval. Ez a megközelítés leegyszerűsíti azokat a fejlesztőket, akik egy teljes körűen felügyelt platform előnyeit szeretnék kihasználni, miközben az alkalmazásukat egyetlen tárolóalapú összetevőként helyezik üzembe az összes függőséggel együtt. A tárolók Azure-ban való használatáról további információt az Azure-tárolóbeállítások összehasonlítása című témakörben talál.

Ebben az oktatóanyagban a Docker parancssori felületét és a Dockert használja a Docker-rendszerképek helyi összeállításához és teszteléséhez. Ezután az Azure CLI használatával leküldheti a Docker-rendszerképet az Azure Container Registrybe (ACR), és üzembe helyezheti az Azure App Service-ben. A webalkalmazás a rendszer által hozzárendelt felügyelt identitással van konfigurálva a biztonságos, jelszó nélküli hozzáféréshez, hogy lekérje a rendszerképet az ACR-ből az Azure szerepköralapú hozzáférés-vezérlés (RBAC) használatával. A Visual Studio Code is üzembe helyezheti az Azure Tools bővítményt telepítve.

Az Azure Container Appsben futtatandó Docker-rendszerképek létrehozására és létrehozására példa: Flask- vagy FastPI-webalkalmazás üzembe helyezése az Azure Container Appsben.

Megjegyzés

Ez az oktatóanyag bemutatja, hogyan hozhat létre olyan Docker-rendszerképet, amely üzembe helyezhető az Azure App Service-ben. Docker-rendszerkép használata azonban nem szükséges az App Service-ben való üzembe helyezéshez. Az alkalmazáskódot közvetlenül a helyi munkaterületről is üzembe helyezheti az App Service-ben Docker-rendszerkép létrehozása nélkül. Példa: Rövid útmutató: Python -webalkalmazás (Django vagy Flask) üzembe helyezése Azure-alkalmazás Szolgáltatásban.

Előfeltételek

Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:

A mintakód letöltése

A helyi környezetben kérje le a kódot.

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

Dockerfile és .dockerignore fájlok hozzáadása

Adjon hozzá egy Docker-fájlt , amely arra utasítja a Dockert, hogyan készítse el a lemezképet. A Dockerfile a Gunicorn, egy éles szintű webkiszolgáló használatát határozza meg, amely webkérelmeket továbbít a Flask- és FastAPI-keretrendszereknek. Az ENTRYPOINT és a CMD parancsok arra utasítják a Gunicornt, hogy kezelje az alkalmazásobjektumra vonatkozó kéréseket.

# 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 ebben a példában a tárolóporthoz (belső) használható, de bármilyen ingyenes portot használhat.

Ellenőrizze a requirements.txt fájlt, hogy tartalmazza-e gunicorn.

Flask==3.1.0
gunicorn

Adjon hozzá egy .dockerignore fájlt, hogy kizárja a felesleges fájlokat a képből.

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

Konfigurálja a gunicorn-t

A Gunicorn egy gunicorn.conf.py fájllal konfigurálható. Ha a gunicorn.conf.py fájl ugyanabban a könyvtárban található, ahol a gunicorn fut, nem kell megadnia a helyét a Dockerfile-ban. A konfigurációs fájl megadásáról további információt a Gunicorn beállításai című témakörben talál.

Ebben az oktatóanyagban a javasolt konfigurációs fájl úgy konfigurálja a gunicorn-t, hogy növelje a feldolgozók számát az elérhető processzormagok száma alapján. A gunicorn.conf.py fájlbeállításokról további információt a Gunicorn konfigurációja című témakörben talál.

# 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

A képfájl lokális létrehozása és futtatása

Hozza létre helyileg a képet.

docker build --tag flask-demo .

Megjegyzés

Ha a docker build parancs hibát ad vissza, győződjön meg arról, hogy a docker-deamon fut. Windows rendszeren győződjön meg arról, hogy a Docker Desktop fut.

Futtassa a képet helyileg egy Docker-tárolóban.

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

Nyissa meg az http://localhost:5000 URL-címet a böngészőben a helyileg futó webalkalmazás megtekintéséhez.

A --detach beállítás a háttérben futtatja a tárolót. A --publish beállítás leképozza a tárolóportot a gazdagép egyik portjára. A gazdaport (külső) első a párban, a tárolóport (belső) pedig a második. További információ: Docker run reference.

Erőforráscsoport és Azure Container Registry létrehozása

  1. Futtassa az az login parancsot az Azure-ba való bejelentkezéshez.

    az login
    
  2. Futtassa az az upgrade parancsot, hogy ellenőrizze, hogy az Azure CLI-verzió aktuális-e.

    az upgrade
    
  3. Hozzon létre egy csoportot az az group create paranccsal.

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

    Az Azure-erőforráscsoport olyan logikai tároló, amelybe a rendszer üzembe helyezi és kezeli az Azure-erőforrásokat. Erőforráscsoport létrehozásakor meg kell adnia egy helyet, például eastus-t. Cserélje le <location> a kívánt helyre. Bizonyos termékváltozatok bizonyos helyeken nem érhetők el, ezért erre utaló hibaüzenet jelenhet meg. Használjon másik helyet, és próbálkozzon újra.

  4. Hozzon létre egy Azure Container Registryt az az acr create paranccsal. Cserélje le a <container-registry-name> a példány egyedi nevére.

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

    Megjegyzés

    A beállításjegyzék nevének egyedinek kell lennie az Azure-ban. Ha hibaüzenetet kap, próbálkozzon egy másik névvel. A beállításjegyzék neve 5–50 alfanumerikus karakterből állhat. Kötőjelek és aláhúzásjelek nem engedélyezettek. További információkért tekintse meg az Azure Container Registry névszabályai című témakört. Ha más nevet használ, győződjön meg arról, hogy a következő szakaszokban a beállításjegyzékre és a beállításjegyzék-összetevőkre hivatkozó parancsok helyett webappacr123 a saját nevét használja.

    Az Azure Container Registry egy privát Docker-beállításjegyzék, amely az Azure Container Instancesben, Azure-alkalmazás Service-ben, az Azure Kubernetes Service-ben és más szolgáltatásokban használható rendszerképeket tárolja. Beállításjegyzék létrehozásakor meg kell adnia egy nevet, termékváltozatot és erőforráscsoportot.

Rendszerkép létrehozása az Azure Container Registryben

Hozza létre a Docker-rendszerképet az Azure-ban az az acr build paranccsal. A parancs a dockerfile-t használja az aktuális könyvtárban, és leküldi a lemezképet a beállításjegyzékbe.

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

A --registry beállítás megadja a beállításjegyzék nevét, a --image beállítás pedig a rendszerkép nevét. A kép neve formátuma registry.azurecr.io/repository:tag.

Webalkalmazás üzembe helyezése az Azure-ban

  1. Hozzon létre egy App Service-csomagot az az appservice plan paranccsal.

    az appservice plan create \
    --name webplan \
    --resource-group $RESOURCE_GROUP_NAME \
    --sku B1 \
    --is-linux
    
  2. Állítson be egy környezeti változót az előfizetés azonosítójához. A paraméter a --scope következő parancsban használatos.

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

    A környezeti változó létrehozásához szükséges parancs a Bash shellhez van megadva. Módosítsa a szintaxist a többi környezethez megfelelő módon.

  3. Hozza létre a webalkalmazást az az webapp create paranccsal.

    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 
    

    Megjegyzések:

    • A webalkalmazás nevének egyedinek kell lennie az Azure-ban. Ha hibaüzenetet kap, próbálkozzon egy másik névvel. A név tartalmazhat alfanumerikus karaktereket és kötőjeleket, de nem indítható el és nem végződhet kötőjellel. További információ: Microsoft.Web name rules.

    • Ha az Azure Container Registry számára más nevet használ, mint a webappacr123, győződjön meg arról, hogy a --container-image-name paramétert megfelelően frissíti.

    • A --assign-identity, --roleés --scope paraméterek lehetővé teszik a webalkalmazás rendszer által hozzárendelt felügyelt identitását, és hozzárendelik a AcrPull szerepkört az erőforráscsoporthoz. Ez lehetővé teszi a felügyelt identitás számára a rendszerképek lekérését az erőforráscsoport bármely Azure Container Registry-adatbázisából.

    • A --acr-use-identity és --acr-identity paraméterek úgy konfigurálják a webalkalmazást, hogy a rendszerszinten hozzárendelt felügyelt identitással töltse be a képeket az Azure Container Registryból.

    • A webalkalmazás létrehozása eltarthat néhány percig. Az üzembehelyezési naplókat az az webapp log tail paranccsal ellenőrizheti. Például: az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Ha a "bemelegítés" szöveget látja a bejegyzésekben, a konténer üzembe helyezése folyamatban van.

    • A webalkalmazás URL-címe <web-app-name>.azurewebsites.netpéldául https://webappsimple123.azurewebsites.net.

Frissítések és ismételt üzembe helyezés

A kódmódosítások végrehajtása után újratelepítheti az App Service-t az az acr build és az webapp update parancsokkal.

Tisztítás

Az oktatóanyagban létrehozott összes Azure-erőforrás ugyanabban az erőforráscsoportban található. Az erőforráscsoport eltávolítása eltávolítja az erőforráscsoport összes erőforrását, és ez a leggyorsabb módja az alkalmazáshoz használt összes Azure-erőforrás eltávolításának.

Az erőforrások eltávolításához használja az az group delete parancsot.

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

A csoportot az Azure Portalon, a Visual Studio Code-ban és az Azure Tools bővítményben is eltávolíthatja.

Következő lépések

További információt a következő források tartalmaznak: