Esercitazione: Distribuire un'app PHP, MySQL e Redis nel servizio app di Azure

Questa esercitazione illustra come creare un'app PHP sicura in app Azure Servizio connesso a un database MySQL (usando Database di Azure per MySQL server flessibile). Si distribuirà anche una Cache Redis di Azure per abilitare il codice di memorizzazione nella cache nell'applicazione. Il servizio app di Azure è un servizio di hosting Web altamente scalabile e scalabile che può distribuire facilmente app in Windows o Linux. 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.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Applicazione di esempio

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

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

Se si vuole eseguire l'applicazione in locale, eseguire le operazioni seguenti:

  • In .env configurare le impostazioni del database (ad esempio DB_DATABASE, DB_USERNAMEe DB_PASSWORD) usando le impostazioni nel database MySQL locale. Per eseguire questo esempio è necessario un server MySQL locale.

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

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

1 - Creare risorse servizio app e MySQL

In questo passaggio si creano le risorse di Azure. I passaggi usati in questa esercitazione creano una configurazione servizio app e 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.

Passaggio 1: 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 creazione guidata di App Web e database.

Passaggio 2: 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 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 runtime → PHP 8.2.
  5. Aggiungere cache di Azure per Redis? → Sì.
  6. Piano di hosting: Basic. Quando si è pronti, è possibile passare a un piano tariffario di produzione in un secondo momento.
  7. 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.
  8. Selezionare Rivedi e crea.
  9. Al termine della convalida selezionare Crea.

Screenshot che mostra come configurare una nuova app e un nuovo database nella procedura guidata App Web e database.

Passaggio 3: il completamento della distribuzione richiede alcuni minuti. Al termine della distribuzione, selezionare il pulsante Vai alla risorsa. Si accede direttamente all'app del servizio app, ma vengono create 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 Basic.
  • 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.
  • Gli endpoint privati → endpoint di Access per il server di database e la cache Redis nella rete virtuale.
  • Le interfacce di rete → Rappresenta gli indirizzi IP privati, uno per ognuno degli endpoint privati.
  • Database di Azure per MySQL server flessibile → Accessibile solo da dietro l'endpoint privato. Vengono automaticamente creati un database e un utente nel server.
  • cache di Azure per Redis → Accessibile solo da dietro l'endpoint privato.
  • DNS privato zone → Abilitare la risoluzione DNS del server di database e la cache Redis nella rete virtuale.

Screenshot che mostra il processo di distribuzione completato.

2 - Configurare la connettività del database

Passaggio 1: Nel menu a sinistra della pagina Servizio app selezionare Configurazione.

Screenshot che mostra come aprire la pagina di configurazione nel servizio app.

Passaggio 2:

  1. Trovare le impostazioni dell'app che iniziano con AZURE_MYSQL_. Sono stati generati dal nuovo database MySQL dalla creazione guidata.
  2. Trovare anche le impostazioni dell'app che iniziano con AZURE_REDIS_. Sono stati generati dalla nuova cache Redis dalla creazione guidata. Per configurare l'applicazione, questo nome è tutto ciò di cui hai bisogno.
  3. Se si desidera, è possibile selezionare il pulsante Modifica a destra di ogni impostazione e visualizzarne o copiarne il valore. Successivamente, si modificherà il codice dell'applicazione per usare queste impostazioni.

Screenshot che mostra come creare un'impostazione dell'app.

Passaggio 3: Nella scheda Impostazioni applicazione della pagina Configurazione creare un'impostazione CACHE_DRIVER :

  1. Selezionare Nuova impostazione applicazione.
  2. Nel campo Nome immettere CACHE_DRIVER.
  3. Nel campo Valore immettere redis.
  4. Seleziona OK. CACHE_DRIVER è già usato nel codice dell'applicazione Laravel. Questa impostazione indica a Laravel di usare Redis come cache.

Screenshot che mostra come visualizzare la stringa di connessione generata automaticamente.

Passaggio 4: Usare gli stessi passaggi del passaggio 3, creare le impostazioni dell'app seguenti:

  • MYSQL_ATTR_SSL_CA: usare /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem come valore. Questa impostazione dell'app punta al percorso del certificato TLS/SSL necessario per accedere al server MySQL. È incluso nel repository di esempio per praticità.
  • LOG_CHANNEL: usare stderr come valore. Questa impostazione indica a Laravel di inviare tramite pipe i log a stderr, che lo rende disponibile per i log di servizio app.
  • APP_DEBUG: usare true come valore. Si tratta di una variabile di debug Laravel che abilita le pagine in modalità di debug.
  • APP_KEY: usare base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= come valore. Si tratta di una variabile di crittografia Laravel.
  1. Nella barra dei menu in alto selezionare Salva.
  2. Quando richiesto, selezionare Continua.

