Partager via


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

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.

Capture d’écran de l’exemple d’application Azure nommé Task List (Liste des tâches) montrant les nouvelles tâches ajoutées.

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.
Capture d’écran montrant comment utiliser la zone de recherche dans la barre d’outils supérieure pour trouver l’Assistant de création Application web + Base de données.
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. Sélectionnez Revoir + créer.

Une fois la validation terminée, sélectionnez Créer.
Capture d’écran montrant comment configurer une nouvelle application et une nouvelle base de données dans l’Assistant Application web + Base de données.
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é, sélectionnez le bouton Accéder à la ressource. Vous êtes directement redirigé vers l’application App Service.
Capture d’écran montrant le formulaire à remplir pour créer une application web dans 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. Capture d’écran montrant comment ouvrir la page de configuration dans App Service.
Sous l’onglet Paramètres de l’application de la page Configuration, pour chacun des paramètres suivants, sélectionnez Modifier, mettez à jour le champ Nom avec de nouvelles valeurs, puis sélectionnez 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
Capture d’écran montrant comment afficher la chaîne de connexion générée automatiquement.
Créez un paramètre de base de données MYSQL_ATTR_SSL_CA :
  1. Sélectionnez 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.

Capture d’écran montrant comment créer un paramètre d’application.
Créez les paramètres d’application supplémentaires ci-après en suivant les mêmes étapes, puis sélectionnez 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.

Capture d’écran montrant tous les paramètres d’application obligatoires dans la page de configuration.

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. Sélectionnez Fork.

  4. Sélectionnez Créer la duplication.

Capture d’écran montrant comment créer une duplication (fork) du même exemple de dépôt GitHub.
Dans la page GitHub, ouvrez Visual Studio Code dans le navigateur en appuyant sur la touche .. Capture d’écran montrant comment ouvrir l’expérience de navigateur Visual Studio Code dans 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). Capture d’écran montrant Visual Studio Code dans le navigateur et un fichier ouvert.
De retour dans la page App Service, sélectionnez Centre de déploiement dans le menu de gauche. Capture d’écran montrant comment ouvrir le centre de déploiement dans 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. Dans le menu principal, sélectionnez Enregistrer.

App Service valide un fichier de workflow dans le dépôt GitHub sélectionné, au sein du répertoire .github/workflows.
Capture d’écran montrant comment configurer CI/CD à l’aide de 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.

Capture d’écran montrant comment ouvrir les journaux de déploiement dans le centre de déploiement.
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.

Capture d’écran montrant comment valider vos modifications dans l’expérience de navigateur Visual Studio Code.

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.
Capture d’écran montrant comment ouvrir l’interpréteur de commandes SSH de votre application à partir du portail Azure.
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.

Capture d’écran montrant les commandes à exécuter dans l’interpréteur de commandes SSH et ce qu’elles font.

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.

Capture d’écran montrant comment ouvrir l’onglet Paramètres généraux dans la page de configuration d’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. Cliquez sur Enregistrer.

Capture d’écran montrant comment configurer une commande de démarrage dans 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.

Capture d’écran montrant comment lancer une application App Service à partir du portail Azure.
Ajoutez quelques tâches à la liste. Félicitations, vous exécutez une application PHP orientée données dans Azure App Service. Capture d’écran de l’application Laravel s’exécutant dans 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.

Capture d’écran montrant comment activer les journaux natifs dans App Service à partir du portail Azure.
Dans le menu de gauche, sélectionnez 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. Capture d’écran montrant comment afficher le flux de journal dans le portail Azure.

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.

Capture d’écran montrant comment rechercher un groupe de ressources dans le portail Azure et y accéder.
Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources. Capture d’écran montrant l’emplacement du bouton Supprimer le groupe de ressources dans le Portail Azure.
  1. Entrer le nom du groupe de ressources pour confirmer la suppression.

  2. Sélectionnez Supprimer.

Capture d’écran montrant la boîte de dialogue de confirmation de la suppression d’un groupe de ressources sur le Portail Azure.

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