# Runtime health, maintenance et redemarrage propre

Ce document formalise la passe d'exploitation qui evite les redemarrages "a l'aveugle" et structure les verifications.

## Endpoints

- `GET /health/live`
  - confirme que le processus Express est vivant
  - retourne `503` uniquement pendant l'arret en douceur
- `GET /health/ready`
  - confirme que l'application est vraiment exploitable
  - verifie :
    - fin du delai de demarrage
    - etat runtime pret
    - base disponible si configuree
    - absence d'arret en cours
- `GET /health`
  - alias pratique vers `GET /health/ready`

## Mode maintenance

Le mode maintenance repose sur un drapeau fichier persistant :

- chemin par defaut : `/app/uploads/system/maintenance.flag`

Quand le drapeau existe :

- les pages HTML publiques et internes renvoient une page legere de maintenance
- les endpoints `/health*`, `/api*` et `/uploads/*` restent accessibles

### Commandes utiles

Depuis le projet :

```bash
./scripts/maintenance-flag.sh on
./scripts/maintenance-flag.sh off
./scripts/maintenance-flag.sh status
```

Sur le VPS :

```bash
ssh ovh-vps 'cd /home/ubuntu/portail-associations && MAINTENANCE_FLAG_PATH=/home/ubuntu/portail-associations/uploads/system/maintenance.flag ./scripts/maintenance-flag.sh on'
```

## Deploiement propre

Le script officiel :

```bash
./scripts/deploy-vps.sh preprod
./scripts/deploy-vps.sh prod
```

Verifie maintenant :

1. le SSH
2. le check TypeScript
3. le build local
4. la synchro
5. le redeploiement Docker
6. le retour `200` sur `/health/ready`
7. le retour `200` sur la home

### Option maintenance

Pour entourer le deploiement d'une page de maintenance :

```bash
USE_MAINTENANCE_FLAG=1 ./scripts/deploy-vps.sh prod
```

## Monitoring simple

Verifier plusieurs fois un endpoint :

```bash
./scripts/monitor-http-health.sh https://www.portail-association973.com/health/ready
```

Le script remonte notamment les `502` et `503`.

## Industrialisation CI/CD

Le minimum utile pour la chaine de deploiement est :

1. lancer `corepack pnpm check`
2. lancer `corepack pnpm build`
3. deployer
4. attendre `GET /health/ready = 200`
5. verifier la home
6. lancer un mini monitoring post-deploiement sur 1 a 2 minutes

Exemple de sequence :

```bash
./scripts/deploy-vps.sh preprod
./scripts/monitor-http-health.sh https://preprod.portail-association973.com/health/ready
```

## Alerting simple

Sans ajouter de grosse brique tout de suite, on peut deja alerter proprement si :

- `/health/ready` ne revient pas en `200`
- plus d'un `502` ou `503` apparait pendant la fenetre de verification
- le mode maintenance reste actif par erreur

La premiere etape rentable est de brancher ces controles dans la routine de deploiement ou dans un cron d'observation.

## Limite honnete

Avec un seul conteneur applicatif et une recreation Docker classique, le risque de micro-coupure n'est pas totalement elimine.

Cette passe :

- fiabilise la detection du "pret"
- ajoute un arret plus propre
- structure la maintenance
- rend les controles repetables

Pour viser le zero `502` strict, il faudra ensuite une architecture de bascule plus poussee :

- blue/green
- double instance applicative
- ou proxy avec vraie page de maintenance en amont.
