Distribuire un'app Web Python (Django o Flask) con PostgreSQL in Azure

In questa esercitazione si distribuirà un'app Web Python basata su dati (Django o Flask) con il servizio di database relazionale Database di Azure per PostgreSQL. L'app Python è ospitata in un Servizio app di Azure completamente gestito che supporta Python 3.7 o versione successiva in un ambiente server Linux. È possibile iniziare con un piano tariffario di base che può essere ridimensionato in qualsiasi momento successivo.

Diagramma dell'architettura che mostra un servizio app con un database PostgreSQL in Azure.

Per completare questa esercitazione, è necessario disporre di:

1 - Applicazione di esempio

Le applicazioni Python di esempio che usano il framework Flask e Django vengono fornite per seguire questa esercitazione. Scaricare o clonare una delle applicazioni di esempio nella workstation locale.

git clone https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app

Per eseguire l'applicazione in locale, passare alla cartella dell'applicazione:

cd msdocs-flask-postgresql-sample-app

Creare un ambiente virtuale per l'app:

py -m venv .venv
.venv/scripts/activate

Installare le dipendenze:

pip install -r requirements.txt

Nota

Se si segue con questa esercitazione con la propria app, esaminare la descrizione del file requirements.txt nel file README.md di ogni progetto (Flask, Django) per visualizzare i pacchetti necessari.

Questa applicazione di esempio richiede un file con estensione env che descrive come connettersi all'istanza di PostgreSQL locale. Creare un file con estensione env come illustrato di seguito usando il file con estensione env.sample come guida. Impostare il valore di sul nome di DBNAME un database esistente nell'istanza locale di PostgreSQL. Questa esercitazione presuppone che il nome del database sia ristorante. Impostare i valori di , DBUSERe DBPASS come appropriato per l'istanza locale di DBHOSTPostgreSQL.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

Per Django, è possibile usare SQLite localmente anziché PostgreSQL seguendo le istruzioni nei commenti del file settings.py .

Creare le tabelle e review di restaurant database:

flask db init
flask db migrate -m "initial migration"

Eseguire l'app:

flask run

In un Web browser passare all'applicazione di esempio in http://127.0.0.1:5000 e aggiungere alcuni ristoranti e recensioni del ristorante per vedere come funziona l'app.

Screenshot dell'app Web Flask con PostgreSQL in esecuzione localmente che mostra ristoranti e recensioni dei ristoranti.

Suggerimento

Con Django è possibile creare utenti con il python manage.py createsuperuser comando come si farebbe con un'app Django tipica. Per altre informazioni, vedere la documentazione per django django-admin e manage.py. Usare l'account superuser per accedere alla /admin parte del sito Web. Per Flask, usare un'estensione come Flask-admin per fornire la stessa funzionalità.

Problemi? Segnalarli.

2 - Creare un'app Web in Azure

Per ospitare l'applicazione in Azure, è necessario creare Servizio app di Azure'app Web.

Accedere alla portale di Azure e seguire questa procedura per creare la risorsa Servizio app di Azure.

Istruzioni Schermata
Nel portale di Azure:
  1. Immettere i servizi app nella barra di ricerca nella parte superiore della portale di Azure.

  2. Selezionare l'elemento etichettato Servizi app sotto l'intestazione Servizi nel menu visualizzato sotto la barra di ricerca.

Screenshot che mostra come usare la casella di ricerca nella barra degli strumenti superiore per trovare Servizi app in portale di Azure.
Nella pagina Servizi app selezionare + Crea. Screenshot che mostra il percorso del pulsante Crea nella pagina Servizi app nella portale di Azure.
Nella pagina Crea app Web compilare il modulo come segue:
  1. Gruppo di risorse → Selezionare Crea nuovo e usare un nome di msdocs-python-postgres-webapp-rg.

  2. Nome → Usare msdocs-python-postgres-webapp-unique-id<>. Il nome deve essere univoco in Azure con l'URL https://<app-service-name>.azurewebsites.comdell'app Web.

  3. Stack di runtimePython 3.9

  4. Area → Qualsiasi area di Azure vicino all'utente.

  5. servizio app Piano → Selezionare Crea nuovo in Piano Linux e usare il nome msdocs-python-postgres-webapp-plan.

  6. servizio app Pianificare → Selezionare Modifica dimensioni in Sku e dimensioni per selezionare un piano di servizio app diverso.

