Tutoriel : créer une application PHP (Laravel) et Azure Database pour MySQL – Serveur flexible sur Azure App Service

S’APPLIQUE À : Azure Database pour MySQL - Serveur flexible

Azure App Service fournit un service d’hébergement web hautement évolutif et appliquant des mises à jour correctives automatiques en utilisant le système d’exploitation Linux. Ce tutoriel montre comment créer une application PHP sécurisée dans Azure App Service connectée à une base de données MySQL (à l’aide d’Azure Database pour MySQL - Serveur flexible). Quand vous aurez terminé, vous disposerez d’une application Laravel s’exécutant sur Azure App Service sur Linux.

Screenshot of the Azure app example titled Task List showing new tasks added.

Dans ce tutoriel, vous allez apprendre à :

  • Créer une application MySQL et PHP sécurisée par défaut dans Azure
  • Configurer les secrets de connexion à MySQL à l’aide des paramètres d’application
  • Déployer du code d’application à l’aide de GitHub Actions
  • Mise à jour et redéploiement de l’application
  • Exécuter des migrations de base de données de manière sécurisée
  • Diffusion des journaux de diagnostic à partir d’Azure
  • Gérer l’application dans le portail Azure

Prérequis

Exemple d’application

Pour suivre ce tutoriel, vous pouvez cloner ou télécharger l’exemple d’application dans le dépôt :

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

Si vous souhaitez exécuter l’application localement, effectuez les étapes suivantes :

  • Dans .env, configurez les paramètres de base de données (comme DB_DATABASE, DB_USERNAME et DB_PASSWORD) à l’aide des paramètres de votre base de données locale Azure Database pour MySQL – Serveur flexible. Vous avez besoin d’une instance locale d’Azure Database pour MySQL – Serveur flexible pour exécuter cet exemple.

  • À partir de la racine du dépôt, démarrez Laravel avec les commandes suivantes :

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

1 – Créer des ressources App Service et Azure Database pour MySQL – Serveur flexible

Dans cette étape, vous créez les ressources Azure. Les étapes de ce tutoriel permettent de créer une configuration App Service et Azure Database pour MySQL – Serveur flexible sécurisée par défaut. Pour le processus de création, vous devez spécifier :

  • Le nom de l’application web. Il s’agit du nom utilisé dans le cadre du nom DNS de votre application web sous la forme https://<app-name>.azurewebsites.net.
  • Le runtime pour l’application. C’est là que vous sélectionnez la version de PHP à utiliser pour votre application.
  • Le groupe de ressources pour l’application. Un groupe de ressources vous permet de regrouper (dans un conteneur logique) toutes les ressources Azure nécessaires à l’application.

Connectez-vous au portail Azure et procédez comme suit pour créer vos ressources Azure App Service.

Instructions Capture d'écran
Dans le portail Azure :
  1. Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
  2. Sélectionnez l’élément intitulé Application web + Base de données sous le titre Place de marché.
Vous pouvez également accéder directement à l’Assistant de création.
A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.
Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.
  1. Groupe de ressources → Sélectionnez Créer nouveau et utilisez le nom msdocs-laravel-mysql-tutorial.

  2. Région → Toute région Azure près de chez vous.

  3. Nommsdocs-laravel-mysql-XYZ, où XYZ représente trois caractères aléatoires quelconques. Ce nom doit être unique au sein d’Azure.

  4. Pile d’exécutionPHP 8.0.

    MySQL - Serveur flexible est sélectionné par défaut comme moteur de base de données. Azure Database pour MySQL est une base de données en tant que service MySQL complètement managée sur Azure, compatible avec les dernières éditions communautaires.

  5. Notez le nom de la base de données qui est généré pour vous (<app-name>-database). Vous en aurez besoin ultérieurement.

  6. Cliquez sur Vérifier + créer.

Une fois la validation terminée, cliquez sur Créer.
A screenshot showing how to configure a new app and database in the Web App + Database wizard.
Le déploiement prend quelques minutes et crée les ressources suivantes :
  • Groupe de ressources → Conteneur pour toutes les ressources créées.
  • Plan App Service → Définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau P1v2.
  • App Service → Représente votre application et s’exécute dans le plan App Service.
  • Réseau virtuel → Intégré à l’application App Service, isole le trafic réseau principal.
  • Azure Database pour MySQL - Serveur flexible → Accessible uniquement à partir du réseau virtuel. Une base de données et un utilisateur sont créés pour vous sur le serveur.
  • Zone DNS privée → Active la résolution DNS du serveur de base de données MySQL dans le réseau virtuel.