Screenshot che mostra come salvare le impostazioni nella pagina di configurazione.

Importante

Il APP_KEY valore 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.

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 nel repository GitHub avvia l'azione di compilazione e distribuzione. Verranno apportate alcune modifiche alla codebase con Visual Studio Code direttamente nel browser, quindi si consente la distribuzione automatica di GitHub Actions.

Passaggio 1: in una nuova finestra del browser:

  1. Accedi all'account GitHub.
  2. Accedere a https://github.com/Azure-Samples/laravel-tasks.
  3. Seleziona Fork.
  4. Selezionare Crea fork.

Screenshot che mostra come creare un fork del repository GitHub di esempio.

Passaggio 2: 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.

Passaggio 3: In Visual Studio Code nel browser aprire config/database.php in Esplora risorse. Trovare la mysql sezione e apportare le modifiche seguenti:

  1. Sostituisci DB_HOST con AZURE_MYSQL_HOST.
  2. Sostituisci DB_DATABASE con AZURE_MYSQL_DBNAME.
  3. Sostituisci DB_USERNAME con AZURE_MYSQL_USERNAME.
  4. Sostituisci DB_PASSWORD con AZURE_MYSQL_PASSWORD.
  5. Sostituisci DB_PORT con AZURE_MYSQL_PORT. Tenere presente che queste AZURE_MYSQL_ impostazioni sono state create automaticamente dalla creazione guidata.

Screenshot che mostra Visual Studio Code nel browser e un file aperto con variabili MySQL modificate.

Passaggio 4: In config/database.php scorrere fino alla sezione Redis cache e apportare le modifiche seguenti:

  1. Sostituisci REDIS_HOST con AZURE_REDIS_HOST.
  2. Sostituisci REDIS_PASSWORD con AZURE_REDIS_PASSWORD.
  3. Sostituisci REDIS_PORT con AZURE_REDIS_PORT.
  4. Sostituisci REDIS_CACHE_DB con AZURE_REDIS_DATABASE.
  5. Nella stessa sezione aggiungere una riga con 'scheme' => 'tls',. Questa configurazione indica a Laravel di usare la crittografia per connettersi a Redis. Tenere presente che queste AZURE_REDIS_ impostazioni sono state create automaticamente dalla creazione guidata.

Screenshot che mostra Visual Studio Code nel browser e un file aperto con variabili Redis modificate.

Passaggio 5:

  1. Selezionare l'estensione Controllo del codice sorgente.
  2. Nella casella di testo digitare un messaggio di commit come Configure DB & Redis variables.
  3. Selezionare Commit e push.

Screenshot che mostra le modifiche di cui è stato eseguito il commit e il push in GitHub.

Passaggio 6: Tornare alla pagina servizio app, nel menu a sinistra selezionare Centro distribuzione.

Screenshot che mostra come aprire il Centro distribuzione nel servizio app.

Passaggio 7: 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-task.
  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 nel repository GitHub scelto, nella directory .github/workflows.

Screenshot che mostra come configurare CI/CD con GitHub Actions.

Passaggio 8: 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.

Screenshot che mostra come aprire i log di distribuzione nel Centro distribuzione.

Passaggio 9: Si è eseguiti nel repository GitHub e si noterà che l'azione GitHub è in esecuzione. Il file del flusso di lavoro definisce due fasi separate, compilare e distribuire. Attendere che l'esecuzione di GitHub visualizzi lo stato Operazione completata. Sono necessari circa 15 minuti.

Screenshot che mostra un'esecuzione di GitHub in corso.

4 - Generare lo schema del database

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

Passaggio 1: Tornare alla pagina servizio app, nel menu a sinistra selezionare SSH.

Screenshot che mostra come aprire la shell SSH per l'app dal portale di Azure.

Passaggio 2: nel terminale SSH:

  1. Eseguire cd /home/site/wwwroot. Ecco tutti i file distribuiti.
  2. Eseguire php artisan migrate --force. Se ha esito positivo, servizio app si connette correttamente al database MySQL. Solo le modifiche apportate ai file in /home possono essere mantenute dopo i riavvii dell'app. Le modifiche al di fuori di /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 predefinito per servizio app usa Nginx, che inizia nella directory radice dell'applicazione. Per modificare la radice del sito, è necessario modificare il file di configurazione Nginx nel contenitore PHP (/etc/nginx/sites-available/default). Per praticità, il repository di esempio contiene un file di configurazione personalizzato denominato default. Come indicato in precedenza, non si vuole sostituire questo file usando la shell SSH, perché la modifica è esterna a /home e verrà persa dopo un riavvio dell'app.

