feat: support d'un chemin de base (BASE_URL) pour reverse proxy

FanKarr supposait jusqu'ici être servi à la racine du domaine. La variable
d'environnement BASE_URL (ex. /fankarr) permet de l'héberger dans un
sous-dossier, sans reconstruire l'image : le préfixe est appliqué au démarrage.

- server/config.ts : BASE_URL normalisée et validée ('' = racine)
- server/index.ts  : toutes les routes montées sous BASE_URL via un Router,
  index.html servi avec <base href> et window.__BASE_URL__, redirection de /
- server/auth.ts   : cookie de session limité au chemin de base
- src/base-url.ts  : préfixage des appels fetch('/api/…') en un point unique,
  helpers withBase / absoluteUrl
- src/router       : createWebHistory(BASE_URL)
- vite.config.ts   : base './' (assets relatifs, résolus par <base href>)

Comportement inchangé lorsque BASE_URL n'est pas défini.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
zacharyandClaude Opus 5 committed 2026-09-20 02:35:28 +02:00
1 parent e8dc76e94a
commit be97aa0dea
12 files changed
+163 -35

No files matched your search

+30
View File
@@ -198,11 +198,41 @@ FanKarr est alors accessible sur `http://localhost:9898`. La configuration, les
| `JWT_SECRET` | généré | Secret des sessions, généré dans `secret.key` (dossier de configuration) si absent |
| `AUTH_TOKEN_EXPIRY` | `30d` | Durée de validité de la session (ex. `7d`, `1y` ; `never` ou `0` : pas d'expiration) |
| `GITHUB_BASE` | dépôt scraper | Adresse de base des données du scraper, si vous hébergez votre propre copie |
| `BASE_URL` | non défini | Sous-dossier derrière un reverse proxy (ex. `/fankarr`) |
Par défaut, `GITHUB_BASE` vaut `https://raw.githubusercontent.com/masutayunikon/fankarr-scraper/main`.
---
### Reverse proxy en sous-dossier
Par défaut, FanKarr est servi à la racine du domaine. Pour l'héberger sous un
sous-dossier (`https://exemple.tld/fankarr`), renseignez `BASE_URL` :
```yaml
environment:
- BASE_URL=/fankarr
```
L'application, l'API et l'API publique v1 sont alors servies sous ce préfixe
(`/fankarr/api/v1/...`), et une requête sur `/` y est redirigée. Aucune
reconstruction de l'image n'est nécessaire : le préfixe est appliqué au
démarrage.
Côté proxy, transmettez l'URL **sans réécrire le chemin** :
```nginx
location /fankarr/ {
proxy_pass http://127.0.0.1:9898; # pas de / final : le chemin est conservé
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
Laissez `BASE_URL` vide pour un sous-domaine dédié (`https://fankarr.exemple.tld`).
---
### Premier lancement
1. Ouvrez `http://localhost:9898` (ou l'adresse de votre serveur).