Une fois le déploiement terminé, cliquez sur le bouton Accéder à la ressource. Vous êtes directement redirigé vers l’application App Service.
A screenshot showing the form to fill out to create a web app in Azure.

2 - Configurer la connectivité de la base de données

L’Assistant de création a généré à votre place des paramètres d’application à utiliser pour vous connecter à la base de données, mais celle-ci n’est pas encore dans un format utilisable pour votre code. Dans cette étape, vous créez et mettez à jour des paramètres d’application dans le format nécessaire à votre application.

Instructions Capture d'écran
Dans le menu de gauche, dans la page App Service, sélectionnez Configuration. A screenshot showing how to open the configuration page in App Service.
Sous l’onglet Paramètres de l’application de la page Configuration, pour chacun des paramètres suivants, cliquez sur Modifier, mettez à jour le champ Nom avec de nouvelles valeurs, puis cliquez sur OK.
Nom actuel Nouveau Nom
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
A screenshot showing how to see the autogenerated connection string.
Créez un paramètre de base de données MYSQL_ATTR_SSL_CA :
  1. Cliquez sur Nouveau paramètre d’application.

  2. Dans le champ Nom, entrez MYSQL_ATTR_SSL_CA.

  3. Dans le champ Valeur, entrez /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem.

    Ce paramètre d’application pointe vers le chemin du certificat TLS/SSL dont vous avez besoin pour accéder au serveur MySQL. Il est inclus dans l’exemple de dépôt pour des raisons pratiques.

  4. Cliquez sur OK.

A screenshot showing how to create an app setting.
Créez les paramètres d’application supplémentaires ci-après en suivant les mêmes étapes, puis cliquez sur Enregistrer.
  • APP_DEBUG : utilisez true comme valeur. Il s’agit d’une variable de débogage Laravel.

  • APP_KEY : utilisez base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= comme valeur. Il s’agit d’une variable de chiffrement Laravel.

    Important

    Cette valeur APP_KEY est utilisée ici pour des raisons pratiques. Pour les scénarios de production, elle doit être générée spécifiquement pour votre déploiement avec php artisan key:generate --show dans la ligne de commande.

A screenshot showing all the required app settings in the configuration page.

3 - Déployer l’exemple de code

Dans cette étape, vous allez configurer le déploiement GitHub avec GitHub Actions. Cette méthode fait partie des nombreuses façons de déployer sur App Service, mais elle permet également de bénéficier d’une intégration continue dans votre processus de déploiement. Par défaut, chaque git push dans votre dépôt GitHub lance l’action de build et de déploiement. Vous apporterez des modifications à votre codebase avec Visual Studio Code directement dans le navigateur, puis laisserez GitHub Actions déployer automatiquement pour vous.

Instructions Capture d'écran
Dans une nouvelle fenêtre de navigateur :
  1. Connectez-vous à votre compte GitHub.

  2. Accédez à https://github.com/Azure-Samples/laravel-tasks.

  3. Cliquez sur Dupliquer (fork) .

  4. Cliquez sur Créer une duplication.

A screenshot showing how to create a fork of the sample GitHub repository.
Dans la page GitHub, ouvrez Visual Studio Code dans le navigateur en appuyant sur la touche .. A screenshot showing how to open the Visual Studio Code browser experience in GitHub.
Dans le navigateur Visual Studio Code, ouvrez config/database.php dans l’Explorateur. En accédant à la connexion mysql, vous pouvez voir que les paramètres d’application que vous avez créés précédemment pour la connexion MySQL sont déjà utilisés (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). A screenshot showing Visual Studio Code in the browser and an opened file.
De retour dans la page App Service, sélectionnez Centre de déploiement dans le menu de gauche. A screenshot showing how to open the deployment center in App Service.
Dans la page Centre de déploiement :
  1. Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.

  2. Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.

  3. Dans Organisation, sélectionnez votre compte.

  4. Dans Dépôt, sélectionnez laravel-tasks.

  5. Dans Branche, sélectionnez principal.

  6. Cliquez sur Enregistrer dans le menu supérieur.

App Service valide un fichier de workflow dans le dépôt GitHub sélectionné, au sein du répertoire .github/workflows.
A screenshot showing how to configure CI/CD using GitHub Actions.
Dans la page Centre de déploiement :
  1. Sélectionnez Journaux d’activité. Une exécution de déploiement a déjà démarré.

  2. Dans l’élément de journal de l’exécution du déploiement, sélectionnez Générer/Déployer des journaux.

    Vous êtes dirigé vers votre dépôt GitHub où vous voyez que l’action GitHub est en cours d’exécution. Le fichier de workflow définit deux étapes distinctes : la build et le déploiement.

