Een aangepast opstartbestand configureren voor Python-apps in Azure App Service

In dit artikel leert u wanneer en hoe u een aangepast opstartbestand configureert voor een Python-web-app die wordt gehost in Azure App Service. Hoewel een opstartbestand niet vereist is voor lokale ontwikkeling, Azure App Service uw geïmplementeerde web-app uitvoert in een Docker-container die opstartopdrachten kan gebruiken als u deze opgeeft.

In de volgende situaties hebt u een aangepast opstartbestand nodig:

  • Aangepaste Gunicorn-argumenten: u wilt de Standaardwebserver gunicorn starten met extra argumenten buiten de standaardwaarden, die zijn --bind=0.0.0.0 --timeout 600.

  • Alternatieve frameworks of servers: uw app is gebouwd met een ander framework dan Flask of Django, of u wilt een andere webserver gebruiken in plaats van Gunicorn.

  • Niet-standaard Flask-toepassingsstructuur: u hebt een Flask-app waarvan het hoofdcodebestand een andere naam heeft dan app.py of application.py, of het app-object heeft een andere naam dan app.

Met andere woorden, u hebt een aangepaste opstartopdracht nodig, tenzij uw project een app.py of application.py bestand in de hoofdmap heeft met een Flask-app-object met de naam app.

Zie Python-apps configureren - Opstartproces voor containers voor meer informatie.

Vereiste voorwaarden

Voordat u een aangepast opstartbestand configureert, hebt u een bestaande App Service op Linux nodig waarop Python wordt uitgevoerd. Volg de Python-snelstartgids voor App Service om een App Service te maken. U kunt ook een App Service maken met behulp van de Azure CLI:

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

Een opstartbestand maken

Wanneer u een aangepast opstartbestand nodig hebt, gebruikt u de volgende stappen:

  1. Maak een bestand in uw project met de naamstartup.txt, startup.sh of een andere naam van uw keuze die de opstartopdrachten bevat. Zie de latere secties in dit artikel voor specifieke informatie over Django, Flask en andere frameworks.

    Een opstartbestand kan indien nodig meerdere opdrachten bevatten.

  2. Voer het bestand door naar uw codeopslagplaats, zodat het kan worden geïmplementeerd met de rest van de app.

  3. Selecteer in Visual Studio Code het Azure-pictogram op de activiteitenbalk, vouw RESOURCES uit, zoek en vouw uw abonnement uit, vouw App Services uit en klik met de rechtermuisknop op App Service en selecteer Openen in portal.

  4. Kies In Azure Portal in het servicemenu aan de linkerkant instellingenconfiguratie>. Selecteer op de pagina Configuratie voor de App Service de optie Algemene instellingen, voer de naam in van het opstartbestand (zoals startup.txt of startup.sh) onderOpstartopdracht> en selecteer Opslaan.

    U kunt ook de Azure CLI gebruiken om de opstartopdracht in te stellen:

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

    Opmerking

    In plaats van een opstartopdrachtbestand te gebruiken, kunt u de opstartopdracht zelf rechtstreeks in het veld Opstartopdracht in Azure Portal plaatsen. Het gebruik van een opstartopdrachtbestand wordt aanbevolen omdat uw configuratie wordt opgeslagen in uw opslagplaats. Hierdoor kan versiebeheer wijzigingen bijhouden en wordt het opnieuw implementeren van andere Azure App Service-exemplaren vereenvoudigd.

  5. Selecteer Doorgaan wanneer u wordt gevraagd de App Service opnieuw op te starten.

    Als u toegang hebt tot uw Azure App Service-site voordat u uw toepassingscode implementeert, wordt er een toepassingsfout weergegeven omdat er geen code beschikbaar is om de aanvraag te verwerken.

Django-opstartopdrachten

Standaard zoekt Azure App Service de map met uw wsgi.py-bestand en start Gunicorn met de volgende opdracht:

# <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

Als u gunicorn-argumenten wilt wijzigen, zoals het verhogen van de time-outwaarde naar 1200 seconden (--timeout 1200), maakt u een aangepast opstartopdrachtbestand. Deze methode overschrijft de standaardinstellingen met uw specifieke vereisten. Zie Het opstartproces van de container - Django-app voor meer informatie.

Flask-opstartopdrachten

Standaard gaat App Service op Linux ervan uit dat uw Flask-toepassing voldoet aan de volgende criteria:

  • De aanroepbare WSGI heeft de naam app.
  • De toepassingscode bevindt zich in een bestand met de naam application.py of app.py.
  • Het toepassingsbestand bevindt zich in de hoofdmap van de app.

Als uw project verschilt van deze structuur, moet de aangepaste opstartopdracht de locatie van het app-object identificeren in het indelingsbestand:app_object:

  • Andere bestandsnaam en/of app-objectnaam: als het hoofdcodebestand van de app hello.py is en het app-object de naam myappheeft, is de opstartopdracht als volgt:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    
  • Opstartbestand bevindt zich in een submap: Als het opstartbestand myapp/website.py is en het app-object is app, gebruikt u gunicorn's --chdir argument om de map op te geven en geef het opstartbestand en het app-object de naam zoals gewoonlijk:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
    
  • Het opstartbestand bevindt zich in een module: In de code python-sample-vscode-flask-tutorial bevindt het webapp.py opstartbestand zich in de map hello_app, een module met een __init__.py-bestand . Het app-object heeft een naam app en is gedefinieerd in __init__.py. webapp.py gebruikt een relatieve import.

    Omdat Gunicorn vanwege deze regeling naar webapp:app wijst, verschijnt de foutmelding 'Poging tot relatieve import in geen pakket', en kan de app niet worden gestart.

    In dit geval maakt u een shim-bestand dat het app-object uit de module importeert en laat Gunicorn de app vervolgens starten met behulp van de shim. De code python-sample-vscode-flask-tutorial bevat bijvoorbeeld startup.py met de volgende inhoud:

    from hello_app.webapp import app
    

    De opstartopdracht is dan:

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

Zie Het opstartproces van de container - Flask-app voor meer informatie.

Andere frameworks en webservers

De App Service-container waarop Python-apps worden uitgevoerd, heeft Django en Flask standaard geïnstalleerd, samen met de Gunicorn-webserver.

Een ander framework gebruiken dan Django of Flask (zoals Falcon, FastAPI en andere) of om een andere webserver te gebruiken:

  • Neem het framework en de webserver op in uw requirements.txt-bestand .

  • Identificeer in de opstartopdracht de aanroepbare WSGI, zoals beschreven in de vorige sectie voor Flask.

  • Als u een andere webserver dan Gunicorn wilt starten, gebruikt u een python -m opdracht in plaats van de server rechtstreeks aan te roepen. Met de volgende opdracht wordt bijvoorbeeld de uvicorn-server gestart, ervan uitgaande dat de aanroepbare WSGI een naam app heeft en wordt gevonden in application.py:

    python -m uvicorn application:app --host 0.0.0.0
    

    U gebruikt python -m omdat webservers die zijn geïnstalleerd via requirements.txt niet worden toegevoegd aan de Python globale omgeving en daarom niet rechtstreeks kunnen worden aangeroepen. Met python -m de opdracht wordt de server aangeroepen vanuit de huidige virtuele omgeving.

Uw app implementeren

Nadat u het opstartbestand hebt geconfigureerd, moet u uw toepassingscode implementeren in App Service. Gebruik de Azure CLI of de implementatiemethode van uw keuze:

az webapp up --name <app-name>

Zie Best practices voor implementatie voor meer implementatieopties.