expria-frontend/docs/DEPLOYMENT.md
Hermann_Kitio 04019f8348 feat(rapport/eo): support 5 critères × /4 — Phonologie (Sprint 4.8 frontend)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 03:30:49 +03:00

5.2 KiB

DEPLOYMENT.md — Expria V2

Version 1.0 — Rédigé avant lancement Procédure officielle de bascule V1 → V2 sur expria.app À lire intégralement avant toute action de déploiement.


1. Architecture cible

Composant V1 (actuel) V2 (cible)
Frontend Next.js sur Render React/Vite sur Cloudflare Pages
Backend Next.js API routes sur Render Hono.js sur Render (déjà live)
DNS Vercel Vercel (inchangé)
Domaine expria.app expria.app (inchangé)
Auth Supabase Supabase (inchangé)
Paiement Stripe Stripe (inchangé)

2. Prérequis — ne pas lancer la bascule sans cocher tout

Code

  • Tous les tests Vitest backend passent (0 échec)
  • Tous les tests Vitest frontend passent (0 échec)
  • npm run typecheck frontend → 0 erreur
  • Smoke test complet (Groupe Z du GOLDEN_DATASET.md) validé en local

Infrastructure

  • Backend V2 stable sur api.expria.app depuis au moins 48h sans erreur critique Sentry
  • Sentry configuré et actif sur le frontend V2
  • Variables d'environnement Cloudflare Pages configurées :
    • VITE_API_URL=https://api.expria.app
    • VITE_SUPABASE_URL=...
    • VITE_SUPABASE_ANON_KEY=...
    • VITE_ENABLE_T2_LIVE=false
  • CNAME Cloudflare Pages créé et testé sur une URL de preview

Stripe

  • Webhooks Stripe pointent vers api.expria.app (backend V2)
  • Test de paiement réel effectué sur l'URL de preview Cloudflare Pages

Rollback DNS — valeurs de référence (ne pas supprimer)

  • @ → A → 216.24.57.1 (frontend V1 Render)
  • www → CNAME → expria.onrender.com (frontend V1 Render)
  • api → CNAME → expria-backend.onrender.com (backend V2 — inchangé)

3. Procédure de bascule — dans l'ordre exact

Étape 1 — Mettre V1 en mode maintenance (2 min)

Dans Render, sur le service frontend V1 :

  • Modifier la variable d'environnement MAINTENANCE_MODE=true
  • Redéployer le service V1
  • Vérifier que expria.app affiche la page de maintenance

⚠️ À partir de ce moment, expria.app est inaccessible pour les utilisateurs. Faire cette étape à une heure creuse (nuit, week-end).

Étape 2 — Configurer le CNAME dans Vercel (5 min)

Dans le dashboard Vercel → Domains → expria.app :

  • Supprimer ou modifier l'enregistrement A/CNAME actuel qui pointe vers Render
  • Ajouter un CNAME : expria.app<projet>.pages.dev (URL Cloudflare Pages)
  • Sauvegarder

Étape 3 — Configurer le domaine dans Cloudflare Pages (5 min)

Dans Cloudflare Pages → projet expria-frontend → Custom domains :

  • Ajouter expria.app
  • Cloudflare Pages vérifie le CNAME automatiquement
  • Attendre la validation (peut prendre 1-5 min)

Étape 4 — Vérifier la propagation DNS (5-15 min)

Vérifier sur https://dnschecker.org que expria.app pointe vers Cloudflare Pages. Ne pas continuer avant que la propagation soit visible depuis au moins 3 régions.

Étape 5 — Smoke test en production (15 min)

Rejouer le Groupe Z du GOLDEN_DATASET.md sur expria.app :

  • Z1 — Inscription + première simulation Free
  • Z2 — Blocage quota Free
  • Z3 — Simulation Standard complète
  • Z4 — Mode examen bloqué en Standard
  • Z5 — T2 live Premium
  • Z6 — Mode examen EE complet
  • Z7 — Paiement Free → Standard
  • Z8 — Prorata Standard → Premium
  • Z9 — Déconnexion + accès protégé
  • Z10 — Responsive mobile Home + Login

Étape 6 — Vérifier Sentry (5 min)

  • Ouvrir le dashboard Sentry projet expria-frontend
  • Vérifier qu'aucune erreur critique n'apparaît dans les 5 premières minutes
  • Si erreur critique → déclencher le rollback immédiatement

Étape 7 — Déclarer la bascule réussie

  • Noter la date et l'heure dans ce fichier (section 6)
  • Désactiver MAINTENANCE_MODE sur V1 (optionnel — V1 reste sur Render comme fallback 30 jours)

4. Rollback — si quelque chose casse

Objectif : revenir sur V1 en moins de 10 minutes.

Étape 1 — Désactiver V2 (2 min)

Dans Cloudflare Pages → projet expria-frontend :

  • Désactiver le domaine personnalisé expria.app

Étape 2 — Remettre V1 en ligne (3 min)

Dans Vercel → Domains → expria.app :

  • Remettre le CNAME/A record vers Render (valeur originale) Dans Render → service frontend V1 :
  • Modifier MAINTENANCE_MODE=false
  • Redéployer

Étape 3 — Vérifier (5 min)

  • Vérifier que expria.app affiche à nouveau V1
  • Vérifier que la connexion et une simulation fonctionnent

Étape 4 — Diagnostiquer

  • Ouvrir Sentry V2 — identifier l'erreur critique
  • Ne pas retenter la bascule avant d'avoir corrigé et rejoué le Groupe Z complet

5. Post-bascule — checks 24h après

  • Sentry : aucune erreur critique nouvelle
  • Stripe : webhooks reçus et traités correctement
  • Supabase : aucune erreur d'auth dans les logs
  • Au moins 1 simulation complète effectuée par un vrai utilisateur
  • V1 sur Render toujours en ligne comme fallback (désactiver après 30 jours)

6. Historique des déploiements

Date Version Résultat Notes

7. Historique du document

Version Date Changements
1.0 2026-04-19 Création initiale