A screenshot showing how to open deployment logs in the deployment center.
Pour apporter des modifications à votre code, accédez à Visual Studio Code dans le navigateur :
  1. Sélectionnez l’extension Contrôle de code source.

  2. À côté du fichier modifié, par exemple database.php, sélectionnez + pour indexer vos modifications.

  3. Dans la zone de texte, tapez un message de validation, par exemple add certificate.

  4. Sélectionnez la coche pour valider et envoyer (push) vers GitHub.

Si vous revenez à la page Centre de déploiement, vous verrez une nouvelle entrée de journal, car une autre exécution a démarré. Attendez la fin de l’exécution. Cela prend environ 15 minutes.

Conseil

L’action GitHub est définie par le fichier dans votre dépôt GitHub, dans .github/workflow. Vous pouvez accélérer cette opération en personnalisant le fichier.

A screenshot showing how to commit your changes in the Visual Studio Code browser experience.

4 – Générer le schéma de la base de données

L’Assistant de création place l’instance d’Azure Database pour MySQL – Serveur flexible derrière un point de terminaison privé. Elle est donc accessible uniquement à partir du réseau virtuel. Étant donné que l’application App Service est déjà intégrée au réseau virtuel, le moyen le plus simple d’exécuter des migrations de base de données avec votre base de données est de le faire directement à partir du conteneur App Service.

Instructions Capture d'écran
Dans la page App Service :
  1. Dans le menu gauche, sélectionnez SSH.

  2. Sélectionnez Go.

Une session SSH avec votre conteneur App Service s’ouvre dans le navigateur. Si vous le souhaitez, vous pouvez accéder directement à https://<app-name>.scm.azurewebsites.net/webssh/host à la place.
A screenshot showing how to open the SSH shell for your app from the Azure portal.
Dans le terminal SSH :
  1. CD à la racine de votre code d’application :

    cd /home/site/wwwroot
    
  2. Exécutez les migrations de base de données à partir de la racine de votre application.

    php artisan migrate --force
    

    Notes

    Seules les modifications apportées aux fichiers dans /home peuvent être conservées au-delà des redémarrages d’application. Les modifications effectuées en dehors de /home ne sont pas conservées.

A screenshot showing the commands to run in the SSH shell and their output.

5 - Modifier la racine du site

Le cycle de vie de l’application Laravel commence dans le répertoire /public. Le conteneur PHP 8.0 par défaut pour App Service utilise Nginx, qui démarre dans le répertoire racine de l’application. Pour changer la racine du site, vous devez modifier le fichier de configuration Nginx dans le conteneur PHP 8.0 (/etc/nginx/sites-available/default). Pour des raisons pratiques, l’exemple de dépôt contient un fichier de configuration personnalisé appelé default. Comme indiqué précédemment, vous ne devez pas remplacer ce fichier à l’aide de l’interpréteur de commandes SSH, sinon vos modifications seront perdues après le redémarrage de l’application.

Instructions Capture d'écran
Dans la page App Service :
  1. Dans le menu de gauche, sélectionnez Configuration.

  2. Sélectionnez l’onglet Paramètres généraux.

A screenshot showing how to open the general settings tab in the configuration page of App Service.
Sous l’onglet Paramètres généraux :
  1. Dans la zone Commande de démarrage, entrez la commande suivante : cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Cela remplace le fichier de configuration Nginx dans le conteneur PHP 8.0 et redémarre Nginx. Cette configuration garantit que cette modification est apportée au conteneur chaque fois qu’il démarre.

  2. Sélectionnez Enregistrer.

A screenshot showing how to configure a startup command in App Service.

6 - Accéder à l’application

Instructions Capture d'écran
Dans la page App Service :
  1. Dans le menu de gauche, sélectionnez Vue d’ensemble.

  2. Sélectionnez l’URL de votre application.

    Vous pouvez également naviguer directement vers https://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.
Ajoutez quelques tâches à la liste. Félicitations, vous exécutez une application PHP orientée données dans Azure App Service. A screenshot of the Laravel app running in App Service.

7 - Diffuser les journaux de diagnostic

Instructions Capture d'écran
Dans la page App Service :
  1. Dans le menu de gauche, sélectionnez Journaux App Service.

  2. Sous Application Logging, sélectionnez Système de fichiers.

