Snabbstart: Distribuera en Python-webbapp (Django, Flask eller FastAPI) till Azure App Service
Kommentar
Från och med den 1 juni 2024 har alla nyligen skapade App Service-appar möjlighet att generera ett unikt standardvärdnamn med hjälp av namngivningskonventionen <app-name>-<random-hash>.<region>.azurewebsites.net
. Befintliga appnamn förblir oförändrade.
Exempel: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Mer information finns i Unikt standardvärdnamn för App Service-resurs.
I den här snabbstarten distribuerar du en Python-webbapp (Django, Flask eller FastAPI) till Azure App Service. Azure App Service är en fullständigt hanterad webbvärdtjänst som stöder Python-appar som finns i en Linux-servermiljö.
Följande krävs för att slutföra den här snabbstarten:
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Python 3.9 eller senare installerat lokalt.
Kommentar
Den här artikeln innehåller aktuella instruktioner om hur du distribuerar en Python-webbapp med Hjälp av Azure App Service. Python i Windows stöds inte längre.
Programexempel
Den här snabbstarten kan slutföras med antingen Flask, Django eller FastAPI. Ett exempelprogram i varje ramverk tillhandahålls som hjälper dig att följa med i den här snabbstarten. Ladda ned eller klona exempelprogrammet till din lokala arbetsstation.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
Så här kör du programmet lokalt:
Gå till programmappen:
cd msdocs-python-flask-webapp-quickstart
Skapa en virtuell miljö för appen:
py -m venv .venv .venv\scripts\activate
Installera beroendena:
pip install -r requirements.txt
Kör appen:
flask run
Bläddra till exempelprogrammet i
http://localhost:5000
en webbläsare.
Har du problem? Berätta för oss.
Skapa en webbapp i Azure
För att vara värd för ditt program i Azure måste du skapa en Azure App Service-webbapp i Azure. Du kan skapa en webbapp med hjälp av Azure CLI, VS Code, Azure Tools-tilläggspaketet eller Azure Portal.
Azure CLI-kommandon kan köras på en dator med Azure CLI installerat.
Azure CLI har ett kommando az webapp up
som skapar nödvändiga resurser och distribuerar ditt program i ett enda steg.
Om det behövs loggar du in på Azure med az login.
az login
Skapa webbappen och andra resurser och distribuera sedan koden till Azure med az webapp up.
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
- Parametern
--runtime
anger vilken version av Python som din app kör. I det här exemplet används Python 3.9. Om du vill visa en lista över alla tillgängliga körningar använder du kommandotaz webapp list-runtimes --os linux --output table
. - Parametern
--sku
definierar storleken (CPU, minne) och kostnaden för App Service-planen. I det här exemplet används tjänstplanen B1 (Basic), vilket medför en liten kostnad i din Azure-prenumeration. En fullständig lista över App Service-planer finns på sidan med priser för App Service. - Flaggan
--logs
konfigurerar standardloggning som krävs för att aktivera visning av loggströmmen omedelbart efter att webbappen har startats. - Du kan också ange ett namn med argumentet
--name <app-name>
. Om du inte anger något genereras ett namn automatiskt. - Du kan också inkludera argumentet
--location <location-name>
där<location_name>
är en tillgänglig Azure-region. Du kan hämta en lista över tillåtna regioner för ditt Azure-konto genom attaz appservice list-locations
köra kommandot .
Det kan ta några minuter att slutföra kommandot. När kommandot körs visas meddelanden om hur du skapar resursgruppen, App Service-planen och appresursen, konfigurerar loggning och utför ZIP-distribution. Meddelandet "Du kan starta appen på http://< app-name.azurewebsites.net>", som är appens URL i Azure.
The webapp '<app-name>' doesn't exist Creating Resource group '<group-name>' ... Resource group creation complete Creating AppServicePlan '<app-service-plan-name>' ... Creating webapp '<app-name>' ... Configuring default logging for the app, if not already enabled Creating zip with contents of dir /home/cephas/myExpressApp ... Getting scm site credentials for zip deployment Starting zip deployment. This operation can take a while to complete ... Deployment endpoint responded with status code 202 You can launch the app at http://<app-name>.azurewebsites.net { "URL": "http://<app-name>.azurewebsites.net", "appserviceplan": "<app-service-plan-name>", "location": "centralus", "name": "<app-name>", "os": "<os-type>", "resourcegroup": "<group-name>", "runtime_version": "python|3.9", "runtime_version_detected": "0.0", "sku": "FREE", "src_path": "<your-folder-location>" }
Kommentar
Kommandot az webapp up
utför följande åtgärder:
Skapa en standardplan för App Service.
Skapa en app med det angivna namnet.
Zip-distribuera alla filer från den aktuella arbetskatalogen, med build automation aktiverat.
Cachelagra parametrarna lokalt i .azure/config-filen så att du inte behöver ange dem igen när du distribuerar dem senare med
az webapp up
eller andraaz webapp
kommandon från projektmappen. De cachelagrade värdena används automatiskt som standard.
Har du problem? Berätta för oss.
Distribuera programkoden till Azure
Azure App Service stöder flera metoder för att distribuera programkoden till Azure, inklusive GitHub Actions och alla större CI/CD-verktyg. Den här artikeln fokuserar på hur du distribuerar din kod från din lokala arbetsstation till Azure.
az webapp up
Eftersom kommandot skapade nödvändiga resurser och distribuerade programmet i ett enda steg kan du gå vidare till nästa steg.
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Konfigurera startskript
Baserat på förekomsten av vissa filer i en distribution identifierar App Service automatiskt om en app är en Django- eller Flask-app och utför standardsteg för att köra din app. För appar baserade på andra webbramverk som FastAPI måste du konfigurera ett startskript för App Service för att köra din app. Annars kör App Service en skrivskyddad standardapp som finns i mappen opt/defaultsite .
Mer information om hur App Service kör Python-appar och hur du kan konfigurera och anpassa dess beteende med din app finns i Konfigurera en Linux Python-app för Azure App Service.
App Service identifierar automatiskt förekomsten av en Flask-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
Bläddra till appen
Bläddra till det distribuerade programmet i webbläsaren med hjälp av URL:en http://<app-name>.azurewebsites.net
. Om du ser en standardappsida väntar du en minut och uppdaterar webbläsaren.
Python-exempelkoden kör en Linux-container i App Service med hjälp av en inbyggd avbildning.
Grattis! Du har distribuerat Python-appen till App Service.
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Strömningsloggar
Azure App Service samlar in alla meddelandeutdata till konsolen för att hjälpa dig att diagnostisera problem med ditt program. Exempelapparna innehåller print()
instruktioner för att demonstrera den här funktionen.
@app.route('/')
def index():
print('Request for index page received')
return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
@app.route('/hello', methods=['POST'])
def hello():
name = request.form.get('name')
if name:
print('Request for hello page received with name=%s' % name)
return render_template('hello.html', name = name)
else:
print('Request for hello page received with no name or blank name -- redirecting')
return redirect(url_for('index'))
Du kan granska innehållet i App Service-diagnostikloggarna med hjälp av Azure CLI, VS Code eller Azure Portal.
Först måste du konfigurera Azure App Service till utdataloggar till App Service-filsystemet med hjälp av kommandot az webapp log config .
az webapp log config \
--web-server-logging filesystem \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Om du vill strömma loggar använder du kommandot az webapp log tail .
az webapp log tail \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Uppdatera startsidan i appen eller försök med andra begäranden om att generera vissa loggmeddelanden. Utdata bör se ut ungefär så här.
Starting Live Log Stream ---
2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Rensa resurser
När du är klar med exempelappen kan du ta bort alla resurser för appen från Azure. Om du tar bort resursgruppen ser du till att du inte debiteras extra avgifter och att din Azure-prenumeration inte rensas. Om du tar bort resursgruppen tas även alla resurser i resursgruppen bort och är det snabbaste sättet att ta bort alla Azure-resurser för din app.
Ta bort resursgruppen med kommandot az group delete .
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
Argumentet --no-wait
gör att kommandot kan returneras innan åtgärden är klar.
Har du problem? Berätta för oss.