Tutoriel : Déployer une application PHP, MySQL et Redis sur Azure App Service

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). Vous allez également déployer un Azure Cache pour Redis pour activer le code de mise en cache dans votre application. Azure App Service est un service d’hébergement web hautement évolutif, appliquant des mises à jour correctives automatiques, qui peut déployer facilement des applications sur Windows ou Linux. 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.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Exemple d’application

Pour suivre ce tutoriel, clonez ou téléchargez l’exemple d’application Laravel à partir du référentiel :

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 (par exemple DB_DATABASE, DB_USERNAME et DB_PASSWORD) à l’aide des paramètres de votre base de données MySQL locale. Vous avez besoin d’un serveur MySQL local 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 MySQL

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

Étape 1 : 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.

Étape 2 : 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 du runtimePHP 8.2.
  5. Ajouter Azure Cache pour Redis ?Oui.
  6. Plan d’hébergementDe base. Vous pourrez ultérieurement effectuer un scale-up vers un niveau tarifaire de production.
  7. 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.
  8. Sélectionnez Revoir + créer.
  9. Une fois la validation terminée, sélectionnez Créer.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Étape 3 : Le déploiement prend quelques minutes. Une fois le déploiement terminé, sélectionnez le bouton Accéder à la ressource. L’application App Service s’ouvre automatiquement, mais les ressources suivantes sont créées :

  • 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 De base.
  • 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.
  • Points de terminaison privés → Accéder aux points de terminaison pour le serveur de base de données et le cache Redis dans le réseau virtuel.
  • Interfaces réseau → Représente les adresses IP privées, une pour chacun des points de terminaison privés.
  • Serveur flexible Azure Database pour MySQL → Accessible uniquement derrière son point de terminaison privé. Une base de données et un utilisateur sont créés pour vous sur le serveur.
  • Azure Cache pour Redis → Accessible uniquement de derrière son point de terminaison privé.
  • Zones DNS privées → Activer la résolution DNS du serveur de base de données et du cache Redis dans le réseau virtuel.

A screenshot showing the deployment process completed.

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

Étape 1 : Dans le menu de gauche de la page App Service, sélectionnez Configuration.

A screenshot showing how to open the configuration page in App Service.

Étape 2 :

  1. Recherchez des paramètres d’application qui commencent par AZURE_MYSQL_. Ils ont été générés à partir de la nouvelle base de données MySQL par l’assistant de création.
  2. Recherchez également des paramètres d’application qui commencent par AZURE_REDIS_. Ils ont été générés à partir du nouveau cache Redis par l’assistant de création. Pour configurer votre application, ce nom est tout ce dont vous avez besoin.
  3. Si vous le souhaitez, vous pouvez sélectionner le bouton Modifier à droite de chaque paramètre et afficher ou copier sa valeur. Plus tard, vous modifierez le code de votre application pour utiliser ces paramètres.

A screenshot showing how to create an app setting.

Étape 3 : Sous l’onglet Paramètres de l’application de la page Configuration, créez un paramètre CACHE_DRIVER :

  1. Sélectionnez Nouveau paramètre d’application.
  2. Dans le champ Nom, entrez CACHE_DRIVER.
  3. Dans le champ Valeur, entrez redis.
  4. Sélectionnez OK. CACHE_DRIVER est déjà utilisé dans le code de l’application Laravel. Ce paramètre indique à Laravel d’utiliser Redis comme cache.

A screenshot showing how to see the autogenerated connection string.

Étape 4 : En suivant les mêmes étapes dans l’Étape 3, créez les paramètres d’application suivants :

  • MYSQL_ATTR_SSL_CA : utilisez /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem comme valeur. 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.
  • LOG_CHANNEL : Utilisez stderr comme valeur. Ce paramètre indique à Laravel de canaliser les journaux vers stderr. Il est ainsi disponible pour les journaux App Service.
  • APP_DEBUG : utilisez true comme valeur. C’est une variable de débogage Laravel qui active les pages en mode débogage.
  • APP_KEY : utilisez base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= comme valeur. C’est une variable de chiffrement Laravel.
  1. Dans la barre de menu située en haut, sélectionnez Enregistrer.
  2. Lorsque vous y êtes invité, sélectionnez Continuer.

A screenshot showing how to save settings in the configuration page.

Important

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

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 vers votre référentiel 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.

Étape 1 : 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.

A screenshot showing how to create a fork of the sample GitHub repository.

Étape 2 : 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.

Étape 3 : Dans Visual Studio Code dans le navigateur, ouvrez config/database.php dans l’explorateur. Trouvez la section mysql et apportez les modifications suivantes :

  1. Remplacez DB_HOST par AZURE_MYSQL_HOST.
  2. Remplacez DB_DATABASE par AZURE_MYSQL_DBNAME.
  3. Remplacez DB_USERNAME par AZURE_MYSQL_USERNAME.
  4. Remplacez DB_PASSWORD par AZURE_MYSQL_PASSWORD.
  5. Remplacez DB_PORT par AZURE_MYSQL_PORT. N’oubliez pas que ces paramètres AZURE_MYSQL_ ont été créés pour vous par l’assistant de création.

A screenshot showing Visual Studio Code in the browser and an opened file with modified MySQL variables.

