Die Basis-URL der API wurde bisher aus dem Port der Seite abgeleitet (office.html: `if (location.port === "8090")`). Laeuft das Frontend hinter anderen Ports - in Produktion 4443 (web) / 4444 (api) - griff die Bedingung nicht, der relative Default /api/v1 lief gegen den Webserver ins Leere, und die Szene fiel still auf Demo-Daten zurueck: fremde Agenten-Namen und erfundene Ticketzahlen bei gleichzeitig leeren Detail-Modals. Die URL kommt jetzt aus MONITOR_API_BASE (.env, Default passend zum Port-Mapping in docker-compose.yml). Der Webserver liefert den Wert zur Laufzeit als /config.js aus; das nginx-Image setzt ihn beim Start per envsubst in die Config ein (default.conf -> default.conf.template). Damit bleibt html/ ein rein statisches, read-only gemountetes Verzeichnis - kein Build-Schritt, kein eigenes Entrypoint-Skript. Ein leerer Wert bedeutet "gleicher Origin" und faellt auf /api/v1 zurueck. Zusaetzlich macht ein roter Banner "API nicht erreichbar!" den Demo-Fallback sichtbar, statt ihn wie bisher stillschweigend als echte Daten auszugeben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
1.3 KiB
Text
29 lines
1.3 KiB
Text
server {
|
|
listen 80;
|
|
server_name localhost;
|
|
|
|
root /usr/share/nginx/html;
|
|
|
|
# Einstiegsseite ist die Buero-Visualisierung - ohne diese Direktive liefert
|
|
# nginx beim Aufruf der Basis-URL ein 403 (Directory-Listing ist deaktiviert,
|
|
# und eine index.html gibt es nicht).
|
|
index office.html;
|
|
|
|
# Laufzeit-Konfiguration fuers Frontend: Das html/-Verzeichnis ist read-only gemountet,
|
|
# deshalb wird die API-Basis-URL nicht als Datei abgelegt, sondern hier aus der Umgebung
|
|
# ausgeliefert (MONITOR_API_BASE, siehe .env). Das nginx-Image ersetzt ${MONITOR_API_BASE}
|
|
# beim Containerstart per envsubst - nur Variablen, die tatsaechlich in der Umgebung
|
|
# definiert sind, nginx-eigene wie $uri bleiben unangetastet. Ist MONITOR_API_BASE gar
|
|
# nicht definiert, bleibt der Platzhalter stehen und nginx verweigert den Start
|
|
# ("unknown \"monitor_api_base\" variable") - besser ein lauter Fehler als eine still
|
|
# falsche URL. docker-compose.yml setzt die Variable daher immer (ggf. leer).
|
|
location = /config.js {
|
|
default_type application/javascript;
|
|
add_header Cache-Control "no-store";
|
|
return 200 'window.MONITOR_API_BASE = "${MONITOR_API_BASE}";';
|
|
}
|
|
|
|
location / {
|
|
try_files $uri $uri/ =404;
|
|
}
|
|
}
|