Sécurisation, déploiement CI/CD Gitea et documentation INFCDAAL3
- 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:
@@ -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.
|
||||
Reference in New Issue
Block a user