Étape 4 : Dans config/database.php, faites défiler jusqu’à la section Redis cache et apportez les modifications suivantes :

  1. Remplacez REDIS_HOST par AZURE_REDIS_HOST.
  2. Remplacez REDIS_PASSWORD par AZURE_REDIS_PASSWORD.
  3. Remplacez REDIS_PORT par AZURE_REDIS_PORT.
  4. Remplacez REDIS_CACHE_DB par AZURE_REDIS_DATABASE.
  5. Dans la même section, ajoutez une ligne avec 'scheme' => 'tls',. Cette configuration indique à Laravel d’utiliser le chiffrement pour se connecter à Redis. N’oubliez pas que ces paramètres AZURE_REDIS_ ont été créés pour vous par l’assistant de création.

A screenshot showing Visual Studio Code in the browser and an opened file with modified Redis variables.

Étape 5 :

  1. Sélectionnez l’extension Contrôle de code source.
  2. Dans la zone de texte, tapez un message de commit comme Configure DB & Redis variables.
  3. Sélectionnez Commiter et pousser.

A screenshot showing the changes being committed and pushed to GitHub.

Étape 6 : 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.

Étape 7 : 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 Référentiel, sélectionnez laravel-task.
  5. Dans Branche, sélectionnez principal.
  6. Dans le menu principal, sélectionnez Enregistrer. App Service valide un fichier de flux de travail dans le référentiel GitHub choisi, au sein du répertoire .github/workflows.

A screenshot showing how to configure CI/CD using GitHub Actions.

Étape 8 : 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.

A screenshot showing how to open deployment logs in the deployment center.

Étape 9 : Vous êtes dirigé vers votre référentiel 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. Attendez que l’exécution de GitHub affiche l’état Terminé. Cela prend environ 15 minutes.

A screenshot showing a GitHub run in progress.

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

L’Assistant de création place le serveur de base de données MySQL derrière un point de terminaison privé. Il 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.

Étape 1 : De retour dans la page App Service, dans le menu de gauche, sélectionnez SSH.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Étape 2 : Dans le terminal SSH :

  1. Exécutez cd /home/site/wwwroot. Voici tous vos fichiers déployés.
  2. Exécutez php artisan migrate --force. Si l’opération réussit, App Service se connecte avec succès à la base de données MySQL. 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 par défaut d’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 (/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, si vous remplacez ce fichier à l’aide de l’interpréteur de commandes SSH, les modifications sont effectuées en dehors de /home et seront perdues après un redémarrage de l’application.

Étape 1 :

  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.

Étape 2 : 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 recharge.
  2. Sélectionnez Enregistrer. La commande remplace le fichier de configuration Nginx dans le conteneur PHP et redémarre Nginx. Cette configuration garantit que la même modification est apportée au conteneur chaque fois qu’il démarre.

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

6 - Accéder à l’application

Étape 1 : 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.

Étape 2 : Ajoutez quelques tâches à la liste. Félicitations, vous exécutez une application PHP orientée données sécurisée dans Azure App Service.

A screenshot of the Laravel app running in App Service.

Conseil

L’exemple d’application implémente le modèle cache-aside. Lorsque vous rechargez la page après avoir modifié les données, le Temps de traitement dans la page web est beaucoup plus rapide, car la page charge les données à partir du cache plutôt qu’à partir de la base de données.

7 - Diffuser les journaux de diagnostic

Azure App Service capture tous les messages consignés dans la console pour vous aider à diagnostiquer les problèmes liés à votre application. L’exemple d’application sort les messages du journal de la console dans chacun de ses points de terminaison pour illustrer cette capacité. Par défaut, la fonctionnalité de journalisation de Laravel (par exemple, Log::info()) génère un fichier local. Votre paramètre d’application LOG_CHANNEL précédent permet aux entrées de journal d’être accessibles à partir du flux de journal App Service.

Étape 1 : 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.

Étape 2 : Dans le menu de gauche, sélectionnez Flux de journaux. Les journaux de votre application (notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur) apparaissent.

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.

Étape 1 : Dans la barre de recherche située en haut du Portail Microsoft 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.

Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Étape 3 :

  1. Entrer le nom du groupe de ressources pour confirmer la suppression.
  2. Sélectionnez 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 De base. Il peut faire l’objet d’un scale-up ou d’un scale-down. Consultez la tarification App Service.
  • Le serveur flexible MySQL est créé 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 Tarifs Azure Database pour MySQL.
  • L’Azure Cache pour Redis est créé au niveau De base avec la taille minimale du cache. Ce niveau a un faible coût. Vous pouvez le mettre à l’échelle vers des niveaux de performances plus élevés pour une disponibilité, un clustering et d’autres fonctionnalités plus avancés. Consultez Prix Azure Cache pour Redis.
  • 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 me connecter à la base de données MySQL sécurisée derrière le réseau virtuel avec d’autres outils ?

  • Pour un accès de base à partir d’un outil en ligne de commande, vous pouvez exécuter mysql à partir du terminal SSH de l’application.
  • Pour vous connecter à partir d’un outil de bureau comme MySQL Workbench, votre ordinateur doit se trouver dans le réseau virtuel. Par exemple, il peut s’agir d’une machine virtuelle Azure connectée à l’un des sous-réseaux ou d’une machine dans un réseau local disposant d’une connexion VPN de site à site avec le réseau virtuel Azure.
  • Vous pouvez également intégrer Azure Cloud Shell au réseau virtuel.

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.

Étapes suivantes

Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.

Ou consultez les autres ressources :