# 02 — Plan de déploiement Projet **(RE)Sources Relationnelles** — Bloc INFCDAAL3 ## 1. Stratégie de déploiement Le déploiement repose sur trois piliers : 1. **Conteneurisation** (Docker) pour un environnement reproductible. 2. **Gestion de version** (Gitea) comme source unique de vérité. 3. **Intégration et déploiement continus** (Gitea Actions) pour automatiser qualité, tests et mise en production. Approche retenue : à chaque `push` sur `master`, la CI valide le code (qualité + tests) ; si tout est vert, le déploiement se déclenche automatiquement sur le serveur. ## 2. Environnements | Environnement | Rôle | Hébergement | |---------------|------|-------------| | **Local (dev)** | Développement sur le poste | Docker / `php artisan serve` | | **Test (CI)** | Exécution automatisée des tests | Runner Gitea Actions (base SQLite en mémoire) | | **Pré-production (QA)** *(recommandé)* | Recette avant mise en ligne | Conteneurs Docker, base dédiée | | **Production** | Service ouvert aux citoyens | Serveur `app.sam-coffre.duckdns.org` | > La configuration de chaque environnement est portée par un fichier `.env` > distinct (jamais versionné). Seul `.env.example` est présent dans le dépôt. ## 3. Architecture de déploiement ``` Internet (HTTPS) │ ▼ ┌───────────────────────────┐ │ Nginx (conteneur web) │ :443 TLS / redirection 80→443 │ laravel_web │ └─────────────┬─────────────┘ │ FastCGI :9000 ▼ ┌───────────────────────────┐ │ PHP-FPM (conteneur app) │ Laravel 12 │ laravel_php │ └─────────────┬─────────────┘ │ ▼ Base de données MySQL ``` Fichiers concernés : `Dockerfile` (image PHP), `docker-compose.yml` (orchestration), `nginx.conf` (reverse proxy / TLS). ## 4. Pipeline d'intégration et de déploiement continus (CI/CD) ### 4.1 Intégration continue — `.gitea/workflows/ci.yml` Déclenchée sur chaque `push` et chaque `pull_request` vers `master` : 1. Récupération du code. 2. Installation de PHP 8.2 et des extensions. 3. Installation des dépendances Composer (avec cache). 4. **Vérification du style de code** : `vendor/bin/pint --test`. 5. **Exécution des tests** : `php artisan test` (PHPUnit). ### 4.2 Déploiement continu — `.gitea/workflows/deploy.yml` Déclenché sur `push` vers `master`, il se connecte en **SSH** au serveur et exécute : 1. `git pull origin master` — récupération de la nouvelle version. 2. `docker compose up -d --build` — reconstruction des conteneurs. 3. `php artisan migrate --force` — application des migrations de base. 4. `config:cache`, `route:cache`, `view:cache` — optimisations de production. 5. Correction des permissions (`storage`, `bootstrap/cache`). **Secrets Gitea requis** (Settings → Actions → Secrets) : `SSH_HOST`, `SSH_USER`, `SSH_PRIVATE_KEY`, `SSH_PORT`. > Prérequis : un **runner Gitea Actions** doit être enregistré sur l'instance > (`https://gitea.sam-coffre.duckdns.org/`) et les Actions activées pour le dépôt. ## 5. Plan de déploiement détaillé (étapes, ressources, responsables) | # | Étape | Ressource / Outil | Responsable | Automatisé ? | |---|-------|-------------------|-------------|--------------| | 1 | Développement + commit | Git / Gitea | Développeur | Non | | 2 | Push sur `master` | Gitea | Développeur | Non | | 3 | Contrôle qualité (Pint) | Gitea Actions | Runner CI | ✅ Oui | | 4 | Tests automatisés (PHPUnit) | Gitea Actions | Runner CI | ✅ Oui | | 5 | Connexion au serveur | SSH | Runner CD | ✅ Oui | | 6 | Récupération du code | Git | Serveur | ✅ Oui | | 7 | Build des conteneurs | Docker Compose | Serveur | ✅ Oui | | 8 | Migrations BDD | Artisan | Serveur | ✅ Oui | | 9 | Mise en cache config/routes/vues | Artisan | Serveur | ✅ Oui | | 10 | Vérification post-déploiement | Endpoint `/up` (health check) | Équipe | Semi | ## 6. Retour arrière (rollback) En cas de problème après un déploiement : - **Code** : `git revert` ou retour à un tag précédent, puis nouveau déploiement. - **Base de données** : `php artisan migrate:rollback` (migrations réversibles). - **Conteneurs** : redéploiement de l'image précédente via `docker compose`. ## 7. Supervision - **Health check** : endpoint `/up` exposé par Laravel (voir `bootstrap/app.php`). - **Journaux** : `storage/logs/laravel.log` + logs des conteneurs Docker. - **Historique des déploiements** : onglet *Actions* de Gitea.