Screenshot che mostra come compilare il modulo per creare una nuova servizio app nell'portale di Azure.
Nella sezione Selezione specifiche selezionare un piano di servizio app. Il piano di servizio app controlla il numero di risorse (CPU/memoria) disponibili per l'app e il costo di tali risorse.
  1. Selezionare Dev/Test.

  2. Selezionare Piano B1 (Basic).

    Il piano B1 Basic comporta un piccolo addebito per l'account Azure, ma è consigliabile migliorare le prestazioni rispetto al piano F1 (gratuito).

  3. Selezionare Applica.

Screenshot che mostra come selezionare il piano di servizio app di base nel portale di Azure.
Nella pagina Crea app Web selezionare il pulsante Rivedi e crea nella parte inferiore della schermata.

Verrà visualizzata una pagina per esaminare la configurazione. Selezionare Crea per creare il servizio app.
Screenshot che mostra il percorso del pulsante Rivedi e Crea nella portale di Azure.

Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

3 - Creare il database PostgreSQL in Azure

È possibile creare un database PostgreSQL in Azure usando il portale di Azure, Visual Studio Code o l'interfaccia della riga di comando di Azure.

Accedere al portale di Azure e seguire questa procedura per creare la risorsa Database di Azure per PostgreSQL.

Istruzioni Schermata
Nel portale di Azure:
  1. Immettere postgres nella barra di ricerca nella parte superiore del portale di Azure.

  2. Selezionare l'elemento etichettato Database di Azure per PostgreSQL server flessibili sotto l'intestazione Servizi del menu visualizzato sotto la barra di ricerca.

Screenshot che mostra come usare la casella di ricerca nella barra degli strumenti superiore per trovare Postgres Services nel portale di Azure.
Nella pagina Database di Azure per PostgreSQL server flessibili selezionare + Crea Screenshot che mostra il percorso del pulsante Crea nella pagina Database di Azure per PostgreSQL server nel portale di Azure.
Nella pagina successiva selezionare Crea in Server flessibile. Screenshot che mostra il percorso del pulsante Crea server flessibile nella pagina dell'opzione di distribuzione Database di Azure per PostgreSQL nel portale di Azure.
Nella pagina Server flessibile compilare il modulo come indicato di seguito:
  1. Gruppo di risorse → Selezionare e usare un nome msdocs-python-postgres-webapp-rg.

  2. Nome server → Immettere un nome, ad esempio msdocs-python-postgres-webapp-db-unique-id<>. Il nome deve essere univoco in Azure con l'URL https://<server-name>.postgres.database.azure.comdel server di database . I caratteri consentiti sono A-Z, 0-9 e -.

  3. Area → Stessa area di Azure usata per l'app Web.

  4. Origine datiNessuno

  5. Tipo di carico di lavoroproduzione

  6. Calcolo e archiviazione → SelezionareConfigura server per selezionare un piano di calcolo e archiviazione diverso, illustrato di seguito.

  7. Zona di disponibilità → Mantenere l'impostazione predefinita (che non è una preferenza).

  8. Versione → Mantenere il valore predefinito (ovvero la versione più recente).

Screenshot che mostra come compilare il modulo per creare una nuova Database di Azure per PostgreSQL nel portale di Azure.
Nella pagina Calcolo e archiviazione continuare a configurare il server flessibile:
  1. Livello di calcolo → SelezionareBurstable.

  2. Dimensioni di calcolo → SelezionareStandard_B1ms.

  3. Selezionare Salva per tornare alla pagina di configurazione principale.

Screenshot che mostra come selezionare e configurare il piano di servizio di database di base nel portale di Azure.
Tornare alla pagina server flessibile principale, completare la configurazione di base:
  1. Account amministratore → Immettere un nome utente e una password Amministrazione da usare per l'account amministratore del database.

  2. Selezionare Avanti: rete nella parte inferiore della schermata.

