Introduction
📅 Date de réalisation : 16 August 2025
Contexte
Ce projet a été réalisé dans le cadre de mon apprentissage sur Azure App Service Environments et les intégrations avec GitHub. L’objectif était de mettre en pratique les concepts appris (via Microsoft Learn et des vidéos YouTube) en déployant une application Laravel connectée à une base MySQL et à un cache Redis, le tout hébergé sur Azure.
Objectif
- Héberger une application PHP (Laravel) sur Azure App Service
- Connecter l’application à Azure Database for MySQL Flexible Server
- Ajouter un cache avec Azure Cache for Redis
- Mettre en place une automatisation CI/CD avec GitHub Actions
- Sécuriser les connexions via Private Endpoints et Azure Key Vault
Environnement utilisé
- Cloud : Microsoft Azure
- Web hosting : Azure App Service (Linux)
- Base de données : Azure Database for MySQL Flexible Server
- Cache : Azure Cache for Redis
- CI/CD : GitHub Actions
- Framework : Laravel (PHP 8.4)
- Versioning : Git & GitHub
- Outils complémentaires : Azure CLI, Visual Studio Code Codespaces
Architecture globale
Description
- Application Laravel déployée sur Azure App Service Linux
- Base MySQL et Redis Cache créés dans Azure, accessibles uniquement via private endpoints
- Connexions sécurisées avec Azure Key Vault (stockage des secrets)
- Déploiement continu configuré avec GitHub Actions : chaque push sur GitHub déclenche un build + déploiement automatique
- Tests et migrations exécutés directement dans le conteneur App Service
Schéma d’architecture (vue simplifiée)
Prérequis
Techniques
- Azure Subscription
- GitHub account (fork du repo Laravel Tasks)
- Connaissances de base : PHP, Laravel, Git
- Azure CLI installé en local
Accès
- Rôle Contributor/Owner sur Azure
- Droits d’accès au repo GitHub forké
Déploiement Infrastructure & Application
Étapes principales
- Création de l’App Service (Linux, PHP 8.4, plan Basic)
- Création d’une Azure Database for MySQL Flexible Server
- Création d’un Azure Cache for Redis
- Configuration des Private Endpoints pour MySQL et Redis
- Stockage des secrets dans Azure Key Vault
- Configuration des Service Connectors (App Service ↔ MySQL & Redis via Key Vault)
- Paramétrage des variables d’environnement Laravel (APP_KEY, DB, Redis, SSL, etc.)
- Configuration de l’intégration continue avec GitHub Actions
- Tests : migration de la base (
php artisan migrate) et vérification via navigateur
CI/CD avec GitHub Actions
Workflow
Chaque commit/push déclenche un pipeline qui :
- Build le code Laravel
- Déploie sur Azure App Service
- Exécute les migrations si nécessaire
- Met à jour automatiquement l’application en ligne
Exemple simplifié du workflow GitHub Actions généré automatiquement :
name: Build and deploy PHP app to Azure Web App
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
- name: Run composer install
run: composer install --no-dev --optimize-autoloader
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v2
with:
app-name: "laravel-mysql-demo"
publish-profile: $
package: .
Application
- Repo source : Azure-Samples/laravel-tasks
- Langage : PHP (Laravel)
- Base de données : Azure MySQL Flexible Server
- Cache : Azure Redis
- Fonctionnement :
- Ajout de tâches dans l’UI Laravel
- Les données sont stockées dans MySQL
- Redis assure le cache et améliore la vitesse de réponse
Sécurité
- Utilisation de Private Endpoints (pas d’accès public à MySQL et Redis)
- Secrets déplacés dans Azure Key Vault via Service Connectors
- App Service configuré en HTTPS (SSL activé)
- Logging activé via App Service Log Stream
Procédures opérationnelles
- Déploiement : GitHub → push → pipeline → Azure
- Migration DB : via
php artisan migrate --forcedans l’App Service (SSH intégré) - Rollback : revert sur GitHub → redéploiement automatique
- Supervision : App Service Logs, Azure Monitor
Résultats
- ✅ Déploiement complet en moins de 6h (avec résolution de bugs Laravel & compatibilité PHP)
- ✅ Mise en place réussie de GitHub Actions → déploiement automatique dès modification du code
- ✅ Application en ligne, fonctionnelle avec DB + Redis
- ✅ Vidéo de démonstration (2 minutes) montrant la mise à jour automatique du frontend après un push GitHub