Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wann und wie Sie eine benutzerdefinierte Startdatei für eine Python-Web-App konfigurieren, die auf Azure App Service gehostet wird. Während eine Startdatei für die lokale Entwicklung nicht erforderlich ist, führt Azure App Service Ihre bereitgestellte Web-App in einem Docker-Container aus, der Startbefehle verwenden kann, wenn Sie sie bereitstellen.
In den folgenden Situationen benötigen Sie eine benutzerdefinierte Startdatei:
Custom Gunicorn-Argumente: Sie möchten den standardmäßigen Gunicorn-Webserver mit zusätzlichen Argumenten über seine Standardeinstellungen hinaus starten, die
--bind=0.0.0.0 --timeout 600sind.Alternative Frameworks oder Server: Ihre App wird mit einem anderen Framework als Flask oder Django erstellt, oder Sie möchten einen anderen Webserver anstelle von Gunicorn verwenden.
Nicht standardmäßige Flask-Anwendungsstruktur: Sie haben eine Flask-App, deren Hauptcodedatei einen anderen Namen hat als app.py oder application.py, oder das App-Objekt hat einen anderen Namen als
app.
Mit anderen Worten, Sie benötigen einen benutzerdefinierten Startbefehl, es sei denn, Ihr Projekt verfügt über eine app.py oder application.py Datei im Stammordner mit einem Flask-App-Objekt namens app.
Weitere Informationen finden Sie unter Konfigurieren von Python-Apps – Containerstartprozess.
Voraussetzungen
Bevor Sie eine benutzerdefinierte Startdatei konfigurieren, benötigen Sie einen vorhandenen App Service unter Linux, auf dem Python ausgeführt wird. Um einen App Service zu erstellen, folgen Sie dem Python-Schnellstart für App Service. Sie können auch einen App-Dienst mit dem Azure CLI erstellen:
az webapp create --resource-group <group> --plan <plan> --name <app-name> --runtime "PYTHON:3.12"
Erstellen einer Startdatei
Wenn Sie eine benutzerdefinierte Startdatei benötigen, führen Sie die folgenden Schritte aus:
Erstellen Sie eine Datei in Ihrem Projekt mit dem Namenstartup.txt, startup.sh oder einem anderen Namen Ihrer Wahl, die Ihre Startbefehle enthält. Weitere Informationen zu Django, Flask und anderen Frameworks finden Sie in den späteren Abschnitten in diesem Artikel.
Eine Startdatei kann bei Bedarf mehrere Befehle enthalten.
Committen Sie die Datei in Ihr Coderepository, damit sie mit den restlichen Teilen der App bereitgestellt werden kann.
Wählen Sie in Visual Studio Code das Azure-Symbol in der Aktivitätsleiste aus, erweitern Sie RESSOURCEN, suchen Sie Ihr Abonnement und erweitern Sie es, erweitern Sie App Services, klicken Sie mit der rechten Maustaste auf den App Service und wählen Sie Im Portal öffnen aus.
Wählen Sie im Azure-Portal im Dienstmenü auf der linken Seite Einstellungen>Konfiguration. Wählen Sie auf der Konfigurationsseite für den App-Dienst Allgemeine Einstellungen aus, geben Sie unter StackeinstellungenStartup Command den Namen Ihrer Startdatei (z. B. > oder startup.sh) ein, und wählen Sie dann Speichern aus.
Alternativ können Sie die Azure CLI verwenden, um den Startbefehl festzulegen:
az webapp config set --resource-group <group> --name <app-name> --startup-file "<startup-command>"Hinweis
Anstatt eine Startbefehlsdatei zu verwenden, können Sie den Startbefehl direkt im Feld "Startbefehl " im Azure-Portal platzieren. Die Verwendung einer Startbefehlsdatei wird empfohlen, da sie Ihre Konfiguration in Ihrem Repository speichert. Dadurch kann die Versionssteuerung Änderungen nachverfolgen und die erneute Bereitstellung für andere Azure App Service-Instanzen vereinfachen.
Wählen Sie "Weiter" aus, wenn Sie aufgefordert werden, den App-Dienst neu zu starten.
Wenn Sie vor der Bereitstellung des Anwendungscodes auf Ihre Azure App Service-Website zugreifen, wird ein "Anwendungsfehler" angezeigt, da kein Code zum Verarbeiten der Anforderung verfügbar ist.
Django-Startbefehle
Standardmäßig sucht Azure App Service den Ordner, der Ihre wsgi.py Datei enthält, und startet Gunicorn mit dem folgenden Befehl:
# <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
Wenn Sie alle Gunicorn-Argumente ändern möchten, z. B. das Erhöhen des Timeoutwerts auf 1.200 Sekunden (--timeout 1200), erstellen Sie eine benutzerdefinierte Startbefehlsdatei. Diese Methode setzt die Standardeinstellungen mit Ihren spezifischen Anforderungen außer Kraft. Weitere Informationen finden Sie unter Containerstartprozess – Django-App.
Flask-Startbefehle
Standardmäßig wird App Service für Linux davon ausgegangen, dass Ihre Flask-Anwendung die folgenden Kriterien erfüllt:
- Der aufrufbare WSGI heißt
app. - Der Anwendungscode ist in einer Datei mit dem Namen application.py oder app.py enthalten.
- Die Anwendungsdatei befindet sich im Stammordner der App.
Wenn sich Ihr Projekt von dieser Struktur unterscheidet, muss ihr benutzerdefinierter Startbefehl den Speicherort des App-Objekts in der Formatdatei:app_object identifizieren:
Anderer Dateiname und/oder App-Objektname: Wenn die Hauptcodedatei der App hello.py und das App-Objekt benannt
myappist, lautet der Startbefehl wie folgt:gunicorn --bind=0.0.0.0 --timeout 600 hello:myappDie Startdatei befindet sich in einem Unterordner: Wenn die Startdatei myapp/website.py ist und das App-Objekt lautet
app, verwenden Sie Gunicorns--chdirArgument, um den Ordner anzugeben und dann die Startdatei und das App-Objekt wie gewohnt zu benennen:gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:appDie Startdatei befindet sich in einem Modul: Im Python-sample-vscode-flask-tutorial-Code befindet sich die webapp.py Startdatei im Ordner hello_app, das selbst ein Modul mit einer __init__.py Datei ist. Das App-Objekt wird benannt
appund in __init__.py definiert. webapp.py verwendet einen relativen Import.Aufgrund dieser Konfiguration tritt beim Zeigen von Gunicorn auf
webapp:appder Fehler "Versuch eines relativen Imports in einem Nicht-Paket" auf, und die App schlägt beim Start fehl.Erstellen Sie in diesem Fall eine Shim-Datei, die das App-Objekt aus dem Modul importiert, und lassen Sie dann Gunicorn die App mit dem Shim starten. Der Python-sample-vscode-flask-tutorial-Code enthält z. B. startup.py mit folgendem Inhalt:
from hello_app.webapp import appDer Startbefehl lautet dann:
gunicorn --bind=0.0.0.0 --workers=4 startup:app
Weitere Informationen finden Sie unter Containerstartprozess – Flask-App.
Andere Frameworks und Webserver
Der App Service-Container, der Python-Apps ausführt, hat Django und Flask standardmäßig zusammen mit dem Gunicorn-Webserver installiert.
Wenn Sie ein anderes Framework als Django oder Flask (z. B. Falcon, FastAPI und andere) oder einen anderen Webserver verwenden möchten:
Schließen Sie das Framework und den Webserver in die requirements.txt-Datei ein.
Identifizieren Sie in Ihrem Startbefehl die aufrufbare WSGI-Datei, wie im vorherigen Abschnitt für Flask beschrieben.
Um einen anderen Webserver als Gunicorn zu starten, verwenden Sie einen
python -mBefehl, anstatt den Server direkt aufzurufen. Der folgende Befehl startet z. B. den uvicorn-Server , vorausgesetzt, dass der aufrufbare WSGI benanntappist und in application.py gefunden wird:python -m uvicorn application:app --host 0.0.0.0Sie verwenden
python -m, da Webserver, die über requirements.txt installiert sind, nicht zur Python globalen Umgebung hinzugefügt werden und daher nicht direkt aufgerufen werden können. Derpython -mBefehl ruft den Server aus der aktuellen virtuellen Umgebung auf.
Bereitstellen Ihrer App
Nachdem Sie die Startdatei konfiguriert haben, müssen Sie den Anwendungscode in App Service bereitstellen. Verwenden Sie die Azure CLI oder die Bereitstellungsmethode Ihrer Wahl:
az webapp up --name <app-name>
Weitere Bereitstellungsoptionen finden Sie unter bewährte Methoden für die Bereitstellung.