Files
archicratie-edition/docs/runbooks/ENV-PUBLIC_SITE.md
Archicratia 7444eeb532
All checks were successful
CI / build-and-anchors (push) Successful in 1m45s
SMOKE / smoke (push) Successful in 11s
docs: add pro runbooks (deploy/edge/public_site) + annotations spec + start-here v2
2026-02-21 15:34:47 +01:00

3.1 KiB
Raw Blame History

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 cest 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 quelquun oublie lURL 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 linjection 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.