Egyéni indítási fájl konfigurálása Python-alkalmazásokhoz az Azure App Service-ben

Ebben a cikkben megtudhatja, hogy mikor és hogyan konfigurálhat egyéni indítási fájlt egy Azure App Service-ben üzemeltetett Python-webalkalmazáshoz. Bár a helyi fejlesztéshez nincs szükség indítási fájlra, Azure App Service futtatja az üzembe helyezett webalkalmazást egy Docker-tárolón belül, amely indítási parancsokat használhat, ha megadja őket.

Az alábbi helyzetekben egyéni indítási fájlra van szükség:

  • Egyéni Gunicorn-argumentumok: Az alapértelmezett Gunicorn-webkiszolgálót az alapértelmezett értéken túli további argumentumokkal szeretné elindítani, amelyek a következők --bind=0.0.0.0 --timeout 600.

  • Alternatív keretrendszerek vagy kiszolgálók: Az alkalmazás a Flasktól vagy a Djangotól eltérő keretrendszerrel készült, vagy a Gunicorn helyett egy másik webkiszolgálót szeretne használni.

  • Nem szabványos Flask-alkalmazásstruktúra: Olyan Flask-alkalmazása van, amelynek fő kódfájlja valami más, mint a app.py vagy az application.py, vagy az alkalmazásobjektum neve valami más, mint a app.

Más szóval egyéni indítási parancsra van szüksége, hacsak a projekt nem rendelkezik egy app.py vagy application.py fájllal a gyökérmappában egy Flask-alkalmazásobjektumtal.app

További információ: Python Apps konfigurálása – Tárolóindítási folyamat.

Előfeltételek

Egyéni indítási fájl konfigurálása előtt szüksége van egy meglévő, Pythont futtató App Service on Linux szolgáltatásra. Egy App Service létrehozásához kövesse a Python gyorsútmutató App Service-hez című útmutatót. Az Azure CLI használatával App Service-t is létrehozhat:

az webapp create --resource-group <group> --plan <plan> --name <app-name> --runtime "PYTHON:3.12"

Indítási fájl létrehozása

Ha egyéni indítási fájlra van szüksége, kövesse az alábbi lépéseket:

  1. Hozzon létre egy fájlt a projektben startup.txt, startup.sh vagy egy másik, az indítási parancsokat tartalmazó névvel. A Django, a Flask és más keretrendszerek jellemzőiről a cikk későbbi szakaszaiban olvashat.

    Az indítási fájlok szükség esetén több parancsot is tartalmazhatnak.

  2. Véglegesítse a fájlt a kódtárban, hogy az az alkalmazás többi részével együtt üzembe helyezhető legyen.

  3. A Visual Studio Code-ban válassza az Azure ikont a tevékenységsávon, bontsa ki az ERŐFORRÁSOK elemet, keresse meg és bontsa ki előfizetését, bontsa ki az App Servicest, kattintson a jobb gombbal az App Service-ra, és válassza a Megnyitás a portálon lehetőséget.

  4. Az Azure Portal bal oldali szolgáltatásmenüjében válassza a Beállítások konfigurációja lehetőséget>. Az App Service Konfiguráció lapján válassza az Általános beállítások lehetőséget, adja meg az indítási fájl nevét (például startup.txt vagy startup.sh) a Stack settings>Startup Command (Indítási parancs) területen, majd válassza a Mentés lehetőséget.

    Másik lehetőségként a Azure CLI is beállíthatja az indítási parancsot:

    az webapp config set --resource-group <group> --name <app-name> --startup-file "<startup-command>"
    

    Megjegyzés:

    Indítási parancsfájl használata helyett az indítási parancsot közvetlenül az Azure Portal Indítási parancs mezőjébe helyezheti. Indítási parancsfájl használata ajánlott, mert a konfigurációt az adattárban tárolja. Ez lehetővé teszi, hogy a verziókövetés nyomon kövesse a módosításokat, és leegyszerűsítse a más Azure App Service-példányokra való ismételt üzembe helyezést.

  5. Válassza a Folytatás lehetőséget, amikor a rendszer az App Service újraindítását kéri.

    Ha az alkalmazáskód üzembe helyezése előtt hozzáfér az Azure App Service-webhelyhez, "Alkalmazáshiba" jelenik meg, mert nem áll rendelkezésre kód a kérés feldolgozásához.

