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.
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.mdpour 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)sansstripPrefix. - App qui veut recevoir
/mais émet ses assets sous le préfixe (ex. Portainer--base-url=/portainer) :PathPrefix(/portainer)avecstripPrefix /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
/apidansknowledge/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