Creazione di informazioni sull'account amministratore per il server flessibile PostgreSQL nella portale di Azure.
Nella pagina Rete aggiungere una regola del firewall che consente all'ambiente locale di accedere al server di database:
  1. Selezionare Aggiungi indirizzo IP client corrente per consentire l'accesso dall'ambiente locale.

  2. Selezionare Rivedi e Crea nella parte inferiore della schermata.

    Verrà visualizzata la pagina Rivedi . Selezionare Crea per creare il servizio server flessibile Database di Azure per PostgreSQL.

Screenshot che mostra l'aggiunta dell'INDIRIZZO IP corrente come regola del firewall per il server flessibile PostgreSQL nell'portale di Azure.

Nell'ambiente locale usando il terminale interattivo PostgreSQL psql, connettersi al server di database PostgreSQL e creare il restaurant database:

psql --host=<server-name>.postgres.database.azure.com \
     --port=5432 \
     --username=<admin-user> \
     --dbname=postgres

postgres=> CREATE DATABASE restaurant;

I valori di e <admin-user> sono i valori di <server-name> un passaggio precedente. Se si verificano problemi di connessione, riavviare il database e riprovare.

Facoltativamente, verificare che il restaurant database sia stato creato correttamente eseguendo \c restaurant per modificare il prompt da postgres (impostazione predefinita) a restaurant. Digitare \? per visualizzare la Guida o \q per uscire.

Problemi? Segnalarli.

4 - Consentire all'app Web di accedere al database

Dopo aver creato il server Database di Azure per PostgreSQL, configurare l'accesso al server dall'app Web aggiungendo una regola del firewall. Questa operazione può essere eseguita tramite l'portale di Azure o l'interfaccia della riga di comando di Azure.

Se si lavora in VS Code, fare clic con il pulsante destro del mouse sul server di database e selezionare Apri nel portale per passare alla portale di Azure. In alternativa, passare a Azure Cloud Shell ed eseguire i comandi dell'interfaccia della riga di comando di Azure.

Istruzioni Schermata
Aggiungere una regola per consentire all'app Web di accedere al server flessibile PostgreSQL.
  1. Nella pagina della risorsa sinistra per il server selezionare Rete.

  2. Selezionare la casella di controllo accanto a Consenti l'accesso pubblico da qualsiasi servizio di Azure in Azure a questo server.

  3. Selezionare Salva per salvare la modifica.

Per proteggere ulteriormente le comunicazioni tra app Web di produzione e server di database, è consigliabile usare un Rete virtuale di Azure.
Screenshot che mostra come aggiungere l'accesso da altri servizi di Azure a un database PostgreSQL nella portale di Azure.

Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

5 - Connettere l'app Web al database

Con l'app Web e il database PostgreSQL creato, il passaggio successivo consiste nel connettere l'app Web al database PostgreSQL in Azure.

Il codice dell'app Web usa le informazioni sul database in quattro variabili di ambiente denominate DBHOST, DBNAME, DBUSERe DBPASS per connettersi al server PostgresSQL.

Istruzioni Schermata
Nel portale passare alla pagina servizio app per l'app Web.
  1. Selezionare Configurazione in Impostazioni sul lato sinistro.

  2. Selezionare Impostazioni applicazione nella parte superiore della pagina.

Screenshot che mostra come passare a Impostazioni app nell'portale di Azure.
Creare le impostazioni dell'applicazione:
  1. Selezionare + Nuova impostazione dell'applicazione per creare le impostazioni per ognuno dei valori seguenti (previsti dall'app di esempio django):

    • DBHOST → Usare il nome del server usato in precedenza quando è stato creato il database, ad esempio msdocs-python-postgres-webapp-db-unique< id>. Il codice in azuresite/production.py aggiunge automaticamente .postgres.database.azure.com per creare l'URL completo del server PostgreSQL.
    • DBNAME → Immettere restaurant, il nome del database dell'applicazione.
    • DBUSER → Nome utente dell'amministratore usato quando è stato effettuato il provisioning del database.
    • DBPASS → La password protetta dell'amministratore creata in precedenza.
  2. Verificare di avere quattro impostazioni e visualizzare i relativi valori nascosti.

  3. Selezionare Salva e per applicare le impostazioni.

