Skip to main content

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 :
  1. Déclencher deploy.yml manuellement sur main/master.
  2. Vérifier secrets Infisical (prod) chargés en workflow.
  3. Vérifier santé stack via docker compose -f docker-compose.prod.yml ps.
  4. 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)

  1. Vérifier branches et déclencheur de workflow.
  2. Vérifier variables/runtime via secrets / env (selon contexte).
  3. Lancer/valider tests.
  4. Vérifier backup récent (si changement DB).
  5. Déployer par deploy.yml (manuel) si nécessaire.
  6. Confirmer health checks et logs.
  7. 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