Guida introduttiva: Distribuire un'app Web Python (Django o Flask) nel servizio app Azure
In questa guida introduttiva si distribuirà un'app Web Python (Django o Flask) nel servizio app Azure. app Azure Service è un servizio di hosting Web completamente gestito che supporta le app Python ospitate in un ambiente server Linux.
Per completare l'esercitazione introduttiva, sono necessari gli elementi seguenti:
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Python 3.9 o versione successiva installata in locale.
Nota
Questo articolo contiene le istruzioni correnti sulla distribuzione di un'app Web Python usando app Azure Servizio. Python in Windows non è più supportato.
1 - Applicazione di esempio
Questa guida introduttiva può essere completata usando Flask o Django. Viene fornita un'applicazione di esempio in ogni framework che consente di seguire questa guida introduttiva. Scaricare o clonare l'applicazione di esempio nella workstation locale.
Per eseguire l'applicazione in locale:
Passare alla cartella dell'applicazione:
cd msdocs-python-flask-webapp-quickstart
Creare un ambiente virtuale per l'app:
py -m venv .venv .venv\scripts\activate
Installare le dipendenze:
pip install -r requirements.txt
Eseguire l'app:
flask run
Passare all'applicazione di esempio in
http://localhost:5000
un Web browser.
Problemi? Segnalarli.
2 - Creare un'app Web in Azure
Per ospitare l'applicazione in Azure, è necessario creare app Azure'app Web del servizio in Azure. È possibile creare un'app Web usando l'interfaccia della riga di comando di Azure, VS Code, il pacchetto di estensione Strumenti di Azure o portale di Azure.
I comandi dell'interfaccia della riga di comando di Azure possono essere eseguiti in un computer con l'interfaccia della riga di comando di Azure installata.
L'interfaccia della riga di comando di Azure include un comando az webapp up
che creerà le risorse necessarie e distribuirà l'applicazione in un unico passaggio.
Se necessario, accedere ad Azure usando az login.
az login
Creare l'app Web e altre risorse, quindi distribuire il codice in Azure usando az webapp up.
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
- Il
--runtime
parametro specifica la versione di Python in esecuzione dell'app. Questo esempio usa Python 3.9. Per elencare tutti i runtime disponibili, usare il comandoaz webapp list-runtimes --os linux --output table
. - Il
--sku
parametro definisce le dimensioni (CPU, memoria) e il costo del piano di servizio app. Questo esempio usa il piano di servizio B1 (Basic), che comporta un costo ridotto nella sottoscrizione di Azure. Per un elenco completo dei piani di servizio app, visualizzare la pagina dei prezzi servizio app. - Il
--logs
flag configura la registrazione predefinita necessaria per abilitare la visualizzazione del flusso di log immediatamente dopo l'avvio dell'app Web. - Facoltativamente, è possibile specificare un nome con l'argomento
--name <app-name>
. Se non ne fornisci uno, verrà generato automaticamente un nome. - Facoltativamente, è possibile includere l'argomento
--location <location-name>
, dove<location_name>
è un'area di Azure disponibile. Per recuperare un elenco di aree consentite per l'account Azure, è possibile eseguire il comandoaz account list-locations
.
Il completamento del comando può richiedere alcuni minuti. Mentre il comando è in esecuzione, fornisce messaggi sulla creazione del gruppo di risorse, il piano di servizio app e la risorsa dell'app, la configurazione della registrazione e l'esecuzione della distribuzione ZIP. Viene quindi visualizzato il messaggio che indica che è possibile avviare l'app all'indirizzo http://<nome-app>.azurewebsites.net, ovvero l'URL dell'app in 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>" }
Nota
Il comando az webapp up
esegue le azioni seguenti:
Crea un gruppo di risorse predefinito.
Creare un piano di servizio app predefinito.
Crea un'app con il nome specificato.
Zip distribuisce tutti i file dalla directory di lavoro corrente, con l'automazione della compilazione abilitata.
Memorizzare nella cache i parametri in locale nel file .azure/config in modo che non sia necessario specificarli di nuovo durante la distribuzione successiva con
az webapp up
o altriaz webapp
comandi dalla cartella del progetto. I valori memorizzati nella cache vengono usati automaticamente per impostazione predefinita.
Problemi? Segnalarli.
3 - Distribuire il codice dell'applicazione in Azure
app Azure servizio supporta più metodi per distribuire il codice dell'applicazione in Azure, incluso il supporto per GitHub Actions e tutti gli strumenti CI/CD principali. Questo articolo è incentrato su come distribuire il codice dalla workstation locale ad Azure.
- Eseguire la distribuzione con l'interfaccia della riga di comando di Azure
- Eseguire la distribuzione con VS Code
- Eseguire la distribuzione con Git locale
- Distribuire usando un file ZIP
Poiché il az webapp up
comando ha creato le risorse necessarie e distribuito l'applicazione in un singolo passaggio, è possibile passare a 4 - Passare all'app.
Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.
4 - Passare all'app
Passare all'applicazione distribuita nel Web browser all'URL http://<app-name>.azurewebsites.net
. Se viene visualizzata una pagina dell'app predefinita, attendere un minuto e aggiornare il browser.
Il codice di esempio Python esegue un contenitore Linux nel Servizio app usando un'immagine predefinita.
Complimenti. La distribuzione dell'app Python nel Servizio app di Azure è stata completata.
Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.
5 - Trasmettere i log
app Azure Servizio acquisisce tutti i messaggi di output nella console per facilitare la diagnosi dei problemi con l'applicazione. Le app di esempio includono print()
istruzioni per illustrare questa funzionalità.
@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'))
Il contenuto dei log di diagnostica servizio app può essere esaminato usando l'interfaccia della riga di comando di Azure, VS Code o portale di Azure.
Prima di tutto, è necessario configurare app Azure Servizio per l'output dei log nel file system servizio app usando il comando az webapp log config.
az webapp log config \
--web-server-logging filesystem \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Per trasmettere i log, usare il comando az webapp log tail .
az webapp log tail \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Aggiornare la home page nell'app o tentare altre richieste di generare alcuni messaggi di log. L'output dovrebbe essere simile al seguente.
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"
Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.
Pulire le risorse
Al termine dell'app di esempio, è possibile rimuovere tutte le risorse per l'app da Azure. Non verranno addebitati costi aggiuntivi e la sottoscrizione di Azure non sarà ordinata. La rimozione del gruppo di risorse rimuove anche tutte le risorse nel gruppo di risorse ed è il modo più rapido per rimuovere tutte le risorse di Azure per l'app.
Eliminare il gruppo di risorse usando il comando az group delete .
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
Con l'argomento --no-wait
, il comando restituisce il risultato prima del completamento dell'operazione.
Problemi? Segnalarli.