Condividi tramite


Esercitazione: Compilare un'app PHP (Laravel) e un'istanza del server flessibile di Database di Azure per MySQL nel Servizio app di Azure

Il Servizio app di Azure offre un servizio di hosting Web con scalabilità elevata e applicazione automatica di patch basato sul sistema operativo Linux. Questa esercitazione illustra come creare un'app PHP sicura nel servizio app di Azure connessa a un database MySQL (usando il server flessibile di Database di Azure per MySQL). Al termine, sarà disponibile un'app Laravel in esecuzione nel Servizio app di Azure in Linux.

Screenshot dell'esempio di app Azure denominato Elenco attività che mostra nuove attività aggiunte.

In questa esercitazione verranno illustrate le procedure per:

  • Creare un'app PHP e MySQL protetta per impostazione predefinita in Azure
  • Configurare i segreti per la connessione a MySQL usando le impostazioni dell'app
  • Distribuire il codice dell'applicazione usando GitHub Actions
  • Aggiornare e ridistribuire l'app
  • Eseguire migrazioni di database in modo sicuro
  • Eseguire lo streaming dei log di diagnostica in Azure
  • Gestire l'app nel portale di Azure

Prerequisiti

Applicazione di esempio

Per seguire questa esercitazione, clonare o scaricare l'applicazione di esempio dal repository:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Per eseguire l'applicazione in locale, procedere nel modo seguente:

  • In .env configurare le impostazioni del database (ad esempio DB_DATABASE, DB_USERNAME e DB_PASSWORD) usando le impostazioni nel database del server flessibile di Database di Azure per MySQL locale. Per eseguire questo esempio, è necessaria un'istanza locale del server flessibile di Database di Azure per MySQL.

  • Dalla radice del repository avviare Laravel con i comandi seguenti:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 - Crea le risorse App Service e Database di Azure per MySQL Flexible Server

In questo passaggio si creano le risorse di Azure. I passaggi usati in questa esercitazione consentono di creare una configurazione del server flessibile del servizio app e del database di Azure per MySQL sicura per impostazione predefinita. Per il processo di creazione, specificare:

  • Nome dell'app Web. È il nome usato come parte del nome DNS per l'app Web sotto forma di https://<app-name>.azurewebsites.net.
  • Runtime per l'app. È qui che si seleziona la versione di PHP da usare per l'app.
  • Gruppo di risorse per l'app. Un gruppo di risorse consente di raggruppare (in un contenitore logico) tutte le risorse di Azure necessarie per l'applicazione.

Per creare risorse del Servizio app di Azure, accedere al portale di Azure e seguire questa procedura.

Istruzioni Schermata
Nel portale di Azure:
  1. Immettere "database dell'app Web" nella barra di ricerca nella parte superiore del portale di Azure.
  2. Selezionare l'elemento con etichetta App Web e database sotto l'intestazione Marketplace.
È anche possibile passare direttamente alla creazione guidata.
Screenshot che mostra come usare la casella di ricerca nella barra degli strumenti superiore per trovare la procedura guidata per la creazione di app Web e database.
Nella pagina Crea app Web e database compilare il modulo come indicato di seguito.
  1. Gruppo di risorse → Selezionare Crea nuovo e usare un nome di msdocs-laravel-mysql-tutorial.

  2. Area → Qualunque area di Azure nelle vicinanze.

  3. Nomemsdocs-laravel-mysql-XYZ dove XYZ è costituito da tre caratteri casuali. Il nome deve essere univoco in Azure

  4. Stack di runtimePHP 8.0.

    MySQL - Server flessibile è selezionato per impostazione predefinita come motore di database. Database di Azure per MySQL è un database MySQL completamente gestito come servizio in Azure, compatibile con le edizioni community più recenti.

  5. Prendere nota del nome del database generato automaticamente (<app-name>-database). Sarà necessario più avanti.

  6. Selezionare Rivedi e crea.

Al termine della convalida selezionare Crea.
Screenshot che mostra come configurare una nuova app e un nuovo database nella procedura guidata per la creazione di app Web e database.
Il completamento della distribuzione richiede alcuni minuti e crea le risorse seguenti:
  • Gruppo di risorse: contenitore per tutte le risorse create.
  • Piano di servizio app: definisce le risorse di calcolo per il Servizio app. Viene creato un piano Linux nel livello P1v2.
  • Servizio app: rappresenta l'app ed è in esecuzione nel piano di Servizio app.
  • Rete virtuale: è integrata con l'app del Servizio app e isola il traffico di rete back-end.
  • Server flessibile di Database di Azure per MySQL → Accessibile solo dalla rete virtuale. Vengono automaticamente creati un database e un utente nel server.
  • Zona DNS privato → Abilita la risoluzione DNS del server di database MySQL nella rete virtuale.
