Déploiement
Procédure de mise en production. L'objectif est zero-data-loss, jamais
pendant le passage SEPA mensuel ou l'exécution SSA. Les migrations Doctrine doivent être
réversibles (up et down testés).
Cycle de release
flowchart LR A["develop"] --> B["PR + revue"] B --> C["Merge main"] C --> D["Tag vX.Y.Z"] D --> E["CI WoodpeckerPipeline de release.
tests + assets-freshness"] E --> F["Déploiement
preprod"] F --> G["Validation
fonctionnelle"] G --> H["Déploiement
prod"]
Procédure standard
# Sur le serveur cible, dans /var/www/kohinos
sudo -u www-data git fetch --tags
sudo -u www-data git checkout vX.Y.Z
# Dépendances figées
sudo -u www-data composer install --no-dev --optimize-autoloader
# Assets front : pré-compilés et versionnés dans public/build/ (+ public/sw.js).
# Aucune installation de Node/npm/yarn ni de build n'est requise sur le serveur.
# Migrations (toujours --no-interaction en CI/prod)
sudo -u www-data php bin/console doctrine:migrations:migrate \
--env=prod --no-interaction --allow-no-migration
# Cache
sudo -u www-data php bin/console cache:clear --env=prod --no-debug
sudo -u www-data php bin/console cache:warmup --env=prod
# Recharger php-fpm pour purger l'opcache
sudo systemctl reload php8.4-fpm
Fenêtres interdites
⛔ Ne déployer JAMAIS pendant
- Le passage SEPA mensuel : jour de prélèvement configuré (1–28) — voir Cron & commandes.
- L'exécution SSA (commande
kohinos:ssa:execute, généralement milieu de mois). - Le traitement des callbacks HelloAsso en cours (webhooks pending).
Bloquer la commande cron avant de toucher le code, la relancer après.
Vérifications post-déploiement
# Schéma DB en phase avec les mappings
php bin/console doctrine:schema:validate
# Soldes cohérents (somme débits = somme crédits)
php bin/console kohinos:accounts:check
# Routes répondent toutes
curl -fsS https://kohinos.example.org/ > /dev/null
curl -fsS https://kohinos.example.org/health > /dev/null
# Smoke test routes par rôle (cf. dev/tests.html)
python3 scripts/test-routes.py --only-errors
Rollback
- Revenir au tag précédent :
git checkout vX.Y.(Z-1). - Si la migration n'est pas réversible (rare, à signaler explicitement dans la PR), restaurer depuis le dump pré-déploiement.
- Sinon :
php bin/console doctrine:migrations:migrate prev --env=prod --no-interaction. - Vider le cache, recharger php-fpm.
Migrations Doctrine — règles
- Les méthodes
up()etdown()doivent toutes deux être implémentées. - Pas de
UPDATE/DELETEmassif sans--dry-runtesté en preprod. - Compatible MariaDB ET SQLite (tests in-memory).
- Indexer toute nouvelle FK et toute colonne utilisée dans un
WHEREfréquent.
Sauvegarde pré-déploiement
# Dump complet juste avant déploiement
mysqldump --single-transaction --quick --routines kohinos \
| gzip > /var/backups/kohinos/$(date +%F-%H%M)-pre-deploy.sql.gz
# Vérifier l'intégrité du dump (parse rapide)
zcat /var/backups/kohinos/<file>.sql.gz | head -50
Cycle de hotfix
- Brancher depuis le tag prod (
vX.Y.Z), pas depuismain. - Patch minimal, tests ciblés, CHANGELOG
.md+_USER.mdà jour. - Tag
vX.Y.(Z+1), déploiement direct, back-merge dansmain.