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


Python-webalkalmazás létrehozása és üzembe helyezése az Azure Container Apps és a PostgreSQL használatával

Ez a cikk a Python-webalkalmazások Azure Container Appsben való tárolóba helyezéséről és üzembe helyezéséről szóló oktatóanyag része. A Container Apps lehetővé teszi a tárolóalapú alkalmazások üzembe helyezését összetett infrastruktúra kezelése nélkül.

Az oktatóanyag ezen részében megtudhatja, hogyan tárolózhat és helyezhet üzembe Egy Python-minta webalkalmazást (Django vagy Flask). A tárolórendszerképet a felhőben kell létrehoznia, és üzembe kell helyeznie az Azure Container Appsben. Olyan környezeti változókat határoz meg, amelyek lehetővé teszik a tárolóalkalmazás számára, hogy egy rugalmas Azure Database for PostgreSQL-példányhoz csatlakozzon, ahol a mintaalkalmazás tárolja az adatokat.

Ez a szolgáltatásdiagram a cikkben tárgyalt összetevőket emeli ki: tárolórendszerképek létrehozása és üzembe helyezése.

A screenshot of the services in the Tutorial - Deploy a Python App on Azure Container Apps. Section highlighted is what is covered in this article.

Mintaalkalmazás letöltése

A mintakód elágazása és klónozása a fejlesztői környezetbe.

1. lépés Nyissa meg a mintaalkalmazás GitHub-adattárát (Django vagy Flask), és válassza a Fork lehetőséget.

A lépéseket követve elágaztathatja a címtárat a GitHub-fiókjához. A kódtárat közvetlenül a helyi gépére is letöltheti elágaztatás vagy GitHub-fiók nélkül, azonban az oktatóanyag későbbi részében tárgyalt CI/CD-t nem fogja tudni beállítani.

2. lépés A git clone paranccsal klónozza az elágaztatott adattárat a python-container mappába:

# Django
git clone https://github.com/$USERNAME/msdocs-python-django-azure-container-apps.git python-container

# Flask
# git clone https://github.com/$USERNAME/msdocs-python-flask-azure-container-apps.git python-container

3. lépés Könyvtár módosítása.

cd python-container

Tárolórendszerkép létrehozása webalkalmazás-kódból

A lépések elvégzése után rendelkezni fog egy Azure Container Registryvel, amely a mintakódból létrehozott Docker-tárolórendszerképet tartalmazza.

Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy munkaállomáson, amelyen telepítve van az Azure CLI .

1. lépés Hozzon létre egy erőforráscsoportot az az group create paranccsal.

az group create \
--name pythoncontainer-rg \
--location <location>

<A location (hely>) a parancs az account list-locations -o tablekimenetéből származó Azure-helynévértékek egyike.

2. lépés Hozzon létre egy tárolóregisztrációs adatbázist az az acr create paranccsal.

az acr create \
--resource-group pythoncontainer-rg \
--name <registry-name> \
--sku Basic \
--admin-enabled

<A beállításjegyzék-névnek> egyedinek kell lennie az Azure-ban, és 5–50 alfanumerikus karaktert kell tartalmaznia.

A rendszergazda számára létrehozott hitelesítő adatokat a következőkkel tekintheti meg:

az acr credential show \
--name <registry-name> \
--resource-group pythoncontainer-rg

3. lépés Jelentkezzen be a beállításjegyzékbe az az acr bejelentkezési paranccsal.

az acr login --name <registry-name>

A parancs hozzáadja a "azurecr.io" nevet a névhez a teljes beállításjegyzéknév létrehozásához. Ha sikeres, a "Bejelentkezés sikeres" üzenet jelenik meg. Ha a beállításjegyzéket a beállításjegyzék létrehozásának alapjául szolgálótól eltérő előfizetésből éri el, használja a kapcsolót --suffix .

4. lépés: Hozza létre a képet az az acr buildelési paranccsal.

az acr build \
--registry <registry-name> \
--resource-group pythoncontainer-rg \
--image pythoncontainer:latest .

Vegye figyelembe:

  • A parancs végén található pont (".") jelzi a buildelendő forráskód helyét. Ha nem a mintaalkalmazás gyökérkönyvtárában futtatja ezt a parancsot, adja meg a kód elérési útját.

  • Ha az Azure Cloud Shellben futtatja a parancsot, először git clone húzza le az adattárat a Cloud Shell-környezetbe, és módosítsa a könyvtárat a projekt gyökerére, hogy a pont (".") megfelelően legyen értelmezve.

  • Ha kihagyja a -t (ugyanazzal a beállítással --imagemegegyező) beállítást, a parancs egy helyi környezetbeli buildet állít elő anélkül, hogy leküldi azt a beállításjegyzékbe. A leküldés nélküli építés hasznos lehet a rendszerkép buildjeinek ellenőrzéséhez.

