Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel montre comment créer une application PHP sécurisée dans Azure App Service se connecte à une base de données MySQL (à l’aide d’Azure Database pour MySQL Flexible Server). 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.
Conditions préalables
- Un compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
- Un compte GitHub. Vous pouvez aussi en obtenir un gratuitement.
- Connaissance de PHP avec le développement Laravel.
- (Facultatif) Pour essayer GitHub Copilot, un compte GitHub Copilot. Un essai gratuit de 30 jours est disponible.
1 - Exécuter l’exemple
Tout d’abord, vous configurez un exemple d’application pilotée par les données comme point de départ. Pour plus de commodité, l’exemple de référentiel inclut une configuration de conteneur de développement. Le conteneur de développement dispose de tout ce dont vous avez besoin pour développer une application, notamment la base de données, le cache et toutes les variables d’environnement nécessaires par l’exemple d’application. Le conteneur de développement peut s’exécuter dans un codespace GitHub, ce qui signifie que vous pouvez exécuter l’exemple sur n’importe quel ordinateur avec un navigateur web.
Étape 1 : Dans une nouvelle fenêtre de navigateur :
- Connectez-vous à votre compte GitHub.
- Accédez à https://github.com/Azure-Samples/laravel-tasks/fork.
- Sélectionnez Créer la duplication.
Étape 2 : Dans le fork GitHub :
- Sélectionnez Code>Créer un codespace sur laprincipale.
Il faut quelques minutes pour configurer le codespace. En outre, le fichier .env fourni contient déjà une variable factice
APP_KEY
que Laravel doit exécuter localement.
Étape 3 : Dans le terminal codespace :
- Exécutez
composer install
. - Exécutez des migrations de base de données avec
php artisan migrate
. - Exécutez l’application avec
php artisan serve
. - Lorsque la notification
Your application running on port 80 is available.
s’affiche, sélectionnez Ouvrir dans le navigateur. Vous devez voir l’exemple d’application dans un nouvel onglet du navigateur. Pour arrêter l’application, tapezCtrl
+C
.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
2 - Créer App Service, base de données et cache
Dans cette étape, vous créez les ressources Azure. Les étapes utilisées dans ce tutoriel créent un ensemble de ressources sécurisées par défaut qui incluent App Service, Azure Database pour MySQL et Azure Cache pour Redis. Pour le processus de création, vous devez spécifier :
- Le nom de l’application web. Il est utilisé dans le cadre du nom DNS de votre application.
- La Région du monde où l’application sera physiquement exécutée. Il est également utilisé dans le cadre du nom DNS de votre application.
- La Pile du runtime de l’application. C’est là que vous sélectionnez la version de PHP à utiliser pour votre application.
- Le Plan d’hébergement de l’application. Il s’agit du niveau tarifaire qui inclut l’ensemble des fonctionnalités et la scalabilité de l’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 :
- Dans la barre de recherche, tapez app service.
- Sélectionnez l’élément intitulé App Service sous l’en-tête Services .
- Sélectionnez Créer>Application web. Vous pouvez également accéder directement à l’Assistant de création.
Étape 2 : dans la page Créer une application web, renseignez le formulaire comme suit :
- Nom : msdocs-laravel-mysql-XYZ. Un groupe de ressources nommé msdocs-laravel-mysql-XYZ_group sera généré pour vous.
- Pile d’exécution : PHP 8.4.
- Système d’exploitation : Linux.
- Région : toute région Azure près de chez vous.
- Plan Linux : Créez et utilisez le nom msdocs-laravel-mysql-XYZ.
- Plan tarifaire : De base. Une fois que vous êtes prêt, vous pouvez effectuer un scale-up vers un niveau tarifaire différent.
Étape 3 :
- Sélectionnez l’onglet Base de données .
- Sélectionnez Créer une base de données.
- Dans le moteur, sélectionnez MySQL - Serveur flexible.
- Sélectionnez Créer un cache Azure pour Redis.
- Dans Nom (sous Cache), entrez un nom pour le cache.
- Dans SKU, sélectionnez De base.
Étape 4 :
- Sélectionnez l’onglet Déploiement .
- Activer le déploiement continu.
- Dans l’organisation, sélectionnez votre alias GitHub.
- Dans Dépôt, sélectionnez laravel-tasks.
- Dans Branche, sélectionnez principal.
- Vérifiez que l’authentification de base est désactivée.
- Sélectionnez Revoir + créer.
- Une fois la validation terminée, sélectionnez Créer.
Étape 5 : 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 : points de terminaison d’accès 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 à partir de 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 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.
3 - Sécuriser les secrets de connexion
L’assistant de création a généré les variables de connectivité pour vous déjà en tant que paramètres d’application. Toutefois, la meilleure pratique de sécurité consiste à éliminer complètement les secrets d’App Service. Vous allez déplacer vos secrets vers un coffre de clés et modifier votre paramètre d’application sur Références Key Vault à l’aide des connecteurs de services.
Étape 1 : Récupérer la chaîne de connexion existante
- Dans le menu de gauche de la page App Service, sélectionnez Paramètres > Variables d’environnement.
- Sélectionnez Chaînes de connexion.
- Sélectionnez AZURE_MYSQL_CONNECTIONSTRING.
- Dans ajouter/modifier le paramètre d’application, dans le champ Valeur , copiez le nom d’utilisateur et le mot de passe à utiliser ultérieurement. La chaîne de connexion vous permet de vous connecter à la base de données MySQL sécurisée derrière des points de terminaison privés. Toutefois, les secrets sont enregistrés directement dans l’application App Service, ce qui n’est pas le meilleur. Vous allez changer ça.
Étape 2 : Créer un coffre de clés pour la gestion sécurisée des secrets
- Dans la barre de recherche supérieure, tapez « coffre de clés », puis sélectionnez Place de marché>Coffre de clés.
- Dans le groupe de ressources, sélectionnez msdocs-laravel-mysql-XYZ_group.
- Dans nom du coffre de clés, tapez un nom composé uniquement de lettres et de chiffres.
- Dans Région, définissez-la sur le même emplacement en tant que groupe de ressources.
Étape 3 : Sécuriser le coffre-fort de clés avec un point de terminaison privé
- Sélectionnez l’onglet Réseau.
- Désélectionnez Activer l’accès public.
- Séllectionnez Créer un point de terminaison privé.
- Dans le groupe de ressources, sélectionnez msdocs-laravel-mysql-XYZ_group.
- Dans la boîte de dialogue, dans Emplacement,sélectionnez le même emplacement que votre application App Service.
- Dans Name, tapez msdocs-laravel-mysql-XYZVaultEndpoint.
- Dans le réseau virtuel, sélectionnez le réseau virtuel dans le groupe msdocs-laravel-mysql-XYZ_group .
- Dans Sous-réseau, sélectionnez le sous-réseau compatible disponible. L’assistant de l'application web l’a créée pour vous faciliter les choses.
- Sélectionnez OK.
- Sélectionnez Vérifier + créer, puis sélectionnez Créer. Attendez que le déploiement du coffre de clés se termine. Vous devez voir « Votre déploiement est terminé ».
Étape 4 : Créer le connecteur MySQL
- Dans la barre de recherche supérieure, tapez msdocs-laravel-mysql, puis sélectionnez la ressource App Service appelée msdocs-laravel-mysql-XYZ.
- Sur la page App Service, dans le menu de gauche, sélectionnez Paramètres > Connecteur de services.
- Cliquez sur Créer.
- Pour le type de service, sélectionnez DB pour le serveur flexible MySQL.
- Pour le serveur flexible MySQL, sélectionnez votre serveur (par exemple, msdocs-laravel-mysql-235-server).
- Pour la base de données MySQL, sélectionnez votre base de données (par exemple, msdocs-laravel-mysql-235-database).
Étape 5 : Configurer l’authentification pour le connecteur MySQL
- Sélectionnez l’onglet Authentification.
- Sélectionnez Chaîne de connexion.
- Dans Mot de passe, collez le mot de passe que vous avez copié précédemment.
- Sélectionnez Stocker le secret dans Key Vault.
- Sous Connexion à Key Vault, sélectionnez Créer nouveau. Une boîte de dialogue Créer une connexion est ouverte en haut de la boîte de dialogue d’édition.
Étape 6 : Établir la connexion Key Vault
- Dans la boîte de dialogue Créer une connexion pour la connexion Key Vault, dans Key Vault, sélectionnez le coffre de clés que vous avez créé précédemment.
- Sélectionnez Vérifier + créer.
- Lorsque la validation terminée, sélectionnez Créer.
Étape 6 : Finaliser les paramètres du connecteur MySQL
- Vous revenez dans la boîte de dialogue du connecteur MySQL. Sous l’onglet Authentification, attendez que le connecteur Key Vault soit créé. Une fois l’opération terminée, la liste déroulante Key Vault Connection la sélectionne automatiquement.
- Sélectionnez Vérifier + créer.
- Cliquez sur Créer. Attendez que la notification Mise à jour réussie s’affiche.
Étape 7 : configurer le connecteur Redis pour utiliser les secrets Key Vault
- Dans la page Connecteurs de service, cochez la case en regard du connecteur Cache pour Redis, puis sélectionnez Modifier.
- Sélectionnez l’onglet Authentification.
- Sélectionnez Stocker le secret dans Key Vault.
- Sous Connexion au coffre de clés, sélectionnez le coffre de clés que vous avez créé.
- Sélectionnez Suivant : Mise en réseau.
- Sélectionnez Configurer des règles de pare-feu pour activer l’accès au service cible. L’assistant de création d’application a déjà sécurisé la base de données SQL avec un point de terminaison privé.
- Cliquez sur Enregistrer. Attendez que la notification Mise à jour réussie s’affiche.
Étape 8 : vérifier l’intégration de Key Vault
- Dans le menu de gauche, sélectionnez à nouveau Paramètres > Variables d’environnement.
- En regard de AZURE_MYSQL_PASSWORD, sélectionnez Afficher la valeur. La valeur doit être
@Microsoft.KeyVault(...)
, ce qui signifie qu’il s’agit d’une référence coffre de clés, car le secret est maintenant managé dans le coffre de clés. - Pour vérifier la chaîne de connexion Redis, sélectionnez Afficher la valeur en regard de AZURE_REDIS_CONNECTIONSTRING.
En résumé, le processus de sécurisation de vos secrets de connexion est complexe :
- Récupération des secrets de connexion depuis les variables d'environnement de l'application App Service.
- Création d’un coffre-fort de clés
- Création d'une connexion Key Vault avec l'identité gérée attribuée par le système.
- Mise à jour des connecteurs de service pour stocker les secrets dans le coffre de clés.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
4 - Configurer des variables Laravel
Étape 1 : Créez CACHE_DRIVER
en tant que paramètre d’application.
- Sous l’onglet Paramètres d’application, sélectionnez Ajouter.
- Dans le champ Nom, entrez CACHE_DRIVER.
- Dans le champ Valeur, entrez redis.
- Sélectionnez Appliquer, puis Appliquer à nouveau, puis Confirmez.
Étape 2 : À l’aide des mêmes étapes à l’étape 1, 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.
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.
Dans l’idéal, le paramètre d’application APP_KEY
doit également être configuré comme référence de coffre de clés, qui est un processus en plusieurs étapes. Pour plus d’informations, consultez Comment modifier le paramètre d’application APP_KEY en référence Key Vault ?
5 - Déployer un exemple de code
Dans cette étape, vous configurez 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.
Étape 1 : De retour dans l’espace de code GitHub de votre exemple de duplication, exécutez git pull origin main
.
Cela intègre le fichier de flux de travail nouvellement validé dans votre espace de code.
Étape 2 (Option 1 : avec GitHub Copilot) :
- Démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.
- Demandez - « @workspace Comment l’application se connecte-t-elle à la base de données et redis ? » Copilot peut vous expliquer comment les paramètres sont configurés dans la configuration/database.php.
- Demandez : « @workspace en mode de production, mon application s’exécute dans une application web App Service, qui utilise Azure Service Connector pour se connecter à un serveur flexible MySQL. Quels sont les noms de variables d’environnement que j’ai besoin d’utiliser ? » Copilot peut vous donner une suggestion de code similaire à celle de l’option 2 : sans étapes gitHub Copilot ci-dessous et même vous indiquer d’apporter la modification dans le fichier config/database.php .
- Ouvrez config/database.php dans l’Explorateur et ajoutez la suggestion de code.
- Posez la question à « @workspace Mon application My App Service utilise également Azure Service Connector pour se connecter à Cache for Redis en utilisant le type de client Django. Quels sont les noms de variables d’environnement que j’ai besoin d’utiliser ?*" Copilot peut vous donner une suggestion de code similaire à celle de l’option 2 : sans les étapes de GitHub Copilot ci-dessous et même vous indiquer d’apporter la modification dans le fichier config/database.php . Si vous y êtes invité, connectez-vous à GitHub Copilot pour Azure pour obtenir des réponses plus précises.
- Ajouter la suggestion de code. GitHub Copilot ne vous donne pas la même réponse à chaque fois, et elle n’est pas toujours correcte. Vous devrez peut-être poser plus de questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?
Étape 2 (Option 2 : sans GitHub Copilot) :
- Ouvrez config/database.php dans l’Explorateur. Trouvez la section
mysql
et apportez les modifications suivantes : - Remplacez
DB_HOST
(ligne 49) parAZURE_MYSQL_HOST
. - Remplacez
DB_DATABASE
(ligne 51) parAZURE_MYSQL_DBNAME
. - Remplacez
DB_USERNAME
(ligne 52) parAZURE_MYSQL_USERNAME
. - Remplacez
DB_PASSWORD
(ligne 53) parAZURE_MYSQL_PASSWORD
. - Remplacez
DB_PORT
(ligne 50) parAZURE_MYSQL_PORT
. - Faites défiler jusqu’à la section Redis
cache
et apportez les modifications suivantes : - Remplacez
REDIS_HOST
(ligne 142) parAZURE_REDIS_HOST
. - Remplacez
REDIS_PASSWORD
(ligne 144) parAZURE_REDIS_PASSWORD
. - Remplacez
REDIS_PORT
(ligne 145) parAZURE_REDIS_PORT
. - Remplacez
REDIS_CACHE_DB
(ligne 146) 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.
Étape 3 :
- Sélectionnez l’extension Contrôle de code source.
- Dans la zone de texte, tapez un message de commit comme
Configure Azure database and cache connections
. Vous pouvez également sélectionner, puis laisser GitHub Copilot générer un message de commit à votre place.
- Sélectionnez Valider, puis confirmez en choisissant Oui.
- Sélectionnez Synchroniser les modifications 1, puis confirmez en choisissant OK.
Étape 4 : De retour dans la page Centre de déploiement dans le portail Azure :
- Sélectionnez l’onglet Journaux, puis Actualiser pour voir la nouvelle exécution du déploiement.
- Dans l’élément de log de l’exécution du déploiement, sélectionnez l’entrée Journaux de génération/déploiement avec l’horodatage le plus récent.
Étape 5 : Vous accédez à votre dépôt GitHub et 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 Opération réussie. Il faut environ 10 minutes.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
6 - Générer un schéma de 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 Outils de développement>SSH.
- Sélectionnez Go.
É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.
Conseil
Dans la session SSH, seuls les changements apportés aux fichiers dans /home
peuvent être conservés au-delà des redémarrages de l’application. Les modifications effectuées en dehors de /home
ne sont pas conservées.
7 - 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.
- Sélectionnez Enregistrer, puis continuez. 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.
8 - Accéder à l’application
Étape 1 : Dans la page App Service :
- Dans le menu de gauche, sélectionnez Vue d’ensemble.
- Sélectionnez le domaine par défaut de votre application.
É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.
9 - 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.
2. Créer des ressources Azure et déployer un exemple d’application
Dans cette étape, vous allez créer les ressources Azure et déployer un exemple d’application dans App Service sur Linux. La procédure indiquée dans ce tutoriel permet de créer un ensemble de ressources sécurisées par défaut qui incluent App Service et Azure DB pour MySQL.
L’espace de code GitHub dispose déjà d’Azure Developer CLI (AZD).
Générez une clé de chiffrement Laravel avec
php artisan key:generate --show
:php artisan key:generate --show
Connectez-vous à Azure en exécutant la commande
azd auth login
et en suivant l’invite :azd auth login
Créez les ressources Azure nécessaires et déployer le code de l’application avec la commande
azd up
. Suivez l’invite pour sélectionner l’abonnement et l’emplacement souhaités pour les ressources Azure.azd up
Lorsque vous y êtes invité, fournissez les réponses suivantes :
Question Réponse Entrer un nom pour le nouvel environnement Tapez un nom unique. Le modèle AZD utilise ce nom dans le cadre du nom DNS de votre application web dans Azure ( <app-name>-<hash>.azurewebsites.net
). Les caractères alphanumériques et les traits d’union sont autorisés.Sélectionner un abonnement Azure à utiliser Sélectionnez votre abonnement. Sélectionner un emplacement Azure à utiliser Sélectionnez un emplacement. Entrez une valeur pour le paramètre sécurisé de l’infrastructure « appKey » Utilisez la sortie de php artisan key:generate --show
ici. Le modèle AZD crée un secret Key Vault pour celui-ci que vous pouvez utiliser dans votre application.Entrez une valeur pour le paramètre sécurisé de l’infrastructure « databasePassword » Mot de passe de base de données pour MySQL. Il doit contenir au moins 8 caractères longs et contenir des lettres majuscules, des lettres minuscules, des chiffres et des caractères spéciaux. La commande
azd up
prend environ 15 minutes (le cache Redis prend le plus de temps). Elle compile et déploie également le code de votre application, mais vous allez modifier votre code ultérieurement pour utiliser App Service. Pendant son exécution, la commande fournit des messages sur le processus d’approvisionnement et de déploiement, y compris un lien vers le déploiement dans Azure. Une fois l’opération terminée, la commande affiche également un lien vers l’application de déploiement.Ce modèle AZD contient des fichiers (azure.yaml et le répertoire infra) qui génèrent une architecture sécurisée par défaut avec les ressources Azure 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 B1.
- 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 via l’intégration de zones DNS. Une base de données est créée pour vous sur le serveur.
- Azure Cache pour Redis : Accessible uniquement à partir du réseau virtuel.
- Points de terminaison privés : Points de terminaison d’accès pour le coffre de clés et le cache Redis dans le réseau virtuel.
- Zones DNS privées : permettent la résolution DNS du coffre de clés, du serveur de base de données et du cache Redis dans le réseau virtuel.
- L’espace de travail Log Analytics : agit comme le conteneur cible de votre application pour expédier ses journaux d’activité, dans lequel vous pouvez également interroger les journaux.
- Coffre de clés: utilisé pour conserver votre mot de passe de base de données lorsque vous redéployez avec AZD.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
3. Utiliser des chaînes de connexion Azure dans le code d’application
Le modèle AZD utilisé a généré les variables de connectivité pour vous en tant que paramètres d’application et les restitue sur le terminal pour plus de facilité. Les paramètres d’application sont un moyen de préserver les secrets de connexion hors de votre référentiel de code.
Dans la sortie AZD, recherchez les paramètres de l’application qui commencent par
AZURE_MYSQL_
etAZURE_REDIS_
. Seuls les noms des paramètres sont affichés. Ils ressemblent à ceci dans la sortie AZD :App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_DBNAME - AZURE_MYSQL_FLAG - AZURE_MYSQL_HOST - AZURE_MYSQL_PASSWORD - AZURE_MYSQL_PORT - AZURE_MYSQL_USERNAME - AZURE_REDIS_DATABASE - AZURE_REDIS_HOST - AZURE_REDIS_PASSWORD - AZURE_REDIS_PORT - AZURE_REDIS_SSL
Les paramètres commençant
AZURE_MYSQL_
par sont des variables de connexion pour la base de données MySQL, et les paramètres commençantAZURE_REDIS_
par sont pour le cache Redis. Vous devrez les utiliser plus tard dans votre code. Pour votre commodité, le modèle AZD vous montre le lien direct vers la page des paramètres de l’application dans le portail Azure.Dans l’Explorateur, ouvrez config/database.php. Il s’agit du fichier de configuration pour les connexions de cache redis et de base de données.
Recherchez la partie qui définit la
mysql
connexion (lignes 46-64) et remplacezDB_HOST
,DB_PORT
,DB_DATABASE
,DB_USERNAME
etDB_PASSWORD
par les paramètres de l’applicationAZURE_MYSQL_
à partir de la sortie AZD. Votremysql
connexion doit ressembler au code suivant.'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('AZURE_MYSQL_HOST', '127.0.0.1'), 'port' => env('AZURE_MYSQL_PORT', '3306'), 'database' => env('AZURE_MYSQL_DBNAME', 'forge'), 'username' => env('AZURE_MYSQL_USERNAME', 'forge'), 'password' => env('AZURE_MYSQL_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
Pour plus d’informations sur la configuration de la base de données dans Laravel, consultez la documentation de Laravel.
Recherchez la partie qui définit la connexion du cache Redis (lignes 140-147) et remplacez
REDIS_HOST
,REDIS_PASSWORD
,REDIS_PORT
etREDIS_CACHE_DB
avec les paramètres de l’applicationAzure_REDIS_
à partir de la sortie AZD. Ajoutez également'scheme' => 'tls',
à la connexion. Votre connexion de cache doit ressembler au code suivant :'cache' => [ 'scheme' => 'tls', 'url' => env('REDIS_URL'), 'host' => env('AZURE_REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('AZURE_REDIS_PASSWORD'), 'port' => env('AZURE_REDIS_PORT', '6379'), 'database' => env('AZURE_REDIS_DATABASE', '1'), ],
Pour plus d’informations sur la configuration du cache Redis dans Laravel, consultez la documentation de Laravel.
Remarque
N’oubliez pas que vos modifications ne sont pas encore déployées. Vous allez les déployer à la fin de l’étape suivante.
4. Configurer les paramètres Laravel dans l’application web
À partir de l’explorateur, ouvrez infra/resources.bicep. Il s’agit du fichier Bicep qui définit les ressources Azure créées.
Recherchez la partie qui définit les paramètres de l’application (lignes 510-514) et supprimez les commentaires. Ces paramètres d’application sont les suivants :
Réglage Descriptif CACHE_DRIVER
Indique à Laravel d’utiliser Redis comme cache (consultez la documentation de Laravel). MYSQL_ATTR_SSL_CA
Nécessaire pour ouvrir une connexion TLS à MySQL dans Azure. Le fichier de certificat est inclus dans l’exemple de référentiel pour des raisons pratiques. Cette variable est utilisée par la connexion mysql dans config/database.php LOG_CHANNEL
Indique à Laravel de diriger les logs vers stderr
, afin de les rendre disponibles pour les logs App Service (consultez la documentation de Laravel).APP_DEBUG
Activez les pages en mode débogage dans Laravel (consultez la documentation de Laravel). APP_KEY
Variable de chiffrement Laravel. Le modèle AZD a déjà créé un secret Key Vault (lignes 212-217), de sorte que vous y accédez avec une référence Key Vault. Dans infra/resources.bicep, recherchez la définition de ressource de l’application App Service et décommentez la ligne 315 :
appCommandLine: 'cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload'
Le cycle de vie de l’application Laravel commence dans le répertoire /public au lieu de la racine de l’application. Le conteneur PHP par défaut pour App Service utilise Nginx, qui démarre à la 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 votre commodité, l’exemple de référentiel contient un fichier de configuration de remplacement appelé par défaut, qui indique à Nginx d’examiner dans le répertoire /public . Cette commande personnalisée
appCommandLine
s’exécute à chaque démarrage de l’application pour appliquer le remplacement du fichier chaque fois que le conteneur Linux est rechargé à partir d’un état initial propre.De retour dans le terminal codespace, réexécutez
azd up
.azd up
Conseil
azd up
s'exécute avec azd package
, azd provision
et azd deploy
ensemble, ce qui est logique, car vous effectuez des modifications à la fois de l'infrastructure et de l'application. Pour apporter uniquement des modifications à l’infrastructure, exécutez azd provision
. Pour simplement déployer des modifications dans le code d’application, exécutez azd deploy
.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
5. Générer le schéma de la base de données
Avec la base de données MySQL protégée par le réseau virtuel, le moyen le plus simple d’exécuter des migrations de base de données Laravel se trouve dans une session SSH avec le conteneur Linux dans App Service.
Dans la sortie AZD, retrouvez l’URL de la session SSH et accédez-y dans le navigateur. Cela ressemble à ceci dans la sortie :
Open SSH session to App Service container at: <URL>
Dans la session SSH, exécutez des migrations de base de données à partir du répertoire /home/site/wwwroot :
cd /home/site/wwwroot php artisan migrate --force
Si cela réussit, App Service se connecte avec succès à la base de données.
Remarque
Seules les modifications apportées aux fichiers dans /home
peuvent être conservées au-delà des redémarrages d’application.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
6. Accéder à l’application
Dans la sortie AZD, retrouvez l’URL de votre application et accédez-y dans le navigateur. L’URL ressemble à ceci dans la sortie AZD :
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Ajoutez quelques tâches à la liste.
Félicitations, vous exécutez une application web dans Azure App Service, avec une connectivité sécurisée vers Azure Database pour MySQL.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
7. Diffuser en continu 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. Pour plus de facilité, le modèle AZD a déjà activé la journalisation sur le système de fichiers local et expédie les journaux vers un espace de travail Log Analytics.
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.
Route::get('/', function () {
Log::info("Get /");
$startTime = microtime(true);
// Simple cache-aside logic
if (Cache::has('tasks')) {
$data = Cache::get('tasks');
} else {
$data = Task::orderBy('created_at', 'asc')->get();
Cache::add('tasks', $data);
}
return view('tasks', ['tasks' => $data, 'elapsed' => microtime(true) - $startTime]);
});
Dans la sortie AZD, retrouvez le lien pour diffuser en continu les journaux App Service et accédez-y dans le navigateur. Le lien ressemble à ceci dans la sortie AZD :
Stream App Service logs at: <URL>
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
8. Nettoyer les ressources
Pour supprimer toutes les ressources Azure dans le présent environnement de déploiement, exécutez azd down
et suivez les invites.
azd down
Résolution des problèmes
J’obtiens l’erreur pendant les migrations de base de données php_network_getaddresses: getaddrinfo for mysqldb failed: No address associated with hostname...
Il indique que les variables de connexion MySQL ne sont pas correctement configurées. Vérifiez que les paramètres de l’application AZURE_MYSQL_
sont correctement configurés dans 3. Utilisez des chaînes de connexion Azure dans le code de l’application.
J’obtiens une page vierge dans le navigateur.
Il indique qu’App Service ne trouve pas les fichiers de démarrage PHP dans /public. Suivez les étapes décrites dans 4. Configurez les paramètres Laravel dans l’application web.
J’obtiens une page de débogage dans le navigateur qui dit Unsupported cipher or incorrect key length.
Il indique que le APP_KEY
paramètre est défini sur une clé non valide. Lorsque vous exécutez azd up
, veillez à définir appKey
sur la sortie de php artisan key:generate --show
.
J’obtiens une page de débogage dans le navigateur qui dit Uncaught Error: Class "Illuminate\..." not found.
Cette erreur et les erreurs similaires indiquent que vous n’avez pas exécuté composer install
avant azd up
, ou que les packages dans le répertoire /vendor sont obsolètes. Réexécutez composer install
et azd deploy
.
J’obtiens une page de débogage dans le navigateur qui dit php_network_getaddresses: getaddrinfo for redishost failed: Name or service not known.
Il indique que les variables de connexion Redis ne sont pas correctement configurées. Vérifiez que les paramètres de l’application AZURE_REDIS_
sont correctement configurés dans 3. Utilisez des chaînes de connexion Azure dans le code de l’application.
J’obtiens une page de débogage dans le navigateur qui dit SQLSTATE[42S02]: Base table or view not found: 1146 Table 'XXXX-XXXXXXXXX-mysql-database.tasks' doesn't exist
Cela signifie que vous n’avez pas exécuté les migrations de base de données, ou que les migrations de base de données n’ont pas réussi. Suivez les étapes à 5. Générer le schéma de base de données.
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 modifier le paramètre d’application APP_KEY en référence à Key Vault ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Pourquoi le déploiement GitHub Actions est-il si lent ?
- Je n’ai pas les autorisations pour créer une identité utilisateur assignée
- Que puis-je faire avec GitHub Copilot dans mon codespace ?
- 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 ?
- Je n’ai pas les autorisations pour créer une identité utilisateur assignée
- Que puis-je faire avec GitHub Copilot dans mon codespace ?
Quel est le coût de cette configuration ?
Le prix des ressources créées 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 modifier le paramètre d’application APP_KEY en référence à Key Vault ?
À partir des étapes du portail dans 4 - Configurer des variables Laravel, vous pouvez passer APP_KEY
à une référence Key Vault en exécutant les commandes Azure CLI suivantes dans l’espace de code GitHub :
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=laravelAppKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(php artisan key:generate --show)
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "APP_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Vous pouvez également faire la même chose dans le portail. Pour plus d’informations, consultez :
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.
Je n’ai pas les autorisations pour créer une identité assignée par l’utilisateur.
Consultez Configurer le déploiement de GitHub Actions à partir du Centre de déploiement.
Que puis-je faire avec GitHub Copilot dans mon codespace ?
Vous pouvez peut-être remarquer que la vue de conversation GitHub Copilot était déjà là pour vous quand vous avez créé le codespace. Pour plus de commodité, nous incluons l’extension de conversation GitHub Copilot dans la définition du conteneur (consultez .devcontainer/devcontainer.json). Cependant, vous avez besoin d’un compte GitHub Copilot (essai gratuit de 30 jours disponible).
Quelques conseils à appliquer quand vous parlez à GitHub Copilot :
- Dans une session de conversation unique, les questions et réponses s’appuient les unes sur les autres et vous pouvez ajuster vos questions pour affiner la réponse que vous obtenez.
- Par défaut, GitHub Copilot n’a accès à aucun fichier de votre référentiel. Pour poser des questions sur un fichier, vous devez d’abord l’ouvrir dans l’éditeur.
- Pour permettre à GitHub Copilot d’accéder à tous les fichiers du référentiel lors de la préparation de ses réponses, commencez votre question par
@workspace
. Pour plus d’informations, consultez Use the @workspace agent. - Dans la session de conversation, GitHub Copilot peut suggérer des modifications et même (avec
@workspace
) où apporter les modifications, mais il n’est pas autorisé à apporter les modifications pour vous. C’est à vous d’ajouter les changements suggérés et de les tester.
Étapes suivantes
Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.
Ou consultez les autres ressources :