Screenshot che mostra come configurare le impostazioni dell'app nella portale di Azure.

Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

6 - 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.

Per distribuire un'app Web da VS Code, è necessario installare il pacchetto di estensione Strumenti di Azure e accedere ad Azure da VS Code.

Istruzioni Schermata
Individuare l'icona di Azure nella barra degli strumenti a sinistra e selezionarla per visualizzare l'estensione Strumenti di Azure per VS Code. Screenshot che mostra come individuare l'estensione Strumenti di Azure in VS Code.
Nell'estensione Strumenti di Azure:
  1. Espandere RISORSE. Assicurarsi che le risorse siano ordinate in base al tipo di risorsa.

  2. Fare clic con il pulsante destro del mouse sull'app Web per visualizzare il menu di scelta rapida.

  3. Selezionare Distribuisci in App Web... dal menu.

Screenshot che mostra come distribuire un'app Web in VS Code.
Selezionare l'app Web come app Web da distribuire nella finestra di dialogo nella parte superiore della schermata.

Selezionare Distribuisci nella finestra di dialogo.
Screenshot che mostra come distribuire un'app Web in VS Code: selezionando il codice da distribuire.Screenshot che mostra come distribuire un'app Web in VS Code: una finestra di dialogo per confermare la distribuzione.
Selezionare per aggiornare la configurazione della compilazione e migliorare le prestazioni di distribuzione. Screenshot che mostra come distribuire un'app Web in VS Code: una finestra di dialogo per scegliere di distribuire sempre nel servizio app.
Al termine della distribuzione, verrà visualizzata una finestra di dialogo nell'angolo inferiore destro della schermata con un'opzione per passare al sito Web. Se si usa questo collegamento, la pagina Web segnala un errore perché l'app Web non è pronta fino a quando non si esegue la migrazione nel passaggio successivo. È possibile che venga visualizzato un altro avviso della finestra di dialogo relativo al problema. Screenshot che mostra come distribuire un'app Web in VS Code: una finestra di dialogo con la possibilità di passare al sito Web.Screenshot che mostra come distribuire un'app Web in VS Code: una finestra di dialogo con la possibilità di visualizzare i dettagli della distribuzione.

Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

7 - Eseguire la migrazione del database dell'app

Con il codice distribuito e il database implementato, l'app è quasi pronta per l'uso. Prima di tutto, è necessario stabilire lo schema necessario nel database stesso. A questo scopo, eseguire la migrazione dei modelli di dati dell'app Django al database.

Passaggio 1. Creare sessione SSH e connettersi al server app Web.

Passare alla pagina per l'istanza di servizio app nell'portale di Azure.

  1. Selezionare SSH, in Strumenti di sviluppo sul lato sinistro
  2. Passare quindi a aprire una console SSH nel server app Web. Potrebbe essere necessario un minuto per connettersi per la prima volta quando il contenitore dell'app Web deve iniziare.

Nota

Se non è possibile connettersi alla sessione SSH, significa che l'avvio dell'app stessa non è riuscito. Controllare i log di diagnostica per i dettagli. Ad esempio, se nella sezione precedente non sono state create le impostazioni dell'app necessarie, i log indicheranno KeyError: 'DBNAME'.

Passaggio 2. Nella sessione SSH eseguire il comando seguente per eseguire la migrazione dei modelli nello schema del database (è possibile incollare i comandi usando CTRL+MAIUSC+V):

Quando si distribuisce l'app di esempio Flask in Servizio app di Azure, le tabelle di database vengono create automaticamente in Azure PostgreSQL. Se le tabelle non vengono create, provare il comando seguente:

# Create database tables
flask db init

Se si verificano errori correlati alla connessione al database, controllare i valori delle impostazioni dell'applicazione della servizio app creata nella sezione precedente, ovvero DBHOST, DBNAME, DBUSERe DBPASS. Senza queste impostazioni, il comando migrate non può comunicare con il database.