5. lépés Győződjön meg arról, hogy a tárolólemezkép az az acr-adattár listaparancsával lett létrehozva.

az acr repository list --name <registry-name>

Rugalmas PostgreSQL-kiszolgálópéldány létrehozása

A mintaalkalmazás (Django vagy Flask) egy PostgreSQL-adatbázisban tárolja az éttermi felülvizsgálati adatokat. Ezekben a lépésekben létre kell hoznia az adatbázist tartalmazó kiszolgálót.

Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy munkaállomáson, amelyen telepítve van az Azure CLI .

1. lépés Az az postgres flexible-server create paranccsal hozza létre a PostgreSQL-kiszolgálót az Azure-ban. Nem ritka, hogy ez a parancs néhány percig fut.

az postgres flexible-server create \
   --resource-group pythoncontainer-rg \
   --name <postgres-server-name>  \
   --location <location> \
   --admin-user <admin-username> \
   --admin-password <admin-password> \
   --sku-name Standard_D2s_v3 \
   --public-access 0.0.0.0 
  • A "pythoncontainer-rg" → Az oktatóanyagban használt erőforráscsoport neve. Ha más nevet használt, módosítsa ezt az értéket.

  • <postgres-server-name> → A PostgreSQL-adatbáziskiszolgáló neve. Ennek a névnek minden Azure-ban egyedinek kell lennie. A kiszolgálóvégpont a következő: "https://< postgres-server-name.postgres.database.azure.com>". Az engedélyezett karakterek: "A"-"Z", "0"-"9" és "-".

  • <hely> → Használja ugyanazt a helyet, amelyet a webalkalmazáshoz használ. <A location (hely>) a parancs az account list-locations -o tablekimenetéből származó Azure-helynévértékek egyike.

  • <rendszergazdai felhasználónév> → rendszergazdai fiók felhasználóneve. Nem lehet "azure_superuser", "admin", "administrator", "root", "guest" vagy "public". Ehhez az oktatóanyaghoz használja a "demoadmin" kifejezést.

  • <rendszergazdai jelszó> A rendszergazda felhasználó jelszava. Az alábbi kategóriák közül háromból 8–128 karaktert kell tartalmaznia: angol nagybetűk, angol kisbetűk, számok és nem alfanumerikus karakterek.

    Fontos

    Felhasználónevek vagy jelszavak létrehozásakor ne használja a "$" karaktert. Később olyan környezeti változókat hoz létre ezekkel az értékekkel, amelyekben a "$" karakter speciális jelentéssel rendelkezik a Python-alkalmazások futtatásához használt Linux-tárolóban.

  • <sku-name> → A tarifacsomag és a számítási konfiguráció neve, például "Standard_D2s_v3". További információkért tekintse meg az Azure Database for PostgreSQL díjszabását. Az elérhető termékváltozatok listázásához használja a következőt az postgres flexible-server list-skus --location <location>: .

  • <public-access> → Használja a "0.0.0.0"-t, amely lehetővé teszi a kiszolgáló nyilvános elérését bármely Azure-szolgáltatásból, például a Container Appsből.

Feljegyzés

Ha a PostgreSQL-kiszolgálót a helyi munkaállomáson az Azure CLI-től eltérő eszközökkel szeretné használni, akkor hozzá kell adnia egy tűzfalszabályt az az postgres rugalmas kiszolgálói tűzfalszabály létrehozási parancsával.

Adatbázis létrehozása a kiszolgálón

Jelenleg egy PostgreSQL-kiszolgálóval rendelkezik. Ebben a szakaszban egy adatbázist hoz létre a kiszolgálón.

Használhatja a PostgreSQL interaktív terminál psql-t a helyi környezetben vagy az Azure Cloud Shellben, amely szintén elérhető az Azure Portalon. A psql használatakor gyakran egyszerűbb a Cloud Shell használata, mivel a rendszerhéjban minden függőség megtalálható.

1. lépés Csatlakozás az adatbázisba a psql használatával.

psql --host=<postgres-server-name>.postgres.database.azure.com \
     --port=5432 \
     --username=demoadmin@<postgres-server-name> \
     --dbname=postgres

Ahol <a postgres-server-name> a PostgreSQL-kiszolgáló neve. A parancs kérni fogja a rendszergazdai jelszót.

Ha nem tud csatlakozni, indítsa újra az adatbázist, és próbálkozzon újra. Ha a helyi környezetből csatlakozik, az IP-címet hozzá kell adni az adatbázis-szolgáltatás tűzfalszabály-listájához.

2. lépés Hozza létre az adatbázist.

