3.1 KiB
RUNBOOK — PUBLIC_SITE (canonical + sitemap) “anti localhost en prod”
Objectif : ne plus jamais voir
rel="canonical" href="http://localhost:4321/"en staging/live.
0) Pourquoi c’est critique
Astro génère :
<link rel="canonical" href="...">sitemap-index.xml
Ces valeurs dépendent de site dans astro.config.mjs.
Si site vaut http://localhost:4321 au moment du build Docker, la prod sortira des canonical faux :
- SEO / partage / cohérence de navigation impactés
- confusion staging/live
1) Règle canonique
astro.config.mjs:
en js :
site: process.env.PUBLIC_SITE ?? "http://localhost:4321"
Donc :
En DEV local : pas besoin de PUBLIC_SITE (fallback ok)
En build “déploiement” : on DOIT fournir PUBLIC_SITE
2) Exigence “antifragile”
2.1 Dockerfile (build stage)
On injecte PUBLIC_SITE au build et on peut le rendre obligatoire :
ARG PUBLIC_SITE
ARG REQUIRE_PUBLIC_SITE=0
ENV PUBLIC_SITE=$PUBLIC_SITE
garde-fou :
RUN if [ "$REQUIRE_PUBLIC_SITE" = "1" ] && [ -z "$PUBLIC_SITE" ]; then
echo "ERROR: PUBLIC_SITE is required (REQUIRE_PUBLIC_SITE=1)"; exit 1;
fi
=> Si quelqu’un oublie l’URL en prod, le build casse au lieu de produire une release mauvaise.
3) docker-compose : blue/staging vs green/live
Objectif : injecter deux valeurs différentes, sans bricolage.
3.1 .env (NAS)
Exemple canonique :
PUBLIC_SITE_BLUE=https://staging.archicratie.trans-hands.synology.me PUBLIC_SITE_GREEN=https://archicratie.trans-hands.synology.me
3.2 docker-compose.yml
web_blue :
REQUIRE_PUBLIC_SITE: "1"
PUBLIC_SITE: ${PUBLIC_SITE_BLUE}
web_green :
REQUIRE_PUBLIC_SITE: "1"
PUBLIC_SITE: ${PUBLIC_SITE_GREEN}
4) Tests (obligatoires après build)
4.1 Vérifier l’injection dans compose
sudo env DOCKER_API_VERSION=1.43 docker compose config
| grep -nE 'PUBLIC_SITE|REQUIRE_PUBLIC_SITE|web_blue:|web_green:' | sed -n '1,200p'
4.2 Vérifier canonical (upstream direct)
curl -sS http://127.0.0.1:8081/ | grep -oE 'rel="canonical" href="[^"]+"' | head -n 1 curl -sS http://127.0.0.1:8082/ | grep -oE 'rel="canonical" href="[^"]+"' | head -n 1
Attendu :
blue : https://staging.../
green : https://archicratie.../
5) Procédure de correction (si canonical est faux)
5.1 Vérifier astro.config.mjs dans la release courante
cd /volume2/docker/archicratie-web/current grep -nE 'site:\s*process.env.PUBLIC_SITE' astro.config.mjs
5.2 Vérifier que Dockerfile exporte PUBLIC_SITE
grep -nE 'ARG PUBLIC_SITE|ENV PUBLIC_SITE|REQUIRE_PUBLIC_SITE' Dockerfile
5.3 Vérifier .env et compose
grep -nE 'PUBLIC_SITE_BLUE|PUBLIC_SITE_GREEN' .env grep -nE 'PUBLIC_SITE|REQUIRE_PUBLIC_SITE' docker-compose.yml
5.4 Rebuild + recreate
sudo env DOCKER_API_VERSION=1.43 docker compose build --no-cache web_blue web_green sudo env DOCKER_API_VERSION=1.43 docker compose up -d --force-recreate web_blue web_green
Puis tests section 4.
6) Notes
Cette mécanique doit être backportée dans Gitea (source canonique), sinon ça re-cassera au prochain pack.
En DEV local, conserver le fallback http://localhost:4321 est utile et normal.