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.
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
etDB_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 :
- Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
- 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.
Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.
- Groupe de ressources → Sélectionnez Créer nouveau et utilisez le nom msdocs-laravel-mysql-tutorial.
- Région → Toute région Azure près de chez vous.
- Nom → msdocs-laravel-mysql-XYZ, où XYZ représente trois caractères aléatoires quelconques. Ce nom doit être unique au sein d’Azure.
- Pile du runtime → PHP 8.2.
- Ajouter Azure Cache pour Redis ? → Oui.
- Plan d’hébergement → De base. Vous pourrez ultérieurement effectuer un scale-up vers un niveau tarifaire de production.
- 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.
- Sélectionnez Revoir + créer.
- Une fois la validation terminée, sélectionnez Créer.
É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.
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.
Étape 2 :
- 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.
- 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.
- 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.
Étape 3 : Sous l’onglet Paramètres de l’application de la page Configuration, créez un paramètre CACHE_DRIVER
:
- Sélectionnez Nouveau paramètre d’application.
- Dans le champ Nom, entrez CACHE_DRIVER.
- Dans le champ Valeur, entrez redis.
- 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.
É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.
- Dans la barre de menu située en haut, sélectionnez Enregistrer.
- Lorsque vous y êtes invité, sélectionnez Continuer.
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 :
- Connectez-vous à votre compte GitHub.
- Accédez à https://github.com/Azure-Samples/laravel-tasks.
- Sélectionnez Fork.
- Sélectionnez Créer la duplication.
Étape 2 : Dans la page GitHub, ouvrez Visual Studio Code dans le navigateur en appuyant sur la touche .
.
É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 :
- Remplacez
DB_HOST
parAZURE_MYSQL_HOST
. - Remplacez
DB_DATABASE
parAZURE_MYSQL_DBNAME
. - Remplacez
DB_USERNAME
parAZURE_MYSQL_USERNAME
. - Remplacez
DB_PASSWORD
parAZURE_MYSQL_PASSWORD
. - Remplacez
DB_PORT
parAZURE_MYSQL_PORT
. N’oubliez pas que ces paramètresAZURE_MYSQL_
ont été créés pour vous par l’assistant de création.
Étape 4 : Dans config/database.php, faites défiler jusqu’à la section Redis cache
et apportez les modifications suivantes :
- Remplacez
REDIS_HOST
parAZURE_REDIS_HOST
. - Remplacez
REDIS_PASSWORD
parAZURE_REDIS_PASSWORD
. - Remplacez
REDIS_PORT
parAZURE_REDIS_PORT
. - Remplacez
REDIS_CACHE_DB
parAZURE_REDIS_DATABASE
. - 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ètresAZURE_REDIS_
ont été créés pour vous par l’assistant de création.
Étape 5 :
- Sélectionnez l’extension Contrôle de code source.
- Dans la zone de texte, tapez un message de commit comme
Configure DB & Redis variables
. - Sélectionnez Commiter et pousser.
Étape 6 : De retour dans la page App Service, sélectionnez Centre de déploiement dans le menu de gauche.
Étape 7 : Dans la page Centre de déploiement :
- Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
- Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
- Dans Organisation, sélectionnez votre compte.
- Dans Référentiel, sélectionnez laravel-task.
- Dans Branche, sélectionnez principal.
- 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
.
Étape 8 : Dans la page Centre de déploiement :
- Sélectionnez Journaux d’activité. Une exécution de déploiement a déjà démarré.
- Dans l’élément de journal de l’exécution du déploiement, sélectionnez Générer/Déployer des journaux.
É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.
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.
Étape 2 : Dans le terminal SSH :
- Exécutez
cd /home/site/wwwroot
. Voici tous vos fichiers déployés. - 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.
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 :
- Dans le menu de gauche, sélectionnez Configuration.
- Sélectionnez l’onglet Paramètres généraux.
Étape 2 : Sous l’onglet Paramètres généraux :
- Dans la zone Commande de démarrage, entrez la commande suivante : cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
- Cliquez sur 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.
6 - Accéder à l’application
Étape 1 : Dans la page App Service :
- Dans le menu de gauche, sélectionnez Vue d’ensemble.
- Sélectionnez l’URL de votre application. Vous pouvez également naviguer directement vers
https://<app-name>.azurewebsites.net
.
É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.
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 :
- Dans le menu de gauche, sélectionnez Journaux App Service.
- Sous Application Logging, sélectionnez Système de fichiers.
É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.
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 :
- Entrez le nom du groupe de ressources.
- Sélectionnez le groupe de ressources.
Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.
Étape 3 :
- Entrer le nom du groupe de ressources pour confirmer la suppression.
- Sélectionnez Supprimer.
Forum aux questions
- Quel est le coût de cette configuration ?
- Comment me connecter à la base de données MySQL sécurisée derrière le réseau virtuel avec d’autres outils ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Pourquoi le déploiement GitHub Actions est-il si lent ?
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 fin de la tâche
build
, chargez les fichiers en tant qu’artefacts. - Au début de la tâche
deploy
, téléchargez les artefacts.
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 :