Django indítási parancsok

Az Azure App Service alapértelmezés szerint megkeresi a wsgi.py fájlt tartalmazó mappát, és elindítja a Gunicorn parancsot a következő paranccsal:

# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi

Ha módosítani szeretné a Gunicorn argumentumokat, például 1200 másodpercre szeretné növelni az időtúllépési értéket,--timeout 1200 hozzon létre egy egyéni indítási parancsfájlt. Ez a módszer felülírja az alapértelmezett beállításokat a megadott követelményekkel. További információ: Tárolóindítási folyamat – Django alkalmazás.

Flask indítási parancsok

Alapértelmezés szerint App Service on Linux feltételezi, hogy a Flask-alkalmazás megfelel a következő feltételeknek:

  • A WSGI hívható neve app.
  • Az alkalmazáskód egy application.py vagy app.py nevű fájlban található.
  • Az alkalmazásfájl az alkalmazás gyökérmappájában található.

Ha a projekt eltér ettől a struktúrától, az egyéni indítási parancsnak azonosítania kell az alkalmazásobjektum helyét a formátumfájlban:app_object:

  • Eltérő fájlnév és/vagy alkalmazásobjektum neve: Ha az alkalmazás fő kódfájlja hello.py , és az alkalmazásobjektum neve el van nevezve myapp, az indítási parancs a következő:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    
  • Az indítási fájl egy almappában található: Ha az indítási fájl a myapp/website.py és az alkalmazásobjektum app, a Gunicorn argumentumával --chdir adja meg a mappát, majd adja meg az indítási fájlt és az alkalmazásobjektumot a szokásos módon:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
    
  • Az indítási fájl egy modulon belül van: A python-sample-vscode-flask-tutorial kódban a webapp.py indítási fájl a hello_app mappában található, amely maga egy __init__.py fájllal rendelkező modul. Az alkalmazásobjektum neve app, és a __init__.py fájlban van definiálva. A webapp.py relatív importot használ.

    A Gunicorn erre webapp:app való mutatása miatt megjelenik a "Relatív importálás kísérlet nem csomagban" hibaüzenet, és az alkalmazás nem indul el.

    Ebben az esetben hozzon létre egy shim-fájlt, amely importálja az alkalmazásobjektumot a modulból, majd a Gunicorn indítsa el az alkalmazást a shim használatával. A python-sample-vscode-flask-tutorial kód például startup.py tartalmaz a következő tartalommal:

    from hello_app.webapp import app
    

    Az indítási parancs ezután a következő:

    gunicorn --bind=0.0.0.0 --workers=4 startup:app
    

További információ: Tárolóindítási folyamat – Flask-alkalmazás.

Egyéb keretrendszerek és webkiszolgálók

A Python-alkalmazásokat futtató App Service-tárolóban alapértelmezés szerint telepítve van a Django és a Flask, valamint a Gunicorn webkiszolgáló.

A Django vagy Flasktól eltérő keretrendszer (például Falcon, FastAPI és egyéb) használata, vagy másik webkiszolgáló használata:

  • Vegye fel a keretrendszert és a webkiszolgálót a requirements.txt fájlba.

  • Az indítási parancsban azonosítsa a Flask előző szakaszában leírtak szerint hívható WSGI-t.

  • A Gunicorntól eltérő webkiszolgáló indításához használjon parancsot python -m a kiszolgáló közvetlen meghívása helyett. A következő parancs például elindítja az uvicorn-kiszolgálót , feltéve, hogy a WSGI hívható neve el van nevezve app , és application.py található:

    python -m uvicorn application:app --host 0.0.0.0
    

    A python -m azért használja, mert a requirements.txt keresztül telepített webkiszolgálók nem lesznek hozzáadva a Python globális környezethez, ezért közvetlenül nem hívhatók meg. A python -m parancs meghívja a kiszolgálót az aktuális virtuális környezetből.

Az alkalmazás üzembe helyezése

Az indítási fájl konfigurálása után telepítenie kell az alkalmazáskódot az App Service-ben. Használja a választott Azure CLI vagy üzembe helyezési módszert:

az webapp up --name <app-name>

További üzembehelyezési lehetőségekért tekintse meg az üzembe helyezés ajánlott eljárásait.