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.
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 (une fois) : Apps, créerustagammon, sans volume (rien n'est stocké côté serveur), port du conteneur 80. Activer le HTTPS et, si besoin, un domaine.
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://<domaine de l'app>/version.json # commit publié
curl -sI https://<domaine de l'app>/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.