Runbook d’exploitation CEL
Ce runbook regroupe les procédures opérationnelles en cohérence avec le code actuel (Workflows + scripts + compose).
Références (lecture)
DEPLOYMENT.md
.github/workflows/*
docker-compose.prod.yml
convex/README.md
convex/admin/crons.ts
README.md
scripts/*.sh
Chaîne CI/CD de production (réelle)
Séparation claire
- La CI (
pipeline) valide la qualité.
- Le versioning (
release.yml) met à jour package.json/web/package.json et crée tag + release.
- Le déploiement production est uniquement manuel (
deploy.yml).
- Les docs ont leur propre validation (
docs.yml) et ne poussent pas l’infra.
Infrastructure production réelle
Services définis dans docker-compose.prod.yml :
postgres
pgbouncer
postgres-backup
convex-backend
convex-dashboard
web
cloudflared
portainer
Notes d’exploitation :
deploy.yml exécute docker compose -f docker-compose.prod.yml pull puis up -d de services de base.
- Health checks intégrés après déploiement : Convex backend, web, auth HTTP, tunnel cloudflared.
rollback automatique du web en cas d’échec de déploiement ; rollback Convex via npx convex deploy sur commit précédent quand l’admin key est disponible.
Crons et jobs opérationnels
Crons Convex actifs (gestion runtime)
convex/admin/crons.ts définit les identifiants et horaires par défaut suivants :
Gestion manuelle / audit
- Liste des configs crons :
listCronConfigs
- Historique exécutions :
listCronExecutions
- MAJ config :
upsertCronConfig
- Déclenchement manuel :
triggerCron
initCrons supprime aussi user-ban-expiration-cleanup et totw-weekly si présents.
Commandes opératoires (backend)
Commandes utiles :
Déploiement (manuel)
Procédure supportée par le workflow :
- Déclencher
deploy.yml manuellement sur main/master.
- Vérifier secrets Infisical (
prod) chargés en workflow.
- Vérifier santé stack via
docker compose -f docker-compose.prod.yml ps.
- Sur succès, confirmer la disponibilité
frontend, Convex backend et tunnel.
Frontend local
URLs locales :
- frontend via Portless :
http://cel.localhost
- fallback direct :
npm run dev:port puis http://localhost:3000
- auth HTTP Convex :
http://127.0.0.1:3211/api
URLs auth (issuer unique)
CONVEX_SITE_ORIGIN, CONVEX_SITE_URL et
CONVEX_AUTH_PROVIDER_DOMAIN doivent contenir exactement la même origine :
elle sert d’issuer aux JWT Convex Auth.
- Cette origine doit être joignable depuis l’hôte et le conteneur
backend. Avec un port host remappé, utiliser
http://host.docker.internal:<port-auth-host> ; Compose résout ce nom
vers host-gateway dans Docker.
SITE_URL désigne le frontend. CUSTOM_AUTH_SITE_URL désigne l’origine de
callback OAuth côté navigateur.
Secrets et Infisical
Commandes :
Ne jamais versionner de fichiers .env*.
Tests de maintenance
Frontend :
Backend :
Sauvegardes et restauration (vérifiées)
Sauvegarde Convex
convex:backup crée backups/convex/<timestamp>/convex-export.zip
backups/convex/latest pointe vers la dernière exécution
- nettoyage géré par
--retention-days
Restauration Convex
⚠️ --append = import incrémental, réservé aux cas de lineage compatible.
Sauvegarde PostgreSQL du compose (service postgres-backup)
Scripts opérables :
Le workflow de restauration PG arrête le service web pendant la restauration, puis le relance.
Checklist opérationnelle (CI + prod + ops)
- Vérifier branches et déclencheur de workflow.
- Vérifier variables/runtime via
secrets / env (selon contexte).
- Lancer/valider tests.
- Vérifier backup récent (si changement DB).
- Déployer par
deploy.yml (manuel) si nécessaire.
- Confirmer health checks et logs.
- Vérifier statut crons applicatifs si incident métier.
Post-déploiement
- frontend accessible
- auth OK (login/refresh)
- Convex backend HTTP OK
- webhook/feedback (si configuré)
- événements et erreurs PostHog reçus si l’intégration est configurée
- vérification des crons principaux
- backup Cron planifié actif
Écarts opératoires restant à traiter
scripts/healthcheck.sh, scripts/monitor-prod.sh et
scripts/monitor-prod-rich.sh référencent encore des services de monitoring
absents de docker-compose.prod.yml.
- Certains scripts de restauration/monitoring utilisent des noms de conteneurs
ou ports historiques ; vérifier chaque cible contre le compose avant usage.
Contrôles à effectuer sur la machine de production :
- Les adresses de tunnel Cloudflare publiques exactes (
cel-eleague.com, api.cel-eleague.com) en prod.
- La présence effective d’un alerting externe côté infra opérationnelle.
- Le statut d’activation quotidien des sauvegardes via crontab machine (le script d’installation
convex-backup-cron-install est présent).
Last modified on July 18, 2026