Files
MaksTinyWorkshop ef24d85d57 capitalisation: triage 95_a_capitaliser + création domaine infra
Triage des 27 propositions du buffer de capitalisation (skill
capitalisation-triage), avec vérification des doublons contre la base.

Intégré dans knowledge/ (23 entrées):
- backend: redis (compensation incrBy non-atomique), nestjs (injection
  cassée sous tsx watch; guard write mode dégradé), async (test rollback
  pipeline multi-fichiers), contracts (idempotence POST), auth (disclosure
  comptes soft-deleted), prisma (index partial soft-delete), llm-providers
  (nouveau: OAuth vs API key, prompt caching).
- frontend: tests (garde-fous parking Later), navigation (fichiers
  non-route sous src/app Expo Router), general (type client vs payload
  backend), state (fallback catch-all mapping DB→UI).
- workflow: story-tracking (statut BMAD vs narratif obsolète).
- product: general (nouveau: doc feature store sans UI).
- infra: NOUVEAU DOMAINE (traefik, tailscale, docker, docker-networking,
  reverse-proxy-paths, sidecar tailscale) + 00_INDEX.md.

Autres:
- 90_debug_et_postmortem.md: post-mortem réseau Docker partagé hors compose.
- Rejeté 3 doublons (types enum contracts, getter PrismaService, $transaction).
- Buffer 95_a_capitaliser.md purgé et restauré à son état initial.
- _projects.conf: MAJ statuts epics + ajout app-rl799.
2026-06-25 10:31:22 +02:00

3.2 KiB


title: Infra — Patterns validés : Reverse proxy & sous-chemins domain: infra bucket: patterns tags: [traefik, reverse-proxy, pathprefix, stripprefix, subpath, spa] applies_to: [architecture, implementation, debug] severity: medium validated_on: 2026-06-25 source_projects: [_Assistant_Cuisine]

Infra — Patterns validés : Reverse proxy & sous-chemins

Extrait de la base de connaissance Lead_tech. Voir knowledge/infra/patterns/README.md pour l'index complet.


Servir une app sous un sous-chemin via reverse proxy

Le pattern qui fonctionne dépend de la façon dont l'app gère ses URLs internes (assets, API, redirects). Trois cas.

Cas 1 — App nativement consciente du préfixe

L'app prend une option de base path et émet ses URLs internes préfixées. Côté Traefik, lire la doc de l'app pour savoir si un stripPrefix est requis — il n'y a pas de règle universelle :

  • App qui reçoit le path complet et sait quoi en faire (ex. Cooklang cook server --url-prefix /cuisine) : PathPrefix(/cuisine) sans stripPrefix.
  • App qui veut recevoir / mais émet ses assets sous le préfixe (ex. Portainer --base-url=/portainer) : PathPrefix(/portainer) avec stripPrefix /portainer.

Cas 2 — App qui sert uniquement des chemins relatifs

Si l'app utilise des URLs relatives partout (<a href="./xxx">, <script src="./xxx">, redirects relatifs aussi), elle fonctionne sous n'importe quel sous-chemin avec un simple stripPrefix côté Traefik. L'app ne sait pas où elle est, mais le navigateur résout correctement les URLs relatives (cas observé sur code-server).

⚠️ Vérifier qu'aucune URL absolue ne traîne dans le HTML/JS. Un href="/static/..." (au lieu de href="./static/..." ou href="static/...") casse le rendu.

Cas 3 — App qui veut être à la racine

Beaucoup de SPA modernes (Homepage, Vite/Next statiques) hardcodent href="/_next/..." etc. Le path prefix casse alors les assets. Solutions :

  • Sous-domaine dédié (homepage.example.com) plutôt que sous-chemin.
  • Sinon, plugin de réécriture de body (ex. traefik/plugin-rewritebody) qui patche le HTML à la volée.
  • Si l'app est incompatible subpath ET doit rester derrière Tailscale : sidecar Tailscale dédié (voir knowledge/infra/patterns/tailscale.md).

Règle : tester en priorité avec un simple PathPrefix + stripPrefix. Si les assets cassent, lire la doc de l'app pour une option de base path. Si rien d'officiel, basculer sur sous-domaine (ou sidecar Tailscale).


Conflit de path entre apps multiples — anticipation

Quand plusieurs apps cohabitent sur le même domaine :

  • Avant d'ajouter une app, vérifier que son préfixe ne va pas matcher des routes d'une autre app — voir le cas /api dans knowledge/infra/risques/traefik.md.

  • Préférer des préfixes longs et distinctifs (/cuisine, /portainer, /code) plutôt que génériques (/app, /admin, /dashboard).

  • Documenter dans le compose Traefik le mapping path → service pour garder une vue d'ensemble.

  • Contexte technique : Traefik v3 / NUC — _Assistant_Cuisine 04-05-2026