Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan futtatja a Azure-alkalmazás Szolgáltatás a Python-alkalmazásokat, hogyan migrálhatja a meglévő alkalmazásokat az Azure-ba, és hogyan szabhatja testre az App Service viselkedését szükség esetén. A Python-alkalmazásokat az összes szükséges pipmodullal együtt kell üzembe helyezni.
Az App Service üzembehelyezési motorja automatikusan aktivál egy virtuális környezetet, és függőségeket telepít egy requirements.txt, vagy pyproject.tomlsetup.py fájlból egy Git-adattár üzembe helyezésekor, illetve egy zip-csomag üzembe helyezésekor, amelyen engedélyezve van a buildautomatizálás.
Ez a cikk alapvető fogalmakat és utasításokat tartalmaz az App Service-ben beépített Linux-tárolót használó Python-fejlesztők számára. Ha még soha nem használta az App Service-t, először végezze el a Python rövid útmutatóját és a Flask, a Django vagy a FastAPI használatát a PostgreSQL-oktatóanyaggal.
A konfigurációhoz használhatja az Azure Portalt vagy az Azure CLI-t:
Azure Portal. Az alkalmazás bal oldali ablaktábláján válassza a Beállítások>környezet változói vagy a Beállítások>konfigurálása lehetőséget az App Service-alkalmazás konfigurálása az Azure Portalon című cikkben leírtak szerint.
Azure parancssori felület (CLI). Két lehetősége van.
- Parancsok futtatása az Azure Cloud Shellben.
- Helyi parancsok futtatásához telepítse az Azure CLI legújabb verzióját, és jelentkezzen be az Azure-ba az bejelentkezéssel.
Feljegyzés
A Python-alkalmazások App Service-ben való futtatásához a Linux az egyetlen operációsrendszer-beállítás. A Python windowsos használata már nem támogatott. Létrehozhat azonban saját egyéni Windows-tárolórendszerképet, és futtathatja azt az App Service-ben. További információ: Egyéni Docker-rendszerkép használata.
A Python-verzió konfigurálása
Azure Portal: Használja a Konfiguráció lap Általános beállítások lapját a Linux-tárolók általános beállításainak konfigurálása című cikkben leírtak szerint.
Azure CLI:
Az aktuális Python-verzió megjelenítése az az webapp config show használatával:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersionCserélje le és
<resource-group-name>írja be<app-name>a webalkalmazásnak megfelelő neveket.Állítsa be a Python-verziót az az webapp config set használatával:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PYTHON|3.14"Az App Service-ben támogatott összes Python-verzió megjelenítése az az webapp list-runtimes használatával:
az webapp list-runtimes --os linux | grep PYTHON
A Python nem támogatott verzióját saját tárolórendszerkép létrehozásával futtathatja. További információ: Egyéni Docker-rendszerkép használata.
Mi történik az elavult futtatókörnyezetekkel az App Service-ben?
Az elavult futtatókörnyezeteket a karbantartó szervezet elavulttá vagy jelentős biztonsági résekkel rendelkezik. Ennek megfelelően el lesznek távolítva a portál lapjainak létrehozása és konfigurálása során. Ha egy elavult futtatókörnyezet el van rejtve a portálon, a futtatókörnyezetet még használó alkalmazások továbbra is futnak.
Ha olyan alkalmazást szeretne létrehozni, amely a portálon már nem látható elavult futtatókörnyezeti verzióval rendelkezik, használja az Azure CLI-t, egy ARM-sablont vagy a Bicep-et. Ezek az üzembe helyezési alternatívák lehetővé teszik elavult futtatókörnyezetek létrehozását, amelyek a portálról törlődnek, de továbbra is támogatottak.
Ha egy futtatókörnyezet teljesen el lett távolítva az App Service-platformról, az Azure-előfizetés tulajdonosa e-mailben értesítést kap az eltávolítás előtt.
Testreszabott építési automatizálás
Feljegyzés
A Python-alkalmazások buildautomatizálással történő üzembe helyezésekor a tartalom nem az alatt, hanem a következőből /tmp/<uid>lesz üzembe helyezve és kiszolgálva /home/site/wwwroot: . Ezt a tartalomkönyvtárat a környezeti változó használatával érheti APP_PATH el. A futtatókörnyezetben létrehozott további fájlokat olyan helyre /home kell írnia, amely a Saját tárterület használata alatt vagy használatával történik az adatmegőrzéshez. Erről a viselkedésről további információt a Python buildmódosításai című témakörben talál.
Az App Service Oryx nevű buildelési rendszere az alábbi lépéseket hajtja végre az alkalmazás üzembe helyezésekor, ha az alkalmazás beállítása SCM_DO_BUILD_DURING_DEPLOYMENT a következőre 1van állítva:
Ha ezt a lépést a
PRE_BUILD_COMMANDbeállítás határozza meg, futtasson egy egyéni előre meghatározott szkriptet. (A szkript maga is futtathat más Python- és Node.js szkripteket, pip- és npm-parancsokat, valamint csomópontalapú eszközöket, példáulyarn installa Yarnt ésyarn build.)Telepítse a függőségeket. A buildelési rendszer a következő fájlokat ellenőrzi a projekt gyökérkönyvtárában:
-
requirements.txt: Futtat.
pip install -r requirements.txt -
pyproject.tomluv.lock: Használja
uv. -
pyproject.toml a poetry.lock: használja
poetry. -
pyproject.toml: Használja
poetry. -
setup.py: Fut
pip install ..
Feljegyzés
Ha a pyproject.toml jelen van, de az uv.lock hiányzik, az App Service alapértelmezés szerint a Poetryt használja, még akkor is, ha a poetry.lock is hiányzik. A
uvhasználatához az uv.lock-ot be kell vonni az üzembe helyezés során.Ha egyik fájl sem található, a buildelési folyamat a következő hibaüzenetet jelenti: "Nem található setup.py vagy requirements.txt; Nem futtatja a pip telepítését."
-
requirements.txt: Futtat.
Ha manage.py található az adattár gyökerében (amely django-alkalmazást jelez), futtassa a parancsot
manage.py collectstatic. Ha azonban aDISABLE_COLLECTSTATICbeállítás aztrue, a rendszer kihagyja ezt a lépést.Futtasson egy egyéni, buildelés utáni szkriptet, ha a lépés meg van adva a
POST_BUILD_COMMANDbeállításban. (A szkript más Python- és Node.js-szkripteket, pip- és npm-parancsokat, valamint csomópontalapú eszközöket is futtathat.)
Alapértelmezés szerint a , PRE_BUILD_COMMANDés POST_BUILD_COMMAND a DISABLE_COLLECTSTATICbeállítások üresek.
Ha le szeretné tiltani a Futtatás funkciót
collectstatica Django-alkalmazások létrehozásakor, állítsa be a beállítást aDISABLE_COLLECTSTATICkövetkezőretrue: .Az előzetes buildelési parancsok futtatásához állítsa be a
PRE_BUILD_COMMANDbeállítást úgy, hogy egy parancsot tartalmazzon, mint példáulecho Pre-build command, vagy a projekt gyökeréhez képest egy szkriptfájl elérési útját, mint példáulscripts/prebuild.sh. Minden parancsnak olyan elérési utakat kell használnia, amelyek relatívek a projekt gyökérmappájában.A buildelés utáni parancsok futtatásához állítsa be a
POST_BUILD_COMMANDbeállítást úgy, hogy tartalmazzon egy parancsot, példáulecho Post-build command, vagy a projekt gyökeréhez viszonyítottan egy szkriptfájl elérési útját, példáulscripts/postbuild.sh. Minden parancsnak a projekt gyökérmappához viszonyított elérési utakat kell használnia.
A buildautomatizálást testre szabó egyéb beállításokról további információt az Oryx-konfigurációban talál.
A buildelési és üzembehelyezési naplók eléréséről az Access üzembe helyezési naplóiban talál további információt.
További információ arról, hogy az App Service hogyan futtatja és fejleszti a Python-alkalmazásokat Linuxon, olvassa el , hogyan észleli és fejleszti az Oryx a Python-alkalmazásokat.
Feljegyzés
A PRE_BUILD_SCRIPT_PATH és a POST_BUILD_SCRIPT_PATH beállítások megegyeznek a PRE_BUILD_COMMAND és a POST_BUILD_COMMAND beállításokkal, és történeti célokra támogatottak.
Egy névvel ellátott SCM_DO_BUILD_DURING_DEPLOYMENTbeállítás, ha tartalmazza true vagy 1, elindít egy Oryx-buildet, amely az üzembe helyezés során történik. A beállítás a Git, az Azure CLI parancs trueés a Visual Studio Code használatával történő üzembe helyezéskor történikaz webapp up.
Feljegyzés
Mindig használjon relatív elérési utakat az összes összeállítás előtti és utáni szkriptben, mert az a buildtároló, amelyben az Oryx fut, eltér attól a futtatókörnyezeti tárolótól, amelyben az alkalmazás fut. Soha ne támaszkodjon az alkalmazásprojekt mappájának pontos elhelyezésére a tárolóban (például a webhely/wwwroot alatt).
Meglévő alkalmazások migrálása az Azure-ba
A meglévő webalkalmazásokat az alábbiak szerint helyezheti üzembe újra az Azure-ban:
Forrásadattár. Tartsa karban a forráskódot egy megfelelő adattárban, például a GitHubon, amely lehetővé teszi a folyamatos üzembe helyezés beállítását a folyamat későbbi szakaszában.
- A függőségi fájlnak (például requirements.txt, pyproject.toml vagy setup.py) az adattár gyökerénél kell lennie, ha azt szeretné, hogy az App Service automatikusan telepítse a szükséges csomagokat.
Adatbázis. Ha az alkalmazás adatbázistól függ, hozza létre a szükséges erőforrásokat az Azure-ban is.
App Service-erőforrások. Hozzon létre egy erőforráscsoportot, App Service-csomagot és App Service-webalkalmazást az alkalmazás üzemeltetéséhez. Ezeket az erőforrásokat egyszerűen létrehozhatja az Azure CLI parancs futtatásával
az webapp up. Vagy létrehozhat és üzembe helyezhet erőforrásokat a Flask, a Django vagy a FastAPI postgreSQL-oktatóanyagában látható módon. Cserélje le az erőforráscsoport, az App Service-csomag és a webalkalmazás nevét az alkalmazásnak megfelelő nevekre.Környezeti változók. Ha az alkalmazáshoz környezeti változók szükségesek, hozzon létre egyenértékű App Service-alkalmazásbeállításokat. Ezek az App Service-beállítások környezeti változókként jelennek meg a kódban az Access környezeti változóiban leírtak szerint.
- Az adatbázis-kapcsolatokat például gyakran ilyen beállításokkal kezelik, ahogyan az oktatóanyagban látható: Django-webalkalmazás üzembe helyezése PostgreSQL-lel – kapcsolatbeállítások ellenőrzése.
- Tekintse meg a termelési beállításokat Django-alkalmazásokhoz, hogy lássa a tipikus Django-alkalmazások konkrét beállításait.
Alkalmazás indítása. Tekintse át a cikk későbbi, tárolóindítási folyamatát ismertető szakaszt, amelyből megtudhatja, hogyan próbálja meg az App Service futtatni az alkalmazást. Az App Service alapértelmezés szerint a Gunicorn webkiszolgálót használja. A Gunicornnak képesnek kell lennie megtalálni az alkalmazásobjektumot vagy wsgi.py mappát. Szükség esetén testre szabhatja az indítási parancsot.
Folyamatos üzembe helyezés. Állítsa be a folyamatos üzembe helyezést a GitHub Actionsből, a Bitbucketből vagy az Azure-adattárakból a Folyamatos üzembe helyezés az Azure App Service-ben című cikkben leírtak szerint. Vagy állítsa be a folyamatos üzembe helyezést a helyi Gitből a Helyi Git-üzembe helyezés az Azure App Service-ben című cikkben leírtak szerint.
Egyéni műveletek. Az alkalmazást üzemeltető App Service-tárolón belüli műveletek ( például Django-adatbázisok áttelepítése) végrehajtásához SSH használatával csatlakozhat a tárolóhoz. A Django-adatbázisok migrálásának futtatására példa : Oktatóanyag: Django-webalkalmazás üzembe helyezése a PostgreSQL-lel.
- A folyamatos üzembe helyezés használatakor ezeket a műveleteket a buildelés utáni parancsok használatával hajthatja végre, a build automatizálásának testreszabása szakaszban leírtak szerint.
Ezeknek a lépéseknek a végrehajtásával végre kell tudnia véglegesíteni a módosításokat a forrásadattárban, és ezeket a frissítéseket automatikusan üzembe kell helyeznie az App Service-ben.
A Django-alkalmazások gyártási beállításai
Az olyan éles környezetben, mint az App Service, a Django-alkalmazásoknak a Django üzembe helyezési ellenőrzőlistájában szereplő útmutatást kell követnie.
Az alábbi táblázat az Azure-ra vonatkozó gyártási beállításokat ismerteti. Ezek a beállítások az alkalmazás setting.py fájljában vannak definiálva.
| Django beállítás | Utasítások az Azure-hoz |
|---|---|
SECRET_KEY |
Tárolja az értéket egy App Service-beállításban, az Access alkalmazásbeállításokban környezeti változókként leírtak szerint. Az értéket titkos kódként is tárolhatja az Azure Key Vaultban. |
DEBUG |
Hozzon létre egy DEBUG beállítást az App Service-ben a (0 ) értékkel false , majd töltse be az értéket környezeti változóként. A fejlesztési környezetben hozzon létre egy környezeti változót DEBUG a (1) értékkel true . |
ALLOWED_HOSTS |
Éles környezetben a Django megköveteli alkalmazás URL-címének szerepeltetését a ALLOWED_HOSTS settings.py tömbjében. Ezt az URL-címet futásidőben, a kód os.environ['WEBSITE_HOSTNAME']használatával lehet lekérni. Az App Service automatikusan beállítja a WEBSITE_HOSTNAME környezeti változót az alkalmazás URL-címére. |
DATABASES |
Adja meg az App Service-ben az adatbázis-kapcsolat beállításait, és töltse be őket környezeti változóként a DATABASES szótár feltöltéséhez. Az értékeket (különösen a felhasználónevet és a jelszót) Key Vault-titkos kulcsként is tárolhatja. |
Statikus fájlok kiszolgálása Django-alkalmazásokhoz
Ha a Django-webalkalmazás statikus előtérfájlokat tartalmaz, először kövesse a statikus fájlok django-dokumentációban való kezelésére vonatkozó utasításokat.
Az App Service esetében a következő módosításokat kell végeznie:
A Django
STATIC_URLésSTATIC_ROOTa változók dinamikus beállításához fontolja meg a környezeti változók (helyi fejlesztéshez) és alkalmazásbeállítások használatát (a felhőben való üzembe helyezéskor). Példa:STATIC_URL = os.environ.get("DJANGO_STATIC_URL", "/static/") STATIC_ROOT = os.environ.get("DJANGO_STATIC_ROOT", "./static/")DJANGO_STATIC_URLésDJANGO_STATIC_ROOTszükség szerint módosítható a helyi és a felhőbeli környezetekhez. Ha például a statikus fájlok buildelési folyamata egy névvel ellátottdjango-staticmappába helyezi őket, beállíthatjaDJANGO_STATIC_URL/django-static/, hogy ne használja az alapértelmezettet.Ha egy olyan előre összeállított szkripttel rendelkezik, amely statikus fájlokat hoz létre egy másik mappában, vegye fel a mappát a Django
STATICFILES_DIRSváltozóba, hogy a Djangocollectstaticfolyamata megtalálja őket. Ha például az előtérbeli mappában futyarn build, és a Yarn létrehoz egybuild/staticstatikus fájlokat tartalmazó mappát, az alábbi módon foglalja bele a mappát:FRONTEND_DIR = "path-to-frontend-folder" STATICFILES_DIRS = [os.path.join(FRONTEND_DIR, 'build', 'static')]Ebben a kódban egy olyan elérési utat hozunk létre, ahol egy olyan buildelési eszköz fut,
FRONTEND_DIRmint a Yarn. Ha szeretné, ismét használhat környezeti változót és alkalmazásbeállítást.Adja hozzá
whitenoisea requirements.txt fájlhoz. WhiteNoise (whitenoise.evans.io) egy Python-csomag, amely egyszerűvé teszi egy éles Django-alkalmazás számára a saját statikus fájljainak kiszolgálását. A WhiteNoise a DjangoSTATIC_ROOTváltozó által megadott mappában található fájlokat szolgálja ki.A settings.py fájlban adja hozzá a következő sort a WhiteNoise számára:
STATICFILES_STORAGE = ('whitenoise.storage.CompressedManifestStaticFilesStorage')Módosítsa a listákat úgy
MIDDLEWAREINSTALLED_APPS, hogy a WhiteNoise szerepeljen a listán:MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add WhiteNoise middleware after the security middleware. 'whitenoise.middleware.WhiteNoiseMiddleware', # Other values follow. ] INSTALLED_APPS = [ "whitenoise.runserver_nostatic", # Other values follow. ]
Statikus fájlok kiszolgálása Flask-alkalmazásokhoz
Ha a Flask-webalkalmazás statikus előtérfájlokat tartalmaz, először kövesse a Flask dokumentációjában található statikus fájlok kezelésére vonatkozó utasításokat. A statikus fájlok Flask-alkalmazásban való kiszolgálására példaként tekintse meg a Flask-mintaalkalmazást a GitHubon.
Ha statikus fájlokat szeretne közvetlenül az alkalmazás egyik útvonaláról kiszolgálni, használja a send_from_directory következő módszert:
from flask import send_from_directory
@app.route('/reports/<path:path>')
def send_report(path):
return send_from_directory('reports', path)
A tároló jellemzői
Az App Service-ben való üzembe helyezéskor a Python-alkalmazások az App Service Python GitHub-adattárban meghatározott Linux Docker-tárolón belül futnak. A rendszerképkonfigurációkat a verzióspecifikus könyvtárakban találja.
Ez a tároló a következő jellemzőkkel rendelkezik:
Az alkalmazásokat a Gunicorn WSGI HTTP-kiszolgáló futtatja a további argumentumokkal
--bind=0.0.0.0 --timeout 600.A Gunicorn konfigurációs beállításait az indítási parancs testreszabásával adhatja meg.
A webalkalmazás véletlen vagy szándékos DDOS-támadásokkal szembeni védelme érdekében a Gunicorn egy Nginx fordított proxy mögött fut, a Gunicorn üzembe helyezésében leírtak szerint.
Alapértelmezés szerint az alaptároló lemezképe csak a Flask webes keretrendszert tartalmazza, de a tároló támogatja a WSGI-kompatibilis és a Python 3.6-os és újabb verzióival kompatibilis keretrendszereket, például a Django-t.
Más csomagok, például a Django telepítéséhez hozzon létre egy requirements.txt, pyproject.toml vagy setup.py fájlt a projekt gyökerében, amely meghatározza a közvetlen függőségeket. Az App Service ezután automatikusan telepíti ezeket a függőségeket a projekt üzembe helyezésekor.
A függőségi fájlnak a projekt gyökérkönyvtárában kell lennie, különben a függőségek nem lesznek telepítve. Ha ez a fájl nincs a gyökérkönyvtárban, a buildelési folyamat a következő hibaüzenetet jelenti: "Nem található setup.py vagy requirements.txt; Nem futtatja a pip telepítését." Ha ezt a hibát tapasztalja, ellenőrizze a követelmények fájljának helyét.
Az App Service automatikusan meghatároz egy környezeti változót,
WEBSITE_HOSTNAMEamely tartalmazza a webalkalmazás URL-címét, példáulmsdocs-hello-world.azurewebsites.net. Emellett meghatározzaWEBSITE_SITE_NAMEaz alkalmazás nevét, példáulmsdocs-hello-world.Az npm és a Node.js a tárolóban vannak telepítve, így csomópontalapú buildelési eszközöket futtathat, például a Yarnt.
A tároló elindítási folyamata
Rendszerindítás során a Linux-tárolóban lévő App Service a következő lépéseket futtatja:
- Ha van ilyen, használjon egyéni indítási parancsot.
- Ellenőrizze, hogy létezik-e Django-alkalmazás, és ha észleli, indítsa el a Gunicorn alkalmazást.
- Ellenőrizze, hogy létezik-e Flask-alkalmazás, és ha észleli, indítsa el a Gunicorn alkalmazást.
- Ha más alkalmazás nem található, indítson el egy alapértelmezett alkalmazást, amely a tárolóba van beépítve.
Az alábbi szakaszok további részleteket nyújtanak az egyes lehetőségekről.
Django-alkalmazás
Django-alkalmazások esetén az App Service egy wsgi.py nevű fájlt keres az alkalmazáskódban, majd az alábbi paranccsal futtatja a Gunicorn parancsot:
# <module> is the name of the folder that contains wsgi.py
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi
Ha pontosabban szeretné szabályozni az indítási parancsot, használjon egyéni indítási parancsot, cserélje le <module> a wsgi.py tartalmazó mappa nevére, és adjon hozzá egy --chdir argumentumot, ha ez a modul nem szerepel a projekt gyökérkönyvtárában. Például, ha a wsgi.py a knboard/backend/config mappában található a projekt gyökerétől, használja az --chdir knboard/backend config.wsgi argumentumokat.
Az éles naplózás engedélyezéséhez adja hozzá a paramétereket és --access-logfile a --error-logfile paramétereket, ahogyan az egyéni indítási parancsokra vonatkozó példákban is látható.
Flask-alkalmazás
A Flask esetében az App Service egy application.py vagy app.py nevű fájlt keres, és az alábbiak szerint indítja el a Gunicornt:
# If application.py
gunicorn --bind=0.0.0.0 --timeout 600 application:app
# If app.py
gunicorn --bind=0.0.0.0 --timeout 600 app:app
Ha a fő alkalmazásmodul egy másik fájlban található, használjon másik nevet az alkalmazásobjektumnak. Ha más argumentumokat szeretne megadni a Gunicorn számára, használjon egyéni indítási parancsot.
Alapértelmezett viselkedés
Ha az App Service nem talál egyéni parancsot, Django-alkalmazást vagy Flask-alkalmazást, az alapértelmezett írásvédett alkalmazást futtatja az opt/defaultsite mappában, és az alábbi képen látható.
Ha telepítette a kódot, és továbbra is az alapértelmezett alkalmazást látja, olvassa el a Hibaelhárítás – Az alkalmazás nem jelenik meg című témakört.
Indítási parancs testreszabása
A tároló indítási viselkedését úgy szabályozhatja, hogy egyéni indítási parancsot vagy több parancsot ad meg egy indítási parancsfájlban. Az indítási parancsfájlok tetszőleges nevet használhatnak, például startup.sh, startup.cmd vagy startup.txt.
Minden parancsnak a projekt gyökérmappához viszonyított elérési utakat kell használnia.
Indítási parancs vagy parancsfájl megadása:
Azure Portal. Az alkalmazás lapjának bal oldali paneljének Beállítások területén válassza a Konfiguráció, majd az Általános beállítások lehetőséget. Az Indítási parancs mezőbe írja be az indítási parancs teljes szövegét vagy az indítási parancsfájl nevét. Ezután válassza a Mentés lehetőséget a módosítások alkalmazásához. Lásd: A Linux-tárolók általános beállításainak konfigurálása.
Azure parancssori felület (CLI). Az indítási parancs vagy fájl beállításához használja az az webapp config set parancsot a
--startup-fileparaméterrel:az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"Cserélje le
<custom-command>az indítási parancs teljes szövegére vagy az indítási parancsfájl nevére.
Az App Service figyelmen kívül hagyja az egyéni indítási parancsok vagy fájlok feldolgozásakor előforduló hibákat, majd django- és Flask-alkalmazásokat keresve folytatja az indítási folyamatot. Ha nem látja a várt viselkedést, ellenőrizze, hogy az indítási parancs vagy a fájl hibamentes-e, és hogy egy indítási parancsfájl van-e üzembe helyezve az App Service-ben az alkalmazáskóddal együtt. További információt a diagnosztikai naplókban is találhat. Az azure portalon pedig megtekintheti az alkalmazás Diagnosztizálás és problémamegoldás lapját.
Példa indítási parancsok
Gunicorn-argumentumok hozzáadva: Az alábbi példa hozzáadja az
--workers=4argumentumot egy Gunicorn parancssorhoz django-alkalmazás indításához:# <module-path> is the relative path to the folder that contains the module # that contains wsgi.py. <module> is the name of the folder that contains wsgi.py. gunicorn --bind=0.0.0.0 --timeout 600 --workers=4 --chdir <module_path> <module>.wsgiTovábbi információért lásd a Gunicorn futtatása című részt. Ha automatikus skálázási szabályokat használ a webalkalmazás vertikális fel- és leskálázásához, az indítási parancs környezeti változójának használatával
NUM_CORESdinamikusan kell beállítania a Gunicorn-feldolgozók számát is. Például:--workers $((($NUM_CORES*2)+1)). A Gunicorn-feldolgozók javasolt számának beállításával kapcsolatos további információkért lásd a Gunicorn gyakori kérdéseit.A Django számára az éles naplózás engedélyezése: Adja hozzá a és
--access-logfile '-'argumentumokat a parancssorhoz.# '-' for the log files means stdout for --access-logfile and stderr for --error-logfile. gunicorn --bind=0.0.0.0 --timeout 600 --workers=4 --chdir <module_path> <module>.wsgi --access-logfile '-' --error-logfile '-'Ezek a naplók megjelennek az App Service-naplóstreamben.
További információ: Gunicorn-naplózás.
Egyéni Flask főmodul: Az App Service alapértelmezés szerint feltételezi, hogy a Flask-alkalmazás fő modulja application.py vagy app.py. Ha a fő modul más nevet használ, testre kell szabnia az indítási parancsot. Ha például rendelkezik egy Flask-alkalmazással, amelynek fő modulja hello.py , és a Flask-alkalmazás objektuma a fájlban myapp néven van elnevezve, ez a parancs:
gunicorn --bind=0.0.0.0 --timeout 600 hello:myappHa a fő modul egy almappában( például a webhelyen) található, adja meg azt a mappát az
--chdirargumentummal:gunicorn --bind=0.0.0.0 --timeout 600 --chdir website hello:myappNem Gunicorn-kiszolgáló használata: Másik webkiszolgáló( például aiohttp) használatához használja a megfelelő parancsot indítási parancsként vagy az indítási parancsfájlban:
python3.7 -m aiohttp.web -H localhost -P 8080 package.module:init_func
Alkalmazásbeállítások elérése környezeti változókként
Az alkalmazásbeállítások olyan értékek, amelyek a felhőben, kifejezetten az alkalmazáshoz vannak tárolva, az alkalmazásbeállítások konfigurálása című szakaszban leírtak szerint. Ezek a beállítások környezeti változókként érhetők el az alkalmazás kódjához, és a standard os.environ-mintán keresztül érhetők el.
Ha például létrehoz egy alkalmazásbeállítást, DATABASE_SERVERaz alábbi kód lekéri a beállítás értékét:
db_server = os.environ['DATABASE_SERVER']
HTTPS munkamenet észlelése
Az App Service-ben a TLS/SSL-leállítás a hálózati terheléselosztóknál történik, így minden HTTPS-kérés titkosítatlan HTTP-kérésként éri el az alkalmazást. Ha az alkalmazáslogikának ellenőriznie kell, hogy a felhasználói kérések titkosítva vannak-e, vizsgálja meg a fejlécet X-Forwarded-Proto :
if 'X-Forwarded-Proto' in request.headers and request.headers['X-Forwarded-Proto'] == 'https':
# Do something when HTTPS is used.
A népszerű webes keretrendszerek lehetővé teszik a szabványos alkalmazásminta információinak X-Forwarded-* elérését. A Django-ban például SECURE_PROXY_SSL_HEADER konfigurálhatja a Django-t a X-Forwarded-Proto fejléc használatára.
Diagnosztikai naplók elérése
A tárolón belülről létrehozott konzolnaplókhoz hozzáférhet.
A tárolónaplózás bekapcsolásához futtassa a következő parancsot:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Cserélje le a <app-name> és a <resource-group-name> értékeket a webalkalmazásnak megfelelő nevekre.
A tárolónaplózás bekapcsolása után futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Ha a konzolnaplók nem jelennek meg azonnal, ellenőrizze újra 30 másodpercen belül.
Ha bármikor le szeretné állítani a naplóstreamelést, használja a Ctrl+C billentyűparancsot.
Ha az Azure Portalon szeretne naplókat elérni, válassza az alkalmazás bal oldali ablaktábláján a Naplóstream figyelése> lehetőséget.
Üzembehelyezési naplók elérése
A kód üzembe helyezésekor az App Service végrehajtja a korábban ismertetett buildelési folyamatot a Build automatizálásának testreszabása szakaszban. Mivel a build a saját tárolójában fut, a buildnaplókat a rendszer az alkalmazás diagnosztikai naplóitól elkülönítve tárolja.
Az üzembehelyezési naplók eléréséhez kövesse az alábbi lépéseket:
- A webalkalmazás Azure Portal lapján válassza az Üzembehelyezési>központ lehetőséget a bal oldali panelen.
- A Naplók lapon válassza ki a legutóbbi véglegesítés véglegesítési azonosítóját.
- A megjelenő Napló részletei lapon válassza az Oryx-build mellett megjelenő Naplók megjelenítése hivatkozást.
Ezekben a naplókban megjelennek a buildelési problémák, például a függőségfájl helytelen függőségei és az összeállítás előtti vagy a build utáni szkriptekben előforduló hibák. Hibák akkor is megjelennek, ha a függőségi fájl nem található a projekt gyökérmappájában.
SSH-munkamenet megnyitása böngészőben
Ha közvetlen SSH-munkamenetet szeretne megnyitni a tárolóval, az alkalmazásnak futnia kell.
Használja az az webapp ssh parancsot.
Ha nincs hitelesítve, a csatlakozáshoz hitelesítenie kell az Azure-előfizetésével. Hitelesítéskor megjelenik egy böngészőbeli rendszerhéj, ahol parancsokat futtathat a tárolóban.
Feljegyzés
A címtáron kívül /home végzett módosítások magában a tárolóban vannak tárolva, és nem maradnak fenn az alkalmazás újraindítása után.
Ha távoli SSH-munkamenetet szeretne megnyitni a helyi gépről, tekintse meg az SSH-munkamenet távoli rendszerhéjból történő megnyitásával foglalkozó témakört.
Ha sikeresen csatlakozik az SSH-munkamenethez, az ablak alján az "SSH-KAPCSOLAT LÉTREJÖTT" üzenetnek kell megjelennie. Ha olyan hibaüzenetek jelennek meg, mint a "SSH_CONNECTION_CLOSED" vagy egy üzenet, amely szerint a tároló újraindul, előfordulhat, hogy egy hiba megakadályozza az alkalmazástároló elindítását. A lehetséges problémák kivizsgálásával kapcsolatos információkért tekintse meg a hibaelhárítást .
URL-átírások
Ha Python-alkalmazásokat helyez üzembe a Linuxhoz készült App Service-ben, előfordulhat, hogy az alkalmazáson belül kell kezelnie az URL-átírásokat. Ez a módszer különösen hasznos annak biztosítására, hogy bizonyos URL-minták a külső webkiszolgáló konfigurációinak használata nélkül a megfelelő végpontokra legyenek átirányítva. A Flask-alkalmazások esetében ehhez URL-processzorokat és egyéni köztes szoftvereket használhat. Django-alkalmazásokban az URL-diszpécser lehetővé teszi az URL-átírások hatékony kezelését.
Hibaelhárítás
A hibaelhárítás első lépése általában az App Service-diagnosztika használata:
- A webalkalmazás Azure Portal lapján válassza a Bal oldali panelen a Problémák diagnosztizálása és megoldása lehetőséget.
- Válassza a Rendelkezésre állás és a Teljesítmény lehetőséget.
- Vizsgálja meg az alkalmazásnaplók, a tárolóösszeomlás és a tárolóproblémák adatait, ahol a leggyakoribb problémák jelennek meg.
Ezután vizsgálja meg az üzembe helyezési naplókat és az alkalmazásnaplókat az esetleges hibaüzenetek esetében. Ezek a naplók gyakran azonosítják azokat a problémákat, amelyek megakadályozhatják az alkalmazások üzembe helyezését vagy az alkalmazások indítását. A buildelés például meghiúsulhat, ha a függőségi fájl nem található a projekt gyökérmappájában.
A következő szakaszok konkrét problémákhoz nyújtanak útmutatást.
- Az alkalmazás nem jelenik meg – az alapértelmezett alkalmazás jelenik meg
- Az alkalmazás nem jelenik meg – "a szolgáltatás nem érhető el" üzenet
- Nem található setup.py vagy requirements.txt
- ModuleNotFoundError indításkor
- Az adatbázis zárolva van
- Beíráskor a jelszavak nem jelennek meg az SSH-munkamenetben
- Úgy tűnik, hogy az SSH-munkamenet parancsai le lettek vágva
- A statikus objektumok nem jelennek meg Django-alkalmazásban
- Végzetes SSL-kapcsolat szükséges
Az alkalmazás nem jelenik meg
Saját alkalmazáskódjának telepítése után megjelenik az alapértelmezett alkalmazás. Az alapértelmezett alkalmazás azért jelenik meg, mert nem telepítette az alkalmazáskódot az App Service-ben, vagy mert az App Service nem találta meg az alkalmazáskódot, és ehelyett az alapértelmezett alkalmazást futtatta.
Indítsa újra az alkalmazást, várjon 20 másodpercet, majd ellenőrizze újra az alkalmazást.
Az SSH használatával közvetlenül az App Service-tárolóhoz csatlakozhat, és ellenőrizheti, hogy a fájlok a webhely/wwwroot területen találhatók-e. Ha a fájlok nem léteznek, hajtsa végre a következő lépéseket:
- Hozzon létre egy olyan alkalmazásbeállítást
SCM_DO_BUILD_DURING_DEPLOYMENT, amelynek értéke1a következő: újra üzembe helyezi a kódot, várjon néhány percet, majd próbálja meg újból elérni az alkalmazást. További információ az alkalmazásbeállítások létrehozásáról: App Service-alkalmazás konfigurálása az Azure Portalon. - Tekintse át az üzembe helyezési folyamatot, ellenőrizze az üzembehelyezési naplókat, javítsa ki a hibákat, és telepítse újra az alkalmazást.
- Hozzon létre egy olyan alkalmazásbeállítást
Ha a fájlok léteznek, az App Service nem tudta azonosítani az indítási fájlt. Győződjön meg arról, hogy az alkalmazás úgy van felépítve, ahogy az App Service elvárja a Django vagy a Flask esetében, vagy használjon egyéni indítási parancsot.
A böngészőben megjelenik a "Szolgáltatás nem érhető el" üzenet. A böngésző időtúllépéssel várta az App Service válaszát. Ez azt jelzi, hogy az App Service elindította a Gunicorn-kiszolgálót, de maga az alkalmazás nem indult el. Ez a feltétel azt jelezheti, hogy a Gunicorn argumentumok helytelenek, vagy hiba történt az alkalmazáskódban.
Frissítse a böngészőt, különösen akkor, ha az App Service-csomag legalacsonyabb tarifacsomagjait használja. Az alkalmazás indítása hosszabb időt vehet igénybe, ha például ingyenes szinteket használ, és a böngésző frissítése után válaszkész lesz.
Ellenőrizze, hogy az alkalmazás úgy van-e strukturálva, ahogyan az App Service elvárja a Django vagy a Flask esetében, vagy használjon egyéni indítási parancsot.
Vizsgálja meg az alkalmazásnapló-adatfolyamot hibaüzenetek esetén. A naplók megjelenítik az alkalmazáskód hibáit.
Nem található setup.py vagy requirements.txt
A naplóstream a következőt jeleníti meg: "Nem található setup.py vagy requirements.txt; Nem futtatja a pip telepítést." Az Oryx buildfolyamata nem találta a requirements.txt, pyproject.toml vagy setup.py fájlt.
- Csatlakozzon a webalkalmazás tárolójához SSH-n keresztül, és győződjön meg arról, hogy a függőségi fájl neve helyes, és közvetlenül a webhely/wwwroot alatt található. Ha nem létezik, győződjön meg arról, hogy a fájl létezik az adattárban, és szerepel az üzembe helyezésben. Ha egy külön mappában található, helyezze át a gyökérmappába.
ModuleNotFoundError az alkalmazás indításakor
Ha hasonló ModuleNotFoundError: No module named 'example'hibaüzenetet lát, a Python nem talált egy vagy több modult az alkalmazás indításakor. Ez a hiba leggyakrabban akkor fordul elő, ha a virtuális környezetet a kóddal együtt telepíti. A virtuális környezetek nem hordozhatóak, ezért a virtuális környezetet nem szabad üzembe helyezni az alkalmazáskóddal. Ehelyett hagyja, hogy az Oryx hozzon létre egy virtuális környezetet, és az alkalmazásbeállítás SCM_DO_BUILD_DURING_DEPLOYMENT létrehozásával és annak 1 értékre állításával telepítse a csomagokat a webalkalmazásba. Ez a beállítás arra kényszeríti az Oryxot, hogy az App Service-ben való üzembe helyezéskor telepítse a csomagokat. További információ: ez a cikk a virtuális környezet hordozhatóságáról.
Az adatbázis zárolva van
Amikor egy Django-alkalmazással próbál adatbázis-migrálásokat futtatni, az "sqlite3" jelenhet meg. OperationalError: az adatbázis zárolva van." A hiba azt jelzi, hogy az alkalmazás egy SQLite-adatbázist használ, amelyhez a Django alapértelmezés szerint konfigurálva van, nem pedig egy felhőalapú adatbázist, például az Azure Database for PostgreSQL-t.
Ellenőrizze az DATABASES alkalmazás settings.py fájljában lévő változót, hogy az alkalmazás SQLite helyett felhőalapú adatbázist használ-e.
Ha ezt a hibát a következő oktatóanyagban szereplő példában tapasztalja: Django-webalkalmazás üzembe helyezése a PostgreSQL-lel, ellenőrizze, hogy elvégezte-e a kapcsolatbeállítások ellenőrzése című szakasz lépéseit.
Egyéb problémák
Beíráskor a jelszavak nem jelennek meg az SSH-munkamenetben: Biztonsági okokból az SSH-munkamenet elrejti a jelszót a beíráskor. A karakterek rögzítése azonban folyamatban van, ezért írja be a jelszót a szokásos módon, és amikor elkészült, válassza az Enter billentyűt .
Úgy tűnik, hogy az SSH-munkamenet parancsai le vannak vágva: Lehet, hogy a szerkesztő nem tördel szavakat, de ennek ellenére is helyesen kell futniuk.
A statikus objektumok nem jelennek meg a Django-alkalmazásokban: Győződjön meg arról, hogy engedélyezte a WhiteNoise modult.
A következő üzenet jelenik meg: "Végzetes SSL-kapcsolat szükséges": Ellenőrizze az erőforrások (például adatbázisok) alkalmazáson belüli eléréséhez használt felhasználóneveket és jelszavakat.