Al termine della distribuzione, selezionare il pulsante Vai alla risorsa. Si verrà reindirizzati direttamente all'app del servizio app.
Screenshot che mostra il modulo da compilare per creare un'app Web in Azure.

2 - Configurare la connettività del database

La creazione guidata ha generato le impostazioni dell'app da usare per connettersi al database, ma non in un formato ancora utilizzabile per il codice. In questo passaggio si modificano e si aggiornano le impostazioni dell'app in base al formato necessario per l'app.

Istruzioni Schermata
Nel menu a sinistra della pagina del servizio app selezionare Configurazione. Screenshot che mostra come aprire la pagina di configurazione nel servizio app.
Nella scheda Impostazioni applicazione della pagina Configurazione selezionare Modifica, aggiornare il campo Nome con i nuovi valori e selezionare OK per ognuna delle impostazioni seguenti.
Nome corrente Nuovo nome
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Screenshot che mostra come visualizzare la stringa di connessione generata automaticamente.
Creare una nuova impostazione del database MYSQL_ATTR_SSL_CA:
  1. Selezionare Nuova impostazione applicazione.

  2. Nel campo Nome immettere MYSQL_ATTR_SSL_CA.

  3. Nel campo Valore immettere /home/site/wwwroot/ssl/DigiCertGlobalRootG2.crt.pem.

    Questa impostazione dell'app punta al percorso del certificato TLS/SSL necessario per accedere al server MySQL. È incluso nel repository di esempio per praticità.

  4. Selezionare OK.

Screenshot che mostra come creare un'impostazione per l'app.
Creare le impostazioni aggiuntive seguenti per l'app seguendo la stessa procedura e quindi selezionare Salva.
  • APP_DEBUG: usare true come valore. Si tratta di una variabile di debug Laravel.

  • APP_KEY: usare base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= come valore. Si tratta di una variabile di crittografia Laravel.

    Importante

    Il valore APP_KEY viene usato qui per praticità. Per gli scenari di produzione, deve essere generato in modo specifico per la distribuzione usando php artisan key:generate --show nella riga di comando.

Screenshot che mostra tutte le impostazioni dell'app necessarie nella pagina di configurazione.

3 - Distribuire il codice di esempio

In questo passaggio si configurerà la distribuzione di GitHub usando GitHub Actions. È solo uno dei molti modi per eseguire la distribuzione nel servizio app, ma anche un ottimo modo per avere l'integrazione continua nel processo di distribuzione. Per impostazione predefinita, ogni git push al repository GitHub avvia l'azione di compilazione e distribuzione. Sarà necessario apportare alcune modifiche alla codebase con Visual Studio Code direttamente nel browser, quindi consentire la distribuzione automatica di GitHub Actions.

Istruzioni Schermata
In una nuova finestra del browser:
  1. Accedi all'account GitHub.

  2. Accedere a https://github.com/Azure-Samples/laravel-tasks.

  3. Selezionare Fork.

  4. Selezionare Crea fork.

Screenshot che mostra come creare un fork del repository GitHub di esempio.
Nella pagina GitHub aprire Visual Studio Code nel browser premendo il tasto .. Screenshot che mostra come aprire l'esperienza del browser di Visual Studio Code in GitHub.
In Visual Studio Code nel browser aprire config/database.php nell'elenco delle cartelle. Nella connessione mysql verificare che le impostazioni dell'app create in precedenza per la connessione MySQL siano già in uso (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). Screenshot che mostra Visual Studio Code nel browser e un file aperto.
Tornare alla pagina del servizio app e nel menu a sinistra selezionare Centro distribuzione. Screenshot che mostra come aprire il centro distribuzione nel servizio app.
Nella pagina Centro distribuzione:
  1. In Origine, selezionare GitHub. Per impostazione predefinita, GitHub Actions è selezionato come provider di compilazione.

  2. Accedere all'account GitHub e seguire la richiesta di autorizzare Azure.

  3. In Organizzazione selezionare l'account.

  4. In Repository, selezionare laravel-tasks.

  5. Per Ramo selezionare principale.

  6. Nel menu in alto, selezionare Salva.

