mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-06-28 10:03:40 +02:00
ef24d85d57
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.
58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
---
|
|
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.
|
|
|
|
---
|
|
|
|
<a id="pattern-app-sous-chemin-reverse-proxy"></a>
|
|
## 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).
|
|
|
|
---
|
|
|
|
<a id="pattern-conflit-path-multi-apps"></a>
|
|
## 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
|