Passaggio 1:

  1. Nel menu a sinistra selezionare Configurazione.
  2. Seleziona la scheda Impostazioni generali.

Screenshot che mostra come aprire la scheda delle impostazioni generali nella pagina di configurazione di servizio app.

Passaggio 2: nella scheda Impostazioni generali:

  1. Nella casella Comando di avvio immettere il comando seguente: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. Seleziona Salva. Il comando sostituisce il file di configurazione Nginx nel contenitore PHP e riavvia Nginx. Questa configurazione garantisce che la stessa modifica venga apportata al contenitore ogni volta che viene avviata.

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

6 - Passare all'app

Passaggio 1: nella pagina 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.

Passaggio 2: Aggiungere alcune attività all'elenco. Congratulazioni, si sta eseguendo un'app PHP sicura basata sui dati nel servizio app Azure.

Screenshot dell'app Laravel in esecuzione in servizio app.

Suggerimento

L'applicazione di esempio implementa il modello cache-aside. Quando si ricarica la pagina dopo aver apportato modifiche ai dati, il tempo di risposta nella pagina Web mostra un tempo molto più rapido perché carica i dati dalla cache anziché dal database.

7 - Trasmettere i log di diagnostica

Il Servizio app di Azure acquisisce tutti i messaggi archiviati nella console per facilitare la diagnosi dei problemi con l'applicazione. L'app di esempio restituisce messaggi di log della console in ognuno dei relativi endpoint per illustrare questa funzionalità. Per impostazione predefinita, la funzionalità di registrazione di Laravel ,ad esempio , Log::info()restituisce un file locale. L'impostazione LOG_CHANNEL dell'app precedente rende le voci di log accessibili dal flusso di log servizio app.

Passaggio 1: Nella pagina Servizio app:

  1. Nel menu a sinistra selezionare Log di servizio app.
  2. In Application Logging, selezionare File System.

Screenshot che mostra come abilitare i log nativi nel servizio app nel portale di Azure.

Passaggio 2: dal menu a sinistra selezionare Flusso di log. Vengono visualizzati i log per l'app, inclusi i log e i log della piattaforma 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.

Passaggio 1: 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 illustra come cercare e passare a un gruppo di risorse nel portale di Azure.

Passaggio 2: nella pagina del gruppo di risorse selezionare Elimina gruppo di risorse.

Screenshot che mostra la posizione del pulsante Elimina gruppo di risorse nel portale di Azure.

Passaggio 3:

  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:

  • Il piano di servizio app viene creato nel livello Basic e può essere ridimensionato verso l'alto o verso il basso. Vedere Prezzi del servizio app.
  • Il server flessibile MySQL viene creato nel livello B1ms ed è possibile aumentarne o ridurne le prestazioni. Con un account gratuito di Azure, il livello B1ms è gratuito per 12 mesi, fino ai limiti mensili. Vedere Prezzi di Database di Azure per MySQL.
  • Cache Redis di Azure viene creata nel livello Basic con le dimensioni minime della cache. È previsto un costo ridotto associato a questo livello. È possibile aumentare le prestazioni fino a livelli di prestazioni superiori per disponibilità, clustering e altre funzionalità più elevate. Vedere Prezzi di cache di Azure per Redis.
  • La rete virtuale non comporta alcun addebito a meno che non si configurino funzionalità aggiuntive, ad esempio il peering. Vedere Prezzi della rete virtuale di Azure.
  • La zona DNS privata comporta un piccolo addebito. Vedere Prezzi di DNS di Azure.

Ricerca per categorie connettersi al database MySQL protetto dietro la rete virtuale con altri strumenti?

  • Per l'accesso di base da uno strumento da riga di comando, è possibile eseguire mysql dal terminale SSH dell'app.
  • Per connettersi da uno strumento desktop come MySQL Workbench, il computer deve trovarsi all'interno della rete virtuale. Ad esempio, potrebbe trattarsi di una macchina virtuale di Azure connessa a una delle subnet o di un computer in una rete locale con una connessione VPN da sito a sito con la rete virtuale di Azure.
  • È anche possibile integrare Azure Cloud Shell con la rete virtuale.

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 da 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 deploy processo abbia accesso ai file dal build processo:

La maggior parte del tempo impiegato dal processo a due processi viene impiegato per caricare e scaricare gli artefatti. Se si vuole, è 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.

Passaggi successivi

Passare all'esercitazione successiva per informazioni su come proteggere l'app con un dominio e un certificato personalizzati.

 Proteggere con dominio personalizzato e certificato di protezione

In alternativa, consultare altre risorse: