Konfigurace aplikace v Pythonu pro Linux pro službu Aplikace Azure Service
Tento článek popisuje, jak služba Aplikace Azure Service spouští aplikace Pythonu, jak můžete migrovat existující aplikace do Azure a jak můžete přizpůsobit chování služby App Service, když potřebujete. Aplikace v Pythonu musí být nasazené se všemi požadovanými moduly pip .
Nasazovací modul služby App Service automaticky aktivuje virtuální prostředí a spustí pip install -r requirements.txt
se za vás při nasazení úložiště Git nebo při nasazení balíčku ZIP s povolenou automatizací sestavení.
Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře v Pythonu, kteří používají integrovaný kontejner Linuxu ve službě App Service. Pokud jste nikdy nepoužívali službu Aplikace Azure Service, nejprve postupujte podle kurzu Rychlý start k Pythonu a Pythonu s PostgreSQL.
Ke konfiguraci můžete použít Azure Portal nebo Azure CLI:
Na webu Azure Portal použijte stránku Konfigurace nastavení> aplikace, jak je popsáno v tématu Konfigurace aplikace App Service na webu Azure Portal.
Azure CLI: Máte dvě možnosti.
- Spouštění příkazů v Azure Cloud Shellu
- Spusťte příkazy místně tak, že nainstalujete nejnovější verzi Azure CLI a pak se přihlásíte k Azure pomocí příkazu az login.
Poznámka:
Linux je jedinou možností operačního systému pro spouštění aplikací v Pythonu ve službě App Service. Python ve Windows se už nepodporuje. Můžete si ale vytvořit vlastní image kontejneru Windows a spustit ji ve službě App Service. Další informace najdete v tématu věnovaném použití vlastní image Dockeru.
Konfigurace verze Pythonu
Azure Portal: Na stránce Konfigurace použijte kartu Obecné nastavení, jak je popsáno v části Konfigurace obecných nastavení pro kontejnery Linuxu.
Azure CLI:
Zobrazení aktuální verze Pythonu pomocí příkazu az webapp config show:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Nahraďte
<resource-group-name>
názvy vhodné pro vaši webovou aplikaci a<app-name>
nahraďte je názvy.Nastavení verze Pythonu pomocí az webapp config set
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PYTHON|3.11"
Zobrazení všech verzí Pythonu podporovaných ve službě Aplikace Azure pomocí příkazu az webapp list-runtimes:
az webapp list-runtimes --os linux | grep PYTHON
Nepodporovanou verzi Pythonu můžete spustit tak, že místo toho vytvoříte vlastní image kontejneru. Další informace najdete v tématu věnovaném použití vlastní image Dockeru.
Přizpůsobení automatizace sestavení
Když nasadíte aplikaci, provede systém sestavení služby App Service s názvem Oryx následující kroky, pokud je nastavení SCM_DO_BUILD_DURING_DEPLOYMENT
aplikace nastavené na 1
:
Pokud je tento krok určený nastavením, spusťte vlastní skript před sestavením
PRE_BUILD_COMMAND
. (Skript sám může spouštět jiné skripty Pythonu a Node.js, příkazy pip a npm a nástroje založené na uzlech, jako jsou napříkladyarn install
yarn ayarn build
.)Spusťte
pip install -r requirements.txt
. Soubor requirements.txt musí být v kořenové složce projektu. Jinak proces sestavení hlásí chybu: "Nepodařilo se najít setup.py nebo requirements.txt; Nespouštět instalaci pipu."Pokud se manage.py nachází v kořenovém adresáři úložiště (označující aplikaci Django), spusťte manage.py collectstatic. Pokud je
true
aleDISABLE_COLLECTSTATIC
toto nastavení , tento krok se přeskočí.Pokud je tento
POST_BUILD_COMMAND
krok určený nastavením, spusťte vlastní skript po sestavení. (Skript může znovu spouštět další skripty Pythonu a Node.js, příkazy pip a npm a nástroje založené na uzlech.)
Ve výchozím nastavení jsou hodnoty PRE_BUILD_COMMAND
, POST_BUILD_COMMAND
a DISABLE_COLLECTSTATIC
nastavení prázdné.
Pokud chcete zakázat spouštění collectstatic při sestavování aplikací Django, nastavte
DISABLE_COLLECTSTATIC
nastavení natrue
hodnotu .Pokud chcete spustit příkazy před sestavením, nastavte
PRE_BUILD_COMMAND
nastavení tak, aby obsahovalo příkaz, napříkladecho Pre-build command
nebo cestu k souboru skriptu vzhledem k kořenovému adresáři projektu, napříkladscripts/prebuild.sh
. Všechny příkazy musí používat relativní cesty ke kořenové složce projektu.Pokud chcete spustit příkazy po sestavení, nastavte
POST_BUILD_COMMAND
nastavení tak, aby obsahovalo příkaz, napříkladecho Post-build command
nebo cestu k souboru skriptu vzhledem k kořenovému adresáři projektu, napříkladscripts/postbuild.sh
. Všechny příkazy musí používat relativní cesty ke kořenové složce projektu.
Další nastavení, která přizpůsobí automatizaci sestavení, najdete v tématu Konfigurace Oryxu.
Přístup k protokolům sestavení a nasazení najdete v tématu Protokoly nasazení accessu.
Další informace o tom, jak App Service běží a vytváří aplikace v Pythonu v Linuxu, najdete v tématu Jak Oryx rozpozná a sestaví aplikace v Pythonu.
Poznámka:
Nastavení PRE_BUILD_SCRIPT_PATH
jsou POST_BUILD_SCRIPT_PATH
identické PRE_BUILD_COMMAND
POST_BUILD_COMMAND
a podporují se pro starší účely.
Nastavení s názvem SCM_DO_BUILD_DURING_DEPLOYMENT
, pokud obsahuje true
nebo 1
, aktivuje sestavení Oryx, které se stane během nasazení. Toto nastavení se true
provádí při nasazování pomocí Gitu, příkazu az webapp up
Azure CLI a editoru Visual Studio Code.
Poznámka:
Vždy používejte relativní cesty ve všech skriptech před sestavením a po sestavení, protože kontejner sestavení, ve kterém běží Oryx, se liší od kontejneru modulu runtime, ve kterém aplikace běží. Nikdy nespoléhejte na přesné umístění složky projektu aplikace v rámci kontejneru (například že je umístěná pod webem nebo wwwroot).
Migrace existujících aplikací do Azure
Existující webové aplikace je možné do Azure znovu nasadit následujícím způsobem:
Zdrojové úložiště: Udržujte zdrojový kód v vhodném úložišti, jako je GitHub, což vám umožní později v tomto procesu nastavit průběžné nasazování.
- Aby služba App Service automaticky nainstalovala potřebné balíčky, musí být váš soubor requirements.txt v kořenovém adresáři úložiště.
Databáze: Pokud vaše aplikace závisí na databázi, vytvořte potřebné prostředky i v Azure.
Prostředky služby App Service: Vytvořte skupinu prostředků, plán služby App Service a webovou aplikaci App Service pro hostování vaší aplikace. Můžete to snadno provést spuštěním příkazu
az webapp up
Azure CLI . Nebo můžete vytvářet a nasazovat prostředky, jak je znázorněno v kurzu: Nasazení webové aplikace v Pythonu (Django nebo Flask) pomocí PostgreSQL. Nahraďte názvy skupiny prostředků, plánu služby App Service a webové aplikace, aby byly vhodnější pro vaši aplikaci.Proměnné prostředí: Pokud vaše aplikace vyžaduje nějaké proměnné prostředí, vytvořte ekvivalentní nastavení aplikace služby App Service. Tato nastavení služby App Service se vašemu kódu zobrazují jako proměnné prostředí, jak je popsáno v proměnných prostředí accessu.
- Například připojení k databázi se často spravují prostřednictvím takových nastavení, jak je znázorněno v kurzu: Nasazení webové aplikace Django s PostgreSQL – ověření nastavení připojení.
- Konkrétní nastavení pro typické aplikace Django najdete v části Produkční nastavení pro aplikace Django.
Spuštění aplikace: Přečtěte si část Proces spuštění kontejneru dále v tomto článku a zjistěte, jak se app Service pokouší spustit vaši aplikaci. Služba App Service ve výchozím nastavení používá webový server Gunicorn, který musí být schopen najít objekt aplikace nebo wsgi.py složku. Pokud potřebujete, můžete přizpůsobit spouštěcí příkaz.
Průběžné nasazování: Nastavte průběžné nasazování z GitHub Actions, Bitbucketu nebo Azure Repos, jak je popsáno v článku Průběžné nasazování do služby Aplikace Azure Service. Nebo nastavte průběžné nasazování z místního Gitu, jak je popsáno v článku Místní nasazení Gitu do služby Aplikace Azure Service.
Vlastní akce: Pokud chcete provádět akce v kontejneru služby App Service, který hostuje vaši aplikaci, jako jsou migrace databází Django, můžete se ke kontejneru připojit přes SSH. Příklad spuštění migrací databází Django najdete v tématu Kurz: Nasazení webové aplikace Django s PostgreSQL – generování schématu databáze.
- Při použití průběžného nasazování můžete tyto akce provádět pomocí příkazů po sestavení, jak je popsáno výše v části Přizpůsobení automatizace sestavení.
Po dokončení těchtokrokůch
Produkční nastavení pro aplikace Django
V produkčním prostředí, jako je služba Aplikace Azure Service, by aplikace Django měly postupovat podle kontrolního seznamu nasazení Django.
Následující tabulka popisuje produkční nastavení, která jsou relevantní pro Azure. Tato nastavení jsou definována v souboru setting.py aplikace.
Nastavení Django | Pokyny pro Azure |
---|---|
SECRET_KEY |
Uložte hodnotu v nastavení služby App Service, jak je popsáno v nastavení aplikace pro Access, jako proměnné prostředí. Hodnotu můžete uložit jako tajný klíč ve službě Azure Key Vault. |
DEBUG |
Vytvořte DEBUG nastavení ve službě App Service s hodnotou 0 (false) a pak načtěte hodnotu jako proměnnou prostředí. Ve vývojovém prostředí vytvořte proměnnou DEBUG prostředí s hodnotou 1 (true). |
ALLOWED_HOSTS |
V produkčním prostředí vyžaduje Django, abyste do pole settings.py zahrnuli adresu URL ALLOWED_HOSTS aplikace. Tuto adresu URL můžete načíst za běhu pomocí kódu os.environ['WEBSITE_HOSTNAME'] . App Service automaticky nastaví proměnnou WEBSITE_HOSTNAME prostředí na adresu URL aplikace. |
DATABASES |
Definujte nastavení ve službě App Service pro připojení k databázi a načtěte je jako proměnné prostředí pro naplnění slovníku DATABASES . Hodnoty (zejména uživatelské jméno a heslo) můžete uložit jako tajné kódy služby Azure Key Vault. |
Obsluha statických souborů pro aplikace Django
Pokud vaše webová aplikace Django obsahuje statické front-endové soubory, nejprve postupujte podle pokynů ke správě statických souborů v dokumentaci Django.
V případě služby App Service pak provedete následující úpravy:
Zvažte použití proměnných prostředí (pro místní vývoj) a nastavení aplikací (při nasazování do cloudu) k dynamickému nastavení Django
STATIC_URL
aSTATIC_ROOT
proměnných. Příklad:STATIC_URL = os.environ.get("DJANGO_STATIC_URL", "/static/") STATIC_ROOT = os.environ.get("DJANGO_STATIC_ROOT", "./static/")
DJANGO_STATIC_URL
aDJANGO_STATIC_ROOT
podle potřeby je možné změnit pro vaše místní a cloudová prostředí. Pokud je například proces sestavení pro statické soubory umístí do složky s názvemdjango-static
, můžete nastavitDJANGO_STATIC_URL
, aby/django-static/
se zabránilo použití výchozího nastavení.Pokud máte skript před sestavením, který generuje statické soubory v jiné složce, zahrňte tuto složku do proměnné Django
STATICFILES_DIRS
, aby je proces Djangocollectstatic
najde. Pokud například spustíteyarn build
front-endovou složku a yarn vygenerujebuild/static
složku obsahující statické soubory, zahrňte tuto složku následujícím způsobem:FRONTEND_DIR = "path-to-frontend-folder" STATICFILES_DIRS = [os.path.join(FRONTEND_DIR, 'build', 'static')]
Tady se používá k sestavení cesty k místu, kde se spouští nástroj sestavení,
FRONTEND_DIR
jako je například yarn. Podle potřeby můžete znovu použít proměnnou prostředí a nastavení aplikace.Přidejte
whitenoise
do souboru requirements.txt . WhiteNoise (whitenoise.evans.io) je balíček Pythonu, který usnadňuje obsluhu vlastních statických souborů v produkční aplikaci Django. WhiteNoise konkrétně obsluhuje soubory, které jsou nalezeny ve složce určené proměnnou DjangoSTATIC_ROOT
.Do souboru settings.py přidejte následující řádek pro WhiteNoise:
STATICFILES_STORAGE = ('whitenoise.storage.CompressedManifestStaticFilesStorage')
Upravte
MIDDLEWARE
také seznamy takINSTALLED_APPS
, aby zahrnovaly WhiteNoise: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 ]
Obsluha statických souborů pro aplikace Flask
Pokud vaše webová aplikace Flask obsahuje statické front-endové soubory, nejprve postupujte podle pokynů ke správě statických souborů v dokumentaci k Flasku. Příklad obsluhy statických souborů v aplikaci Flask najdete v ukázkové aplikaci Flask na GitHubu.
Pokud chcete obsluhovat statické soubory přímo ze trasy ve vaší aplikaci, můžete použít tuto metodu send_from_directory
:
from flask import send_from_directory
@app.route('/reports/<path:path>')
def send_report(path):
return send_from_directory('reports', path)
Vlastnosti kontejneru
Po nasazení do služby App Service se aplikace Pythonu spouštějí v kontejneru Dockeru pro Linux, který je definovaný v úložišti GitHub v Pythonu služby App Service. Konfigurace imagí najdete v adresářích specifických pro verzi.
Tento kontejner má následující vlastnosti:
Aplikace se spouští pomocí Serveru HTTP Gunicorn WSGI s použitím dalších argumentů
--bind=0.0.0.0 --timeout 600
.Nastavení konfigurace pro Gunicorn můžete zadat přizpůsobením spouštěcího příkazu.
Kvůli ochraně webové aplikace před náhodnými nebo úmyslnými útoky DDOS se Gunicorn spouští za reverzním proxy serverem Nginx, jak je popsáno v tématu Nasazení Gunicornu.
Ve výchozím nastavení obsahuje základní image kontejneru pouze webovou architekturu Flask, ale kontejner podporuje další architektury, které jsou kompatibilní s Pythonem 3.6 nebo novějším, například Django.
Pokud chcete nainstalovat další balíčky, například Django, vytvořte v kořenovém adresáři projektu soubor requirements.txt , který určuje přímé závislosti. App Service pak tyto závislosti nainstaluje automaticky při nasazení projektu.
Aby bylo možné nainstalovat závislosti, musí být soubor requirements.txt v kořenovém adresáři projektu. Jinak proces sestavení hlásí chybu: "Nepodařilo se najít setup.py nebo requirements.txt; Nespouštět instalaci pipu." Pokud k této chybě dojde, zkontrolujte umístění souboru požadavků.
App Service automaticky definuje proměnnou prostředí s názvem
WEBSITE_HOSTNAME
s adresou URL webové aplikace, napříkladmsdocs-hello-world.azurewebsites.net
. Definuje takéWEBSITE_SITE_NAME
název vaší aplikace, napříkladmsdocs-hello-world
.Npm a Node.js jsou nainstalované v kontejneru, takže můžete spouštět nástroje sestavení založené na uzlu, jako je například yarn.
Proces spuštění kontejneru
V průběhu spuštění služba App Service v kontejneru Linuxu spustí následující kroky:
- Pokud je k dispozici, použijte vlastní spouštěcí příkaz.
- Zkontrolujte existenci aplikace Django a pokud se zjistí, spusťte pro ni Gunicorn.
- Zkontrolujte existenci aplikace Flask a pokud se zjistí, spusťte pro ni Gunicorn.
- Pokud se žádná další aplikace nenajde, následuje spuštění výchozí aplikace sestavené do kontejneru.
Následující části obsahují další podrobnosti o jednotlivých možnostech.
Aplikace Django
Služba App Service hledá pro aplikace Django soubory se jménem wsgi.py
v kódu aplikace. Pak spustí server Gunicorn s použitím následujícího příkazu:
# <module> is the name of the folder that contains wsgi.py
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi
Pokud chcete konkrétnější kontrolu nad spouštěcím příkazem, použijte vlastní spouštěcí příkaz, nahraďte <module>
názvem složky, která obsahuje wsgi.py, a přidejte --chdir
argument, pokud tento modul není v kořenovém adresáři projektu. Pokud se například wsgi.py nachází pod knboard, back-end/config z kořenového adresáře projektu, použijte argumenty --chdir knboard/backend config.wsgi
.
Pokud chcete povolit protokolování v produkčním prostředí, přidejte parametry --access-logfile
a --error-logfile
parametry, jak je znázorněno v příkladech pro vlastní spouštěcí příkazy.
Aplikace Flask
App Service pro Flask vyhledá soubor s názvem application.py nebo app.py a spustí Gunicorn následujícím způsobem:
# 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
Pokud je hlavní modul aplikace obsažený v jiném souboru, použijte jiný název objektu aplikace. Pokud chcete gunicornu poskytnout další argumenty, použijte vlastní spouštěcí příkaz.
Výchozí chování
Pokud App Service nenajde vlastní příkaz, aplikaci Django nebo aplikaci Flask, spustí výchozí aplikaci jen pro čtení, která se nachází ve složce opt/defaultsite a zobrazí se na následujícím obrázku.
Pokud jste nasadili kód a stále se zobrazuje výchozí aplikace, přečtěte si téma Řešení potíží – Aplikace se nezobrazí.
Přizpůsobení spouštěcího příkazu
Chování kontejneru při spuštění můžete řídit zadáním vlastního spouštěcího příkazu nebo několika příkazů v souboru spouštěcího příkazu. Spouštěcí soubor příkazu může použít jakýkoli název, například startup.sh, startup.cmd, startup.txt atd.
Všechny příkazy musí používat relativní cesty ke kořenové složce projektu.
Zadání spouštěcího příkazu nebo souboru příkazu:
Azure Portal: Vyberte stránku Konfigurace aplikace a pak vyberte Obecné nastavení. Do pole Spouštěcí příkaz umístěte celý text spouštěcího příkazu nebo název spouštěcího souboru příkazu. Potom vyberte Uložit , aby se změny použily. Viz Konfigurace obecných nastavení pro kontejnery Linuxu.
Azure CLI: Pomocí příkazu az webapp config set s parametrem
--startup-file
nastavte spouštěcí příkaz nebo soubor:az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Nahraďte
<custom-command>
úplným textem spouštěcího příkazu nebo názvem spouštěcího souboru příkazu.
App Service ignoruje všechny chyby, ke kterým dochází při zpracování vlastního spouštěcího příkazu nebo souboru, a pak pokračuje v procesu spuštění hledáním aplikací Django a Flask. Pokud očekávané chování nevidíte, zkontrolujte, jestli je spouštěcí příkaz nebo soubor bez chyb a že se soubor spouštěcího příkazu nasadí do služby App Service spolu s kódem vaší aplikace. Další informace najdete také v diagnostických protokolech . Na webu Azure Portal se také podívejte na stránku Diagnostika a řešení problémů aplikace.
Příklady spouštěcích příkazů
Přidání argumentů Gunicorn: Následující příklad přidá
--workers=4
argument do příkazového řádku Gunicorn pro spuštění aplikace Django:# <module-path> is the relative path to the folder that contains the module # that contains wsgi.py; <module> is the name of the folder containing wsgi.py. gunicorn --bind=0.0.0.0 --timeout 600 --workers=4 --chdir <module_path> <module>.wsgi
Další informace najdete v tématu Spuštění Gunicornu. Pokud ke škálování webové aplikace používáte pravidla automatického škálování, měli byste také dynamicky nastavit počet pracovních procesů Gunicorn pomocí
NUM_CORES
proměnné prostředí ve spouštěcím příkazu, například:--workers $((($NUM_CORES*2)+1))
. Další informace o nastavení doporučeného počtu pracovníků gunicornu najdete v nejčastějších dotazech ke gunicornu.Povolení produkčního protokolování pro Django: Přidejte argumenty
--access-logfile '-'
--error-logfile '-'
do příkazového řádku:# '-' 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 '-'
Tyto protokoly se zobrazí ve streamu protokolu služby App Service.
Další informace naleznete v tématu Gunicorn protokolování.
Vlastní hlavní modul Flask: Služba App Service ve výchozím nastavení předpokládá, že hlavní modul aplikace Flask je application.py nebo app.py. Pokud hlavní modul používá jiný název, musíte přizpůsobit spouštěcí příkaz. Například pokud je hlavní modul aplikace Flask hello.py a objekt aplikace Flask v tomto souboru se jmenuje
myapp
, vypadá příkaz takto:gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
Pokud je hlavní modul v podsložce, například
website
, zadejte tuto složku pomocí argumentu--chdir
:gunicorn --bind=0.0.0.0 --timeout 600 --chdir website hello:myapp
Použijte server non-Gunicorn: Pokud chcete použít jiný webový server, například aiohttp, použijte jako spouštěcí příkaz nebo v souboru spouštěcího příkazu příslušný příkaz:
python3.7 -m aiohttp.web -H localhost -P 8080 package.module:init_func
Přístup k nastavení aplikace jako proměnným prostředí
Nastavení aplikace jsou hodnoty uložené v cloudu speciálně pro vaši aplikaci, jak je popsáno v části Konfigurace nastavení aplikace. Tato nastavení jsou dostupná pro kód aplikace jako proměnné prostředí a přístupná pomocí standardního vzoru os.environ .
Pokud jste například vytvořili nastavení aplikace s názvem DATABASE_SERVER
, následující kód načte hodnotu tohoto nastavení:
db_server = os.environ['DATABASE_SERVER']
Zjištění relace HTTPS
Ve službě App Service dochází k ukončení protokolu TLS/SSL v nástrojích pro vyrovnávání zatížení sítě, takže všechny požadavky HTTPS dosáhnou vaší aplikace jako nešifrované požadavky HTTP. Pokud logika vaší aplikace potřebuje zkontrolovat, jestli jsou požadavky uživatelů šifrované, nebo ne, zkontrolujte hlavičku X-Forwarded-Proto
.
if 'X-Forwarded-Proto' in request.headers and request.headers['X-Forwarded-Proto'] == 'https':
# Do something when HTTPS is used
Oblíbené webové architektury umožňují přístup k X-Forwarded-*
informacím ve standardním vzoru aplikace. Například v Django můžete použít SECURE_PROXY_SSL_HEADER k tomu, aby Django použil hlavičku X-Forwarded-Proto
.
Přístup k diagnostickým protokolům
Přístup k protokolům konzoly vygenerovaným z kontejneru.
Nejprve zapněte protokolování kontejneru spuštěním následujícího příkazu:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Nahraďte <app-name>
názvy vhodné pro vaši webovou aplikaci a <resource-group-name>
nahraďte je názvy.
Jakmile je protokolování kontejneru zapnuté, spuštěním následujícího příkazu zobrazte stream protokolu:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, zadejte Ctrl+C.
Soubory protokolu můžete také zkontrolovat v prohlížeči na adrese https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Pokud chcete získat přístup k protokolům prostřednictvím webu Azure Portal, v nabídce na levé straně aplikace vyberte Stream protokolu monitorování>.
Přístup k protokolům nasazení
Když nasadíte kód, App Service provede proces sestavení popsaný výše v části Přizpůsobení automatizace sestavení. Vzhledem k tomu, že se sestavení spouští ve vlastním kontejneru, ukládají se protokoly sestavení odděleně od diagnostických protokolů aplikace.
Pro přístup k protokolům nasazení použijte následující postup:
- Na webu Azure Portal pro vaši webovou aplikaci vyberte v nabídce vlevo centrum nasazení>.
- Na kartě Protokoly vyberte ID potvrzení pro poslední potvrzení.
- Na stránce s podrobnostmi protokolu, která se zobrazí, vyberte odkaz Zobrazit protokoly, který se zobrazí vedle možnosti Spuštěno sestavení oryx....
V těchtoprotokolch requirements.txt ch Chyby se zobrazí také v případě, že soubor požadavků není pojmenovaný requirements.txt nebo se nezobrazuje v kořenové složce projektu.
Otevření relace SSH v prohlížeči
Pokud chcete otevřít přímou relaci SSH s kontejnerem, vaše aplikace by měla být spuštěná.
Vložte následující adresu URL do vašeho prohlížeče a <app-name>
nahraďte názvem vaší aplikace:
https://<app-name>.scm.azurewebsites.net/webssh/host
Pokud ještě nejste ověření, budete se muset ověřit s vaším předplatným Azure, abyste se mohli připojit. Po ověření se vám zobrazí prostředí prohlížeče, ve kterém můžete spouště příkazy uvnitř vašeho kontejneru.
Poznámka:
Všechny změny provedené mimo adresář /home se uloží ve vlastním kontejneru a po restartování aplikace se neuchovají.
Pokud chcete otevřít vzdálenou relaci SSH z místního počítače, projděte si téma věnované otevření relace SSH ze vzdáleného prostředí.
Když jste úspěšně připojeni k relaci SSH, měla by se v dolní části okna zobrazit zpráva PŘIPOJENÍ SSH NAVÁZÁNO. Pokud se zobrazí chyby, jako je například SSH_CONNECTION_CLOSED nebo zpráva, že se kontejner restartuje, může se stát, že kontejner aplikace nemůže spustit. Prošetřování možných problémů najdete v tématu Řešení potíží.
Přepsání adresy URL
Při nasazování aplikací Pythonu ve službě Aplikace Azure Service pro Linux možná budete muset zpracovat přepisy adres URL ve vaší aplikaci. To je užitečné zejména pro zajištění přesměrování konkrétních vzorů adres URL na správné koncové body bez nutnosti spoléhat se na konfigurace externího webového serveru. Pro aplikace Flask je možné k tomu použít procesory ADRES URL a vlastní middleware. V aplikacích Django umožňuje robustní dispečer adres URL efektivní správu přepisů adres URL.
Řešení problému
Obecně platí, že prvním krokem při řešení potíží je použití diagnostiky služby App Service:
- Na webu Azure Portal pro vaši webovou aplikaci v nabídce vlevo vyberte Diagnostikovat a řešit problémy .
- Vyberte Dostupnost a výkon.
- Projděte si informace v možnostech Protokoly aplikací, Chybové ukončení kontejneru a Problémy s kontejnery, kde se zobrazí nejběžnější problémy.
Dále zkontrolujte protokoly nasazení i protokoly aplikace, kde se zobrazí chybové zprávy. Tyto protokoly často identifikují konkrétní problémy, které můžou bránit nasazení aplikace nebo spuštění aplikace. Sestavení může například selhat, pokud má váš soubor requirements.txt nesprávný název souboru nebo není v kořenové složce projektu.
Následující části obsahují pokyny pro konkrétní problémy.
- Aplikace se nezobrazuje – zobrazí se výchozí aplikace
- Aplikace se nezobrazuje – zpráva o nedostupnosti služby
- Nepodařilo se najít setup.py nebo requirements.txt
- ModuleNotFoundError při spuštění
- Databáze je uzamčená.
- Při psaní se hesla nezobrazují v relaci SSH
- Zdá se, že příkazy v relaci SSH jsou oříznuté.
- Statické prostředky se nezobrazují v aplikaci Django
- Vyžaduje se závažné připojení SSL.
Aplikace se nezobrazuje
Výchozí aplikaci uvidíte po nasazení kódu vlastní aplikace. Výchozí aplikace se zobrazí, protože jste buď nenasadili kód aplikace do služby App Service, nebo se službě App Service nepodařilo najít kód aplikace a místo toho spustit výchozí aplikaci.
Restartujte službu App Service, počkejte 15-20 sekund a znovu zkontrolujte aplikaci.
Pomocí SSH se připojte přímo ke kontejneru služby App Service a ověřte, že vaše soubory existují v rámci webu nebo wwwroot. Pokud vaše soubory neexistují, postupujte následovně:
- Vytvořte nastavení aplikace s
SCM_DO_BUILD_DURING_DEPLOYMENT
hodnotou 1, znovu nasaďte kód, počkejte několik minut a pak zkuste aplikaci znovu otevřít. Další informace o vytváření nastavení aplikace najdete v tématu Konfigurace aplikace App Service na webu Azure Portal. - Zkontrolujte proces nasazení, zkontrolujte protokoly nasazení, opravte případné chyby a znovu nasaďte aplikaci.
- Vytvořte nastavení aplikace s
Pokud soubory existují, neidentifikovala služba App Service konkrétní spouštěcí soubor. Zkontrolujte, že má aplikace strukturu, kterou služba App Service očekává u aplikací Django nebo Flask, nebo použijte vlastní spouštěcí příkaz.
V prohlížeči se zobrazí zpráva Služba není k dispozici. V prohlížeči vypršel časový limit čekání na odpověď služby App Service, která značí, že služba App Service spustila server Gunicorn, ale samotná aplikace se nespustila. Tato podmínka může znamenat, že argumenty Gunicorn jsou nesprávné nebo že kód aplikace obsahuje chybu.
Aktualizujte prohlížeč, zejména pokud v plánu služby App Service používáte nejnižší cenové úrovně. Spuštění aplikace může trvat déle, když například použijete úrovně Free a po aktualizaci prohlížeče se změní na odezvu.
Zkontrolujte, že má aplikace strukturu, kterou služba App Service očekává u aplikací Django nebo Flask, nebo použijte vlastní spouštěcí příkaz.
Zkontrolujte stream protokolu aplikace a zkontrolujte případné chybové zprávy. V protokolech se v kódu aplikace zobrazí všechny chyby.
Nepodařilo se najít setup.py nebo requirements.txt
Datový proud protokolu ukazuje, že se nepodařilo najít setup.py nebo requirements.txt; Nespouštět instalaci pip.": Proces sestavení Oryx se nepodařilo najít váš requirements.txt soubor.
- Připojte se ke kontejneru webové aplikace přes SSH a ověřte, že requirements.txt je správně pojmenovaná a existuje přímo pod webem nebo wwwroot. Pokud neexistuje, ujistěte se, že soubor existuje ve vašem úložišti a je součástí vašeho nasazení. Pokud existuje v samostatné složce, přesuňte ji do kořenového adresáře.
ModuleNotFoundError při spuštění aplikace
Pokud se zobrazí podobná chyba ModuleNotFoundError: No module named 'example'
, Python při spuštění aplikace nemůže najít jeden nebo více modulů. K této chybě nejčastěji dochází v případě, že nasadíte virtuální prostředí s kódem. Virtuální prostředí nejsou přenosná, takže virtuální prostředí by se nemělo nasazovat s kódem vaší aplikace. Místo toho nechte Oryx vytvořit virtuální prostředí a nainstalovat balíčky do webové aplikace vytvořením nastavení SCM_DO_BUILD_DURING_DEPLOYMENT
aplikace a nastavením na 1
. Toto nastavení vynutí, aby Oryx nainstaloval balíčky při každém nasazení do služby App Service. Další informace najdete v tomto článku o přenositelnosti virtuálních prostředí.
Databáze je uzamčená.
Při pokusu o spuštění migrací databáze pomocí aplikace Django se může zobrazit "sqlite3". OperationalError: Databáze je uzamčená." Tato chyba značí, že vaše aplikace používá databázi SQLite, pro kterou je Django ve výchozím nastavení nakonfigurovaná, a ne pomocí cloudové databáze, jako je Azure Database for PostgreSQL.
DATABASES
Zkontrolujte proměnnou v souboru settings.py aplikace a ujistěte se, že vaše aplikace místo SQLite používá cloudovou databázi.
Pokud dochází k této chybě s ukázkou v kurzu: Nasazení webové aplikace Django s PostgreSQL, zkontrolujte, že jste dokončili kroky v části Ověření nastavení připojení.
Další problémy
Hesla se při psaní nezobrazují v relaci SSH: Z bezpečnostních důvodů relace SSH uchovává vaše heslo při psaní skryté. Tyto znaky se ale zaznamenávají, takže zadejte heslo obvyklým způsobem a po dokončení vyberte Enter .
Zdá se, že příkazy v relaci SSH jsou oříznuté: Editor nemusí být příkazy pro zabalení slov, ale přesto by měly běžet správně.
Statické prostředky se nezobrazují v aplikaci Django: Ujistěte se, že jste povolili modul WhiteNoise.
Zobrazí se zpráva "Závažné připojení SSL je povinné": Zkontrolujte všechna uživatelská jména a hesla používaná pro přístup k prostředkům (jako jsou databáze) z aplikace.