Sécurisation, déploiement CI/CD Gitea et documentation INFCDAAL3
CD - Déploiement continu / deploy (push) Successful in 6m44s
CI - Intégration continue / quality-and-tests (push) Failing after 2m30s

- CI/CD Gitea Actions: ci.yml (Pint + PHPUnit), deploy.yml (déploiement SSH)
- Suppression de l'ancien workflow GitHub cassé
- En-têtes de sécurité: ajout CSP et Permissions-Policy
- RGPD: droit à l'effacement (anonymisation du compte) + tests
- Correctifs: ForceHttps hors env testing, timestamps du modèle Utilisateur,
  suppression des migrations en doublon (migrate échouait sur base neuve)
- Qualité: formatage Laravel Pint sur l'ensemble du code
- Documentation dossier technique (docs/) + .docx + .pptx

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 11:09:34 +02:00
parent de45e62d20
commit e5e6f72f92
38 changed files with 756 additions and 291 deletions
+109
View File
@@ -0,0 +1,109 @@
# 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.