Il Servizio app esegue il commit di un file del flusso di lavoro nella directory .github/workflows del repository GitHub selezionato.
Screenshot che mostra come configurare CI/CD con GitHub Actions.
Nella pagina Centro distribuzione:
  1. Selezionare Log. È già stata avviata l’esecuzione di una distribuzione.

  2. Nell’elemento di log per l'esecuzione della distribuzione selezionare Compila/Distribuisci log.

    Si viene reindirizzati al repository GitHub dove si noterà che l'azione GitHub è in esecuzione. Il file del flusso di lavoro definisce due fasi separate, compilare e distribuire.

Screenshot che mostra come aprire i log di distribuzione nel centro distribuzione.
Per apportare modifiche al codice, passare al browser di Visual Studio Code:
  1. Selezionare l'estensione Controllo del codice sorgente.

  2. Accanto al file modificato, ad esempio database.php, selezionare + per preparare le modifiche.

  3. Nella casella di testo digitare un messaggio di commit, ad esempio add certificate.

  4. Selezionare il segno di spunta per eseguire il commit e il push in GitHub.

Se si torna alla pagina Centro distribuzione, si noterà una nuova voce di log perché è stata avviata un'altra esecuzione. Attendere il completamento dell'esecuzione. Sono necessari circa 15 minuti.

Suggerimento

L'azione di GitHub è definita dal file nel repository GitHub, in .github/workflow. È possibile velocizzare l'operazione personalizzando il file.

Screenshot che mostra come eseguire il commit delle modifiche nell'esperienza del browser di Visual Studio Code.

4 - Generare lo schema del database

La procedura di creazione guidata inserisce l'istanza del server flessibile del Database di Azure per MySQL dietro un endpoint privato, che è quindi accessibile solo dalla rete virtuale. Poiché l'app del servizio app è già integrata con la rete virtuale, il modo più semplice per eseguire le migrazioni di database con il proprio database è direttamente dall'interno del contenitore del servizio app.

Istruzioni Schermata
Nella pagina del servizio app:
  1. Nel menu a sinistra selezionare SSH.

  2. Selezionare Vai.

Nel browser viene aperta una sessione SSH con il contenitore del servizio app. In alternativa, è possibile passare direttamente a https://<app-name>.scm.azurewebsites.net/webssh/host.
Screenshot che mostra come aprire la shell SSH per l'app dal portale di Azure.
Nel terminale SSH:
  1. CD nella radice del codice dell'applicazione:

    cd /home/site/wwwroot
    
  2. Eseguire le migrazioni di database dalla radice dell'applicazione.

    php artisan migrate --force
    

    Note

    Solo le modifiche apportate ai file in /home possono essere mantenute dopo i riavvii dell'app. Le modifiche esterne a /home non sono persistenti.

Screenshot che mostra i comandi da eseguire nella shell SSH e il relativo output.

5 - Modificare la radice del sito

Il ciclo di vita dell'applicazione Laravel inizia invece nella directory /public. Il contenitore PHP 8.0 predefinito per il servizio app usa Nginx, che si avvia nella directory radice dell'applicazione. Per modificare la radice del sito, è necessario modificare il file di configurazione Nginx nel contenitore PHP 8.0 (/etc/nginx/sites-available/default). Per praticità, il repository di esempio contiene un file di configurazione personalizzato denominato impostazione predefinita. Come indicato in precedenza, non è opportuno sostituire questo file usando la shell SSH, perché le modifiche andranno perse dopo il riavvio dell'app.

Istruzioni Schermata
Nella pagina del servizio app:
  1. Nel menu a sinistra selezionare Configurazione.

  2. Selezionare la scheda Impostazioni generali.

Screenshot che mostra come aprire la scheda delle impostazioni generali nella pagina di configurazione del servizio app.
Nella scheda Impostazioni generali:
  1. Nel box Comando di avvio immettere il comando seguente: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Sostituisce il file di configurazione Nginx nel contenitore PHP 8.0 e riavvia Nginx. Questa configurazione garantisce che questa modifica venga apportata al contenitore ogni volta che viene avviata.

  2. Selezionare Salva.

Screenshot che mostra come configurare un comando di avvio nel servizio app.

6 - Passare all'app

Istruzioni Schermata
Nella pagina del servizio app:
  1. Nel menu a sinistra selezionare Panoramica.

  2. Selezionare l'URL dell'app.

    È anche possibile passare direttamente a https://<app-name>.azurewebsites.net.

