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 nutzen kann, falls angegeben.
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 600
sind.Alternative Frameworks oder Server: Ihre App wird mit einem anderen Framework als Flask oder Django erstellt, oder Sie möchten neben Gunicorn einen anderen Webserver 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, ein benutzerdefinierter Startbefehl ist erforderlich, 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.
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 auf der Seite "Konfiguration" für den App-Dienst "Allgemeine Einstellungen" den Namen der Startdatei (z. B. startup.txt oder startup.sh) unter "Startbefehl für Stapeleinstellungen>" ein, und wählen Sie dann "Speichern" aus.
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 gunicorn-Argumente ändern möchten, z. B. das Erhöhen des Timeoutwerts auf 1.200 Sekunden(--timeout 1200
), erstellen Sie eine benutzerdefinierte Startbefehlsdatei. Auf diese Weise können Sie die Standardeinstellungen mit Ihren spezifischen Anforderungen außer Kraft setzen. Weitere Informationen finden Sie unter Containerstartprozess – Django-App.
Flask-Startbefehle
Standardmäßig geht App Service unter Linux davon aus, dass Ihre Flask-Anwendung das folgende Critear 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 der benutzerdefinierte 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
myapp
ist, lautet der Startbefehl wie folgt:gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
Die Startdatei befindet sich in einem Unterordner: Wenn die Startdatei myapp/website.py ist und das App-Objekt lautet
app
, verwenden Sie Gunicorns--chdir
Argument, 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:app
Die 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
app
und in __init__.py definiert und webapp.py verwendet einen relativen Import.Aufgrund dieser Konfiguration tritt beim Zeigen von Gunicorn auf
webapp:app
der 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 app
Der 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.
Um ein anderes Framework als Django oder Flask (z. B. Falcon, FastAPI usw.) oder um einen anderen Webserver zu verwenden, gehen Sie folgendermaßen vor:
Schließen Sie das Framework und/oder den Webserver in die dateirequirements.txt 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 -m
Befehl, anstatt den Server direkt aufzurufen. Der folgende Befehl startet z. B. den uvicorn-Server , vorausgesetzt, dass der aufrufbare WSGI benanntapp
ist und in application.py gefunden wird:python -m uvicorn application:app --host 0.0.0.0
Sie verwenden
python -m
, weil Webserver, die über requirements.txt installiert sind, nicht zur globalen Python-Umgebung hinzugefügt werden und daher nicht direkt aufgerufen werden können. Derpython -m
Befehl ruft den Server aus der aktuellen virtuellen Umgebung auf.