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:
1 parent
e8dc76e94a
commit
be97aa0dea
12 files changed
+163
-35
No files matched your search
+18
-1
@@ -56,4 +56,21 @@ const isInContainer = (): boolean => {
|
||||
|
||||
export const DATA_DIR = isInContainer()
|
||||
? '/config'
|
||||
: path.join(BASE_DIR, 'config');
|
||||
: path.join(BASE_DIR, 'config');
|
||||
|
||||
// ── Chemin de base (reverse proxy en sous-dossier) ─────────────
|
||||
// BASE_URL=/fankarr : l'application est servie sous https://exemple.tld/fankarr
|
||||
// Valeur normalisée : '' (racine) ou '/xxx' sans slash final
|
||||
function normalizeBaseUrl(raw: string | undefined): string {
|
||||
const trimmed = (raw ?? '').trim()
|
||||
if (!trimmed || trimmed === '/') return ''
|
||||
const withLead = trimmed.startsWith('/') ? trimmed : `/${trimmed}`
|
||||
const cleaned = withLead.replace(/\/+$/, '')
|
||||
if (!/^(\/[A-Za-z0-9._~-]+)+$/.test(cleaned)) {
|
||||
console.warn(`[config] BASE_URL « ${trimmed} » invalide (attendu : /mon-app), valeur ignorée`)
|
||||
return ''
|
||||
}
|
||||
return cleaned
|
||||
}
|
||||
|
||||
export const BASE_URL = normalizeBaseUrl(process.env.BASE_URL)
|
||||
Reference in new issue
Block a user