Docker: deploy/update.sh sichert, baut, migriert und prueft die Erreichbarkeit; der Worker hat jetzt eine Zustandspruefung. Der ganze Stapel wurde durchgespielt - bauen, starten, migrieren, anmelden, Agent-Skript abrufen. Dabei ein echter Fehler aufgefallen: Nach der Anmeldung zeigte die Weiterleitung auf den internen Containernamen. Hinter einem Reverse Proxy waere das eine tote Adresse gewesen. Weiterleitungen nehmen jetzt die eingetragene Adresse, sonst APP_URL, sonst die Proxy-Kopfzeilen. Dazu Skripte nach Art der Proxmox VE Helper-Scripts (Node und PostgreSQL direkt im LXC, ohne Docker). Vorerst intern: Eine Einreichung setzt oeffentlichen Quelltext voraus und laeuft ueber ProxmoxVED. Ausserdem docs/roadmap.md: Bis 1.0.0 fehlt kein Code mehr, sondern Erprobung. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
/**
|
||
* Ermittelt die Adresse, unter der das Dashboard **von außen** erreichbar ist.
|
||
*
|
||
* Im Container ist `request.url` die interne Adresse (`http://<container-id>:3000`). Eine Weiterleitung
|
||
* dorthin führt im Browser ins Leere – genau das passierte nach der Anmeldung im Docker-Stapel.
|
||
*
|
||
* Reihenfolge: eingetragene Adresse → `APP_URL` → Kopfzeilen des Reverse Proxy → Anfrage selbst.
|
||
* Die Kopfzeilen stehen bewusst hinter den konfigurierten Werten: Sie kommen vom Client und lassen
|
||
* sich fälschen; für eine Weiterleitung auf die eigene Seite ist das unkritisch, als erste Wahl aber
|
||
* unnötig.
|
||
*/
|
||
export function oeffentlicheBasis(request: Request, eingetragen?: string): URL {
|
||
if (eingetragen) {
|
||
try {
|
||
return new URL(eingetragen);
|
||
} catch {
|
||
// Unbrauchbarer Eintrag: weiter mit den übrigen Quellen.
|
||
}
|
||
}
|
||
|
||
if (process.env.APP_URL) {
|
||
try {
|
||
return new URL(process.env.APP_URL);
|
||
} catch {
|
||
// ebenso
|
||
}
|
||
}
|
||
|
||
const gastgeber = request.headers.get("x-forwarded-host") ?? request.headers.get("host");
|
||
if (gastgeber) {
|
||
const schema = request.headers.get("x-forwarded-proto") ?? new URL(request.url).protocol.replace(":", "");
|
||
try {
|
||
return new URL(`${schema}://${gastgeber}`);
|
||
} catch {
|
||
// ebenso
|
||
}
|
||
}
|
||
|
||
return new URL(request.url);
|
||
}
|
||
|
||
/** Baut eine Adresse auf derselben Installation – für Weiterleitungen nach der Anmeldung. */
|
||
export function eigeneAdresse(request: Request, pfad: string, eingetragen?: string): URL {
|
||
return new URL(pfad, oeffentlicheBasis(request, eingetragen));
|
||
}
|