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 :
En cas de
caprover api -n sans-pub -t /user/system/info -m GET -d '{}' -o falsenot valid anymore:caprover logindans un vrai terminal. - L'app
ustagammonexiste dans CapRover (créée le 2026-11-02) : sans volume (rien n'est stocké côté serveur), port du conteneur 80, domaineustagammon.sans.pubavec 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 siteassemblebuild/site/: le contenu deweb/à la racine, le moteur (engine.mjs,engine.wasm,engine.data,positions.json) souswasm/, etversion.jsonavec le commit publié.make packageajoutedeploy/et produitbuild/ustagammon.tar(environ 9 Mo).tests/test_site.sh(dansmake test) construit l'image de production en local, la lance et vérifie ce que reçoit un navigateur : pages, types MIME (application/wasmpour le moteur), compression gzip des données, en-têtes, et commit deversion.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.