Suggerimento

In una sessione SSH, per Django è anche possibile creare utenti con il python manage.py createsuperuser comando come si farebbe con un'app Django tipica. Per altre informazioni, vedere la documentazione per django django-admin e manage.py. Usare l'account superuser per accedere alla /admin parte del sito Web. Per Flask, usare un'estensione come Flask-admin per fornire la stessa funzionalità.

Problemi? Segnalarli.

8 - Passare all'app

Passare all'applicazione distribuita nel Web browser all'URL http://<app-name>.azurewebsites.net. Può richiedere un minuto o due per l'avvio dell'app, quindi se viene visualizzata una pagina dell'app predefinita, attendere un minuto e aggiornare il browser.

Quando viene visualizzata l'app Web di esempio, è in esecuzione in un contenitore Linux in servizio app usando un'immagine predefinita Congratulazioni! L'app Python è stata distribuita in servizio app.

Problemi? Segnalarli.

9 - Flussi di log di diagnostica

Servizio app di Azure acquisisce tutti i messaggi di output nella console per diagnosticare i problemi con l'applicazione. L'app di esempio include print() istruzioni per illustrare questa funzionalità, come illustrato di seguito.

def index(request):
    print('Request for index page received')

    restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
    return render(request, 'restaurant_review/index.html', {'restaurants': restaurants })

È possibile accedere ai log della console generati dall'interno del contenitore che ospita l'app in Azure.

Istruzioni Schermata
Prima di tutto, è necessario abilitare i log di streaming in Servizio app di Azure. Passare alla pagina per l'istanza di servizio app nell'portale di Azure.
  1. Selezionare i log servizio app nell'intestazione Monitoraggio nel menu a sinistra della pagina.

  2. Modificare la proprietà Registrazione applicazioni da Off a File System.

  3. Immettere un periodo di conservazione di 30 giorni per i log.

  4. Fare clic su Salva per salvare le modifiche.

Screenshot che mostra come impostare la registrazione dell'applicazione nell'portale di Azure.
Selezionare la voce Flusso di log dal menu nella sezione Monitoraggio . Aggiornare la home page nell'app o tentare altre richieste per generare alcuni messaggi di log.

Verranno visualizzati tutti i messaggi di log generati dall'app e dai messaggi generati dal servizio nell'output.
Screenshot che mostra come trasmettere i log nel portale di Azure.

Problemi? Segnalarli.

Pulire le risorse

È possibile lasciare l'app e il database in esecuzione fino a quando si desidera un ulteriore lavoro di sviluppo e passare a Passaggi successivi.

Tuttavia, al termine dell'app di esempio, è possibile rimuovere tutte le risorse per l'app da Azure per assicurarsi di non incorrere in altri addebiti e mantenere la sottoscrizione di Azure incluttered. La rimozione del gruppo di risorse rimuove anche tutte le risorse nel gruppo di risorse ed è il modo più veloce per rimuovere tutte le risorse di Azure per l'app.

Seguire questa procedura durante l'accesso al portale di Azure per eliminare un gruppo di risorse.

Istruzioni Schermata
Passare al gruppo di risorse nella portale di Azure.
  1. Immettere il nome del gruppo di risorse nella barra di ricerca nella parte superiore della pagina.
  2. Nell'intestazione Gruppi di risorse selezionare il nome del gruppo di risorse per spostarsi.
Screenshot che mostra come trovare il gruppo di risorse nella portale di Azure.
Selezionare il pulsante Elimina gruppo di risorse nella parte superiore della pagina. Screenshot che mostra come eliminare un gruppo di risorse nel portale di Azure.
Nella finestra di dialogo di conferma immettere il nome del gruppo di risorse per confermare l'eliminazione. Selezionare Elimina per eliminare il gruppo di risorse.

Problemi? Segnalarli.

Passaggi successivi

Vedere le informazioni su come eseguire il mapping di un nome DNS personalizzato all'app:

Vedere le informazioni sul modo in cui il Servizio app esegue un'app Python: