Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln får du lära dig när och hur du konfigurerar en anpassad startfil för en Python-webbapp som finns i Azure App Service. En startfil krävs inte för lokal utveckling, men Azure App Service kör din distribuerade webbapp i en Docker-container som kan använda startkommandon om du anger dem.
Du behöver en anpassad startfil i följande situationer:
Anpassade Gunicorn-argument: Du vill starta standardwebbservern Gunicorn med extra argument utöver standardvärdena, som är
--bind=0.0.0.0 --timeout 600.Alternativa ramverk eller servrar: Din app skapas med ett annat ramverk än Flask eller Django, eller så vill du använda en annan webbserver i stället för Gunicorn.
Flask-programstruktur som inte är standard: Du har en Flask-app vars huvudkodfil heter något annat än app.py eller application.py, eller så heter appobjektet något annat än
app.
Med andra ord behöver du ett anpassat startkommando om inte projektet har en app.py eller application.py fil i rotmappen med ett Flask-appobjekt med namnet app.
Mer information finns i Konfigurera Python Apps – Startprocess för containrar.
Förutsättningar
Innan du konfigurerar en anpassad startfil behöver du en befintlig App Service on Linux som kör Python. Om du vill skapa en App Service följer du Python-snabbstarten för App Service. Du kan också skapa en App Service med hjälp av Azure CLI:
az webapp create --resource-group <group> --plan <plan> --name <app-name> --runtime "PYTHON:3.12"
Skapa en startfil
När du behöver en anpassad startfil använder du följande steg:
Skapa en fil i projektet med namnet startup.txt, startup.sh eller ett annat namn som innehåller startkommandona. Mer information om Django, Flask och andra ramverk finns i de senare avsnitten i den här artikeln.
En startfil kan innehålla flera kommandon om det behövs.
Kommitta filen till ditt kodförråd så att den kan distribueras med resten av appen.
I Visual Studio Code väljer du Azure-ikonen i aktivitetsfältet, expanderar RESURSER, letar upp och expanderar din prenumeration, expanderar App Services och högerklickar på App Service och väljer Öppna i portalen.
I Azure-portalen går du till tjänstmenyn till vänster och väljer Konfiguration av inställningar>. På sidan Konfiguration för App Service väljer du Allmänna inställningar, anger namnet på startfilen ( till exempelstartup.txt eller startup.sh) under Stack-inställningar>Startkommando och väljer sedan Spara.
Du kan också använda Azure CLI för att ange startkommandot:
az webapp config set --resource-group <group> --name <app-name> --startup-file "<startup-command>"Anmärkning
I stället för att använda en startkommandofil kan du placera själva startkommandot direkt i fältet Startkommando på Azure-portalen. Du rekommenderar att du använder en startkommandofil eftersom den lagrar konfigurationen på lagringsplatsen. Detta gör det möjligt för versionskontroll att spåra ändringar och förenklar omdistributionen till andra Azure App Service-instanser.
Välj Fortsätt när du uppmanas att starta om App Service.
Om du kommer åt Din Azure App Service-webbplats innan du distribuerar programkoden visas ett "programfel" eftersom ingen kod är tillgänglig för att bearbeta begäran.
Django-startkommandon
Som standard letar Azure App Service upp mappen som innehåller din wsgi.py-fil och startar Gunicorn med följande kommando:
# <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
Om du vill ändra gunicorn-argument, till exempel öka timeout-värdet till 1 200 sekunder (--timeout 1200), skapar du en anpassad startkommandofil. Den här metoden åsidosätter standardinställningarna med dina specifika krav. Mer information finns i Startprocess för containrar – Django-app.
Flask-startkommandon
Som standard förutsätter App Service on Linux att Flask-programmet uppfyller följande kriterier:
- WSGI-anropsbar heter
app. - Programkoden finns i en fil med namnet application.py eller app.py.
- Programfilen finns i appens rotmapp.
Om projektet skiljer sig från den här strukturen måste ditt anpassade startkommando identifiera appobjektets plats i formatfilen:app_object:
Annat filnamn och/eller appobjektnamn: Om appens huvudkodfil är hello.py och appobjektet heter
myappär startkommandot följande:gunicorn --bind=0.0.0.0 --timeout 600 hello:myappStartfilen finns i en undermapp: Om startfilen är myapp/website.py och appobjektet är
appanvänder du Gunicorns--chdirargument för att ange mappen och namnge sedan startfilen och appobjektet som vanligt:gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:appStartfilen finns i en modul: I python-sample-vscode-flask-tutorial koden finns startfilen webapp.py i mappen hello_app, som i sig är en modul med en __init__.py fil. Appobjektet namnges
appoch definieras i __init__.py. webapp.py använder en relativ import.På grund av det här arrangemanget, när man pekar Gunicorn mot
webapp:app, uppstår felet "Försök till relativ import i icke-paket" och appen startar inte.I det här fallet skapar du en shim-fil som importerar appobjektet från modulen och sedan låta Gunicorn starta appen med hjälp av shim. Python-sample-vscode-flask-tutorial-koden innehåller till exempel startup.py med följande innehåll:
from hello_app.webapp import appStartkommandot är sedan:
gunicorn --bind=0.0.0.0 --workers=4 startup:app
Mer information finns i Startprocess för container – Flask-app.
Andra ramverk och webbservrar
App Service-containern som kör Python-appar har Django och Flask installerade som standard, tillsammans med Gunicorn-webbservern.
Om du vill använda ett annat ramverk än Django eller Flask (till exempel Falcon, FastAPI och andra) eller för att använda en annan webbserver:
Inkludera ramverket och webbservern i dinrequirements.txt-fil .
I startkommandot identifierar du det anropsbara WSGI-objektet enligt beskrivningen i föregående avsnitt för Flask.
Om du vill starta en annan webbserver än Gunicorn använder du ett
python -mkommando i stället för att anropa servern direkt. Följande kommando startar till exempel uvicorn-servern , förutsatt att WSGI-anropsbar heterappoch hittas i application.py:python -m uvicorn application:app --host 0.0.0.0Du använder
python -meftersom webbservrar som installeras via requirements.txt inte läggs till i den Python globala miljön och därför inte kan anropas direkt. Kommandotpython -manropar servern inifrån den aktuella virtuella miljön.
Distribuera din applikation
När du har konfigurerat startfilen måste du distribuera programkoden till App Service. Använd den Azure CLI eller den distributionsmetod du väljer:
az webapp up --name <app-name>
Fler distributionsalternativ finns i Metodtips för distribution.