Screenshot che mostra come avviare un servizio app dal portale di Azure.
Aggiungere alcune attività all'elenco. Congratulazioni, si sta eseguendo un'app PHP guidata dai dati nel Servizio app di Azure. Screenshot dell'app Laravel in esecuzione nel servizio app.

7 - Trasmettere i log di diagnostica

Istruzioni Schermata
Nella pagina del servizio app:
  1. Nel menu a sinistra, selezionare Log di Servizio app.

  2. In Registrazione applicazione selezionare File System.

Screenshot che mostra come abilitare i log nativi nel servizio app nel portale di Azure.
Nel menu a sinistra selezionare Flusso di log. Vengono visualizzati i log per l'app, inclusi i log della piattaforma e i log dall'interno del contenitore. Screenshot che mostra come visualizzare il flusso di log nel portale di Azure.

Pulire le risorse

Al termine, è possibile eliminare tutte le risorse dalla sottoscrizione di Azure eliminando il gruppo di risorse.

Istruzioni Schermata
Nella barra di ricerca nella parte superiore del portale di Azure:
  1. Immettere il nome del gruppo di risorse.

  2. Selezionare il gruppo di risorse.

Screenshot che mostra come cercare e passare a un gruppo di risorse nel portale di Azure.
Nella pagina del gruppo di risorse selezionare Elimina gruppo di risorse. Screenshot che mostra il percorso del pulsante Elimina gruppo di risorse nel portale di Azure.
  1. Immettere il nome del gruppo di risorse per confermare l'eliminazione.

  2. Selezionare Elimina.

Screenshot della finestra di dialogo di conferma per l'eliminazione di un gruppo di risorse nel portale di Azure.

Domande frequenti

Quanto costa questa configurazione?

I prezzi per le risorse di creazione sono i seguenti:

Come ci si connette a un database di Azure Database for MySQL Flexible Server protetto dietro una rete virtuale?

Per connettersi a un database del server flessibile di Database di Azure per MySQL, è possibile usare diversi metodi basati su strumenti e ambienti a disposizione:

  • Accesso agli strumenti da riga di comando:
    • Usare il comando mysql dal terminale SSH dell'app per l'accesso di base.
  • Strumenti desktop (ad esempio, MySQL Workbench):
    • Uso del tunneling SSH con l'interfaccia della riga di comando di Azure:
      • Creare una sessione SSH per l'app Web usando l'interfaccia della riga di comando di Azure.
      • Usare la sessione SSH per eseguire il tunneling del traffico verso MySQL.
    • Uso della VPN da sito a sito o della macchina virtuale di Azure:
      • Il computer deve far parte della rete virtuale.
      • Valutare l'opportunità di usare:
        • Una macchina virtuale di Azure collegata a una delle subnet.
        • Un computer in una rete locale con una connessione VPN da sito a sito alla rete virtuale di Azure.
  • Integrazione di Azure Cloud Shell:

Come funziona lo sviluppo di app locali con GitHub Actions?

Prendere il file del flusso di lavoro generato automaticamente dal servizio app come esempio, ognigit push avvia una nuova esecuzione di compilazione e distribuzione. Da un clone locale del repository GitHub si effettua il push degli aggiornamenti desiderati in GitHub. Ad esempio:

git add .
git commit -m "<some-message>"
git push origin main

Perché la distribuzione di GitHub Actions è così lenta?

Il file del flusso di lavoro generato automaticamente dal servizio app definisce l'esecuzione di due processi, build-then-deploy. Poiché ogni processo viene eseguito nel proprio ambiente pulito, il file del flusso di lavoro garantisce che il processo deploy abbia accesso ai file dal processo build:

La maggior parte del tempo impiegato dal processo a due processi viene impiegato per caricare ed effettuare il download degli artefatti. Se si desidera, è possibile semplificare il file del flusso di lavoro combinando i due processi in uno, eliminando così la necessità di eseguire i passaggi di caricamento e download.

Summary

In questa esercitazione sono state illustrate le procedure per:

  • Creare un'app PHP protetta per impostazione predefinita e il server flessibile di Database di Azure per MySQL in Azure
  • Configurare i segreti di connessione al server flessibile di Database di Azure per MySQL usando le impostazioni dell'app
  • Distribuire il codice dell'applicazione usando GitHub Actions
  • Aggiornare e ridistribuire l'app
  • Eseguire migrazioni di database in modo sicuro
  • Eseguire lo streaming dei log di diagnostica in Azure
  • Gestire l'app nel portale di Azure