Files
Ustagammon/docs/deploiement.md
T
2026-11-02 21:04:37 +01:00

3.5 KiB

Déploiement

Ustagammon est un site statique (PWA, ADR 0009) : des fichiers HTML, JavaScript, le moteur en WebAssembly et ses données. Il est publié sur CapRover, machine sans-pub (https://captain.cloud.sans.pub), app ustagammon, sur https://ustagammon.sans.pub.

Le site est construit et testé sur le PC, pas sur le serveur. La construction est lourde (Emscripten, génération des données du moteur) et déjà outillée en local. make deploy-prod envoie à CapRover une archive qui contient le site prêt, un Dockerfile et un Caddyfile (deploy/). Le serveur ne fait que copier les fichiers dans une image Caddy (caddy:2.8.4-alpine), qui les sert en HTTP derrière le HTTPS de CapRover.

Prérequis

  • La chaîne d'outils du projet : make setup.
  • CLI CapRover, installée avec Node par fnm (le script la trouve seul) :
    eval "$(fnm env)"; fnm use lts-latest
    
  • Session CapRover valide. Le jeton expire ; pour vérifier :
    caprover api -n sans-pub -t /user/system/info -m GET -d '{}' -o false
    
    En cas de not valid anymore : caprover login dans un vrai terminal.
  • L'app ustagammon existe dans CapRover (créée le 2026-11-02) : sans volume (rien n'est stocké côté serveur), port du conteneur 80, domaine ustagammon.sans.pub avec HTTPS forcé.

Publier

Depuis main, à jour avec origin/main (après fusion de la MR) :

make deploy-prod

Le script refuse de publier si l'arbre n'est pas propre, si l'on n'est pas sur main, si main diffère d'origin/main, ou si la session CapRover a expiré. Il lance make lint et make test, assemble le site (make package), puis caprover deploy -t build/ustagammon.tar.

Pour une autre machine ou une autre app : CAPROVER_MACHINE=… CAPROVER_APP=… make deploy-prod.

Ce qui est publié

  • make site assemble build/site/ : le contenu de web/ à la racine, le moteur (engine.mjs, engine.wasm, engine.data, positions.json) sous wasm/, et version.json avec le commit publié.
  • make package ajoute deploy/ et produit build/ustagammon.tar (environ 9 Mo).
  • tests/test_site.sh (dans make test) construit l'image de production en local, la lance et vérifie ce que reçoit un navigateur : pages, types MIME (application/wasm pour le moteur), compression gzip des données, en-têtes, et commit de version.json.

Réglages du serveur (deploy/Caddyfile) : compression zstd ou gzip, y compris pour les données du moteur ; Cache-Control: no-cache (les noms de fichiers ne changent pas d'une version à l'autre, le navigateur revalide chaque fichier) ; X-Content-Type-Options: nosniff ; Referrer-Policy: no-referrer.

Vérifier

curl -s https://ustagammon.sans.pub/version.json      # commit publié
curl -sI https://ustagammon.sans.pub/wasm/engine.wasm  # application/wasm
ssh sans.pub 'sudo docker service ps srv-captain--ustagammon --format "{{.Image}} {{.CurrentState}}" | head -2'

Puis ouvrir le site sur le téléphone : la page de test doit afficher « Moteur prêt ».

Retour arrière

Dans CapRover, onglet Deployment de l'app ustagammon : redéployer une image précédente (img-captain-ustagammon:N). Rien n'est stocké côté serveur : aucun risque pour des données.

Incidents connus

Voir la-main-libre (docs/technique/deploiement.md) pour le registre Docker de CapRover dont le certificat expire : le build réussit, l'envoi échoue, la production n'est pas touchée ; redémarrer captain-registry puis relancer.