postgres=> A parancssor típusa:

CREATE DATABASE restaurants_reviews;

A parancs végén található pontosvessző (";") szükséges. Az adatbázis sikeres létrehozásának ellenőrzéséhez használja a parancsot \c restaurants_reviews. Írja be \? a súgó megjelenítéséhez vagy \q a kilépéshez.

Rugalmas Azure PostgreSQL-kiszolgálóhoz is csatlakozhat, és létrehozhat egy adatbázist az Azure Data Studio vagy bármely más IDE használatával, amely támogatja a PostgreSQL-t.

A webalkalmazás üzembe helyezése a Container Appsben

A tárolóalkalmazások a Container Apps-környezetekben vannak üzembe helyezve, amelyek biztonságos határként működnek. A következő lépésekben létrehoz egy környezetet, egy tárolót a környezetben, és úgy konfigurálja a tárolót, hogy a webhely külsőleg látható legyen.

1. lépés Jelentkezzen be az Azure-ba, és szükség esetén hitelesítse magát.

az login

2. lépés Telepítse vagy frissítse az Azure Container Apps bővítményét az extension add paranccsal.

az extension add --name containerapp --upgrade

3. lépés Hozzon létre egy Container Apps-környezetet az az containerapp env create paranccsal.

az containerapp env create \
--name python-container-env \
--resource-group pythoncontainer-rg \
--location <location>

<A location (hely>) a parancs az account list-locations -o tablekimenetéből származó Azure-helynévértékek egyike.

4. lépés: Szerezze be az Azure Container Registry bejelentkezési hitelesítő adatait.

az acr credential show -n <registry-name>

Használja a parancs kimenetéből visszaadott felhasználónevet és jelszót.

5. lépés Hozzon létre egy tárolóalkalmazást a környezetben az az containerapp create paranccsal.

az containerapp create \
--name python-container-app \
--resource-group pythoncontainer-rg \
--image <registry-name>.azurecr.io/pythoncontainer:latest \
--environment python-container-env \
--ingress external \
--target-port 8000 \
--registry-server <registry-name>.azurecr.io \
--registry-username <registry-username> \
--registry-password <registry-password> \
--env-vars <env-variable-string>
--query properties.configuration.ingress.fqdn

<Az env-variable-string> egy szóközzel elválasztott értékekből álló sztring a key="value" formátumban az alábbi értékekkel.

  • AZURE_POSTGRESQL_HOST=<postgres-server-name.postgres.database.azure.com>
  • AZURE_POSTGRESQL_DATABAStandard kiadás=restaurants_reviews
  • AZURE_POSTGRESQL_UStandard kiadás RNAME=demoadmin
  • AZURE_POSTGRESQL_PASSWORD=<db-password>
  • RUNNING_IN_PRODUCTION=1
  • AZURE_Standard kiadásCRET_KEY=<YOUR-Standard kiadás CRET-KEY>

Érték létrehozása AZURE_SECRET_KEY a következő kimenettel python -c 'import secrets; print(secrets.token_hex())': .

Példa: --env-vars AZURE_POSTGRESQL_HOST="my-postgres-server.postgres.database.azure.com" AZURE_POSTGRESQL_DATABASE="restaurants_reviews" AZURE_POSTGRESQL_USERNAME="demoadmin" AZURE_POSTGRESQL_PASSWORD="somepassword" RUNNING_IN_PRODUCTION="1" AZURE_SECRET_KEY=asdfasdfasdf

7. lépés Csak Django esetén migrálja és hozza létre az adatbázissémát. (A Flask-mintaalkalmazásban ez automatikusan megtörténik, és kihagyhatja ezt a lépést.)

Csatlakozás az az containerapp exec paranccsal:

az containerapp exec \
--name python-container-app \
--resource-group pythoncontainer-rg

Ezután írja be a rendszerhéj parancssorát python manage.py migrate.

A tároló változatainak migrálása nem szükséges.

8. lépés Tesztelje a webhelyet.

A az containerapp create korábban megadott parancs egy alkalmazás URL-címét adja ki, a segítségével tallózhat az alkalmazáshoz. Az URL-cím "azurecontainerapps.io" végződik. Navigáljon az URL-címre egy böngészőben. Másik lehetőségként használhatja az az containerapp browse parancsot.

Íme egy példa a minta webhelyre egy étterem és két vélemény hozzáadása után.

Screenshot showing an example of the sample website built in this tutorial.

Üzemelő példány hibaelhárítása

  • Elfelejtette az alkalmazás URL-címét a webhely eléréséhez.

    • Az Azure Portalon nyissa meg a tárolóalkalmazás Áttekintés lapját, és keresse meg az alkalmazás URL-címét.
    • A VS Code-ban lépjen az Azure-bővítményre, és válassza a Container Apps szakaszt. Bontsa ki az előfizetést, bontsa ki a tárolókörnyezetet, és amikor megtalálta a tárolóalkalmazást, kattintson a jobb gombbal a python-container-app elemre , és válassza a Tallózás lehetőséget.
    • Az Azure CLI esetén a következő parancsot használja: az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn.
  • A VS Code-ban az Azure-beli buildrendszerkép hibát ad vissza.

    • Ha a következő üzenet jelenik meg: "Hiba: nem sikerült letölteni a környezetet. Ellenőrizze, hogy az URL-cím helytelen-e." a VS Code Output ablakban, majd frissítse a beállításjegyzéket a Docker-bővítményben. A frissítéshez válassza ki a Docker-bővítményt, lépjen a Regisztrációs adatbázisok szakaszra, keresse meg a beállításjegyzéket, és jelölje ki.
    • Ha ismét futtatja a buildrendszerképet az Azure-feladatban , ellenőrizze, hogy létezik-e az előző futtatásból származó beállításjegyzék, és ha igen, használja-e.
  • Az Azure Portalon egy tárolóalkalmazás létrehozása során megjelenik egy hozzáférési hiba, amely a következőt tartalmazza: "Nem lehet hozzáférni az ACR -hez "<name.azurecr.io>".

    • Ez a hiba akkor fordul elő, ha az ACR rendszergazdai hitelesítő adatai le vannak tiltva. A rendszergazdai állapot portálon való ellenőrzéséhez nyissa meg az Azure Container Registryt, válassza ki a Hozzáférési kulcsok erőforrást, és győződjön meg arról, hogy Rendszergazda felhasználó engedélyezve van.
  • A tárolórendszerkép nem jelenik meg az Azure Container Registryben.

    • Ellenőrizze az Azure CLI-parancs vagy a VS Code kimenetének kimenetét, és keressen üzeneteket a sikeresség megerősítéséhez.
    • Ellenőrizze, hogy a beállításjegyzék neve helyesen lett-e megadva a buildelési parancsban az Azure CLI-vel vagy a VS Code feladatkéréseiben.
    • Győződjön meg arról, hogy a hitelesítő adatai nem jártak le. A VS Code-ban például keresse meg a célregisztrációs adatbázist a Docker-bővítményben, és frissítse. Az Azure CLI-ben futtassa a következőt az login: .
  • A webhely a "Hibás kérés (400)" értéket adja vissza.

    • Ellenőrizze, hogy a PostgreSQL környezeti változói átkerülnek-e a tárolóba. A 400-os hiba gyakran azt jelzi, hogy a Python-kód nem tud csatlakozni a PostgreSQL-példányhoz.
    • Az oktatóanyagban használt mintakód ellenőrzi a tárolókörnyezet változójának RUNNING_IN_PRODUCTIONmeglétét, amely bármilyen értékre beállítható, például "1".
  • A webhely a "Nem található (404)" értéket adja vissza.

    • Ellenőrizze az alkalmazás URL-címét a tároló Áttekintés lapján. Ha az alkalmazás URL-címe tartalmazza a "belső" szót, akkor a bejövő forgalom nincs megfelelően beállítva.
    • Ellenőrizze a tároló bejövő forgalmát. Az Azure Portalon például lépjen a tároló bejövő forgalmának erőforrására, és győződjön meg arról, hogy a HTTP-bejövő forgalom engedélyezve van, és a bárhonnan érkező forgalom elfogadása lehetőség van kiválasztva.
  • A webhely nem indul el, megjelenik a "stream időtúllépése", vagy semmit nem ad vissza.

    • Ellenőrizze a naplókat.
      • Az Azure Portalon nyissa meg a Tárolóalkalmazás változatkezelési erőforrását, és ellenőrizze a tároló kiépítési állapotát .
        • Ha "Kiépítés", várjon, amíg a kiépítés befejeződött.
        • Ha "Sikertelen", válassza ki a változatot, és tekintse meg a konzolnaplókat. Válassza ki az oszlopok sorrendjét a "Generált idő", a "Stream_s" és a "Log_s" megjelenítéséhez. Először rendezze a naplókat, és keresse meg a Python stderr - és stdout-üzeneteket a "Stream_s" oszlopban. A Python "print" kimenete stdout üzenetek lesznek.
      • Az Azure CLI-vel használja az az containerapp logs show parancsot.
    • Ha a Django-keretrendszert használja, ellenőrizze, hogy a restaurants_reviews táblák léteznek-e az adatbázisban. Ha nem, használjon konzolt a tároló eléréséhez és futtatásához python manage.py migrate.

Következő lépés