A screenshot showing how to enable native logs in App Service in the Azure portal.
Dans le menu de gauche, cliquez sur Flux de journal. Vous voyez les journaux de votre application, y compris les journaux de plateforme et les journaux d’activité issus de l’intérieur du conteneur. A screenshot showing how to view the log stream in the Azure portal.

Nettoyer les ressources

Lorsque vous avez terminé, vous pouvez supprimer toutes les ressources de votre abonnement Azure en supprimant le groupe de ressources.

Instructions Capture d'écran
Dans la barre de recherche située en haut du portail Azure :
  1. Entrez le nom du groupe de ressources.

  2. Sélectionnez le groupe de ressources.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.
Dans la page du groupe de ressources, cliquez sur Supprimer le groupe de ressources. A screenshot showing the location of the Delete Resource Group button in the Azure portal.
  1. Entrer le nom du groupe de ressources pour confirmer la suppression.

  2. Cliquez sur Supprimer.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal.

Forum aux questions

Quel est le coût de cette configuration ?

Le prix des ressources de création est calculé comme suit :

  • Le plan App Service est créé au niveau Premium V2 et peut faire l’objet d’un scale-up ou d’un scale-down. Consultez la tarification App Service.
  • L’instance d’Azure Database pour MySQL – Serveur flexible est créée au niveau B1ms et peut faire l’objet d’un scale-up ou d’un scale-down. Avec un compte gratuit Azure, le niveau B1ms est gratuit pendant 12 mois, sauf en cas de dépassement des limites mensuelles. Consultez les prix d’Azure Database pour MySQL – Serveur flexible.
  • Le réseau virtuel n’entraîne pas de frais, sauf si vous configurez des fonctionnalités supplémentaires, telles que le peering. Consultez Tarification du réseau virtuel Azure.
  • La zone DNS privée entraîne des frais minimes. Consultez la tarification d’Azure DNS.

Comment faire pour se connecter à une base de données Azure Database pour MySQL – Serveur flexible sécurisée derrière un réseau virtuel ?

Pour vous connecter à une base de données Azure Database pour MySQL – Serveur flexible, vous pouvez utiliser plusieurs méthodes en fonction des outils et environnements à votre disposition :

  • Accès aux outils en ligne de commande :
    • Utilisez la commande mysql à partir du terminal SSH de l’application pour un accès de base.
  • Outils de bureau (par exemple MySQL Workbench) :
    • Utilisation du tunneling SSH avec Azure CLI :
      • Créez une session SSH pour l’application web à l’aide d’Azure CLI.
      • Utilisez la session SSH pour créer un tunnel permettant d’envoyer le trafic vers MySQL.
    • Utilisation d’un VPN site à site ou d’une machine virtuelle Azure :
      • Votre machine doit faire partie du réseau virtuel.
      • Envisagez d’utiliser :
        • Une machine virtuelle Azure liée à l’un des sous-réseaux.
        • Une machine d’un réseau local, qui dispose d’une connexion VPN site à site au réseau virtuel Azure.
  • Intégration à Azure Cloud Shell :

Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?

Prenez le fichier de workflow généré automatiquement à partir d’App Service comme exemple, chaque git push lance une nouvelle exécution de build et de déploiement. À partir d’un clone local du dépôt GitHub, vous faites en sorte que les mises à jour souhaitées le poussent vers GitHub. Par exemple :

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

Pourquoi le déploiement GitHub Actions est-il si lent ?

Le fichier de workflow généré automatiquement à partir d’App Service divise l’exécution en deux tâches : la build et le déploiement. Étant donné que chaque tâche s’exécute dans son environnement propre, le fichier de workflow garantit que la tâche deploy a accès aux fichiers à partir de la tâche build :

La majeure partie du temps pris par le processus à deux tâches est consacrée au chargement et au téléchargement des artefacts. Si vous le souhaitez, vous pouvez simplifier le fichier de workflow en combinant les deux travaux en un, ce qui élimine les étapes de chargement et de téléchargement.

Résumé

Dans ce didacticiel, vous avez appris à :

  • Créer une application serveur flexible PHP et Azure Database pour MySQL – Serveur flexible sécurisée par défaut dans Azure
  • Configurer des secrets de connexion à Azure Database pour MySQL – Serveur flexible à l’aide des paramètres d’application
  • Déployer du code d’application à l’aide de GitHub Actions
  • Mise à jour et redéploiement de l’application
  • Exécuter des migrations de base de données de manière sécurisée
  • Diffusion des journaux de diagnostic à partir d’Azure
  • Gérer l’application dans le portail Azure

Étapes suivantes