diff --git a/.env.example b/.env.example index 072ba892..b87251f7 100644 --- a/.env.example +++ b/.env.example @@ -67,6 +67,7 @@ KC_DB_SCHEMA=keycloak KC_DB_PASSWORD= # SERVER: Public Domain (z.B. auth.mo-code.at) – ohne http/https Prefix! # LOKAL: localhost +# SERVER: auth.mo-code.at KC_HOSTNAME= # false = Zugriff über beliebige Hostnamen erlaubt (nötig ohne TLS / für HTTP-Betrieb) KC_HOSTNAME_STRICT=false @@ -79,6 +80,7 @@ KC_MANAGEMENT_PORT=9000:9000 # LOKAL: http://localhost:8180/realms/meldestelle # SERVER: https://auth.mo-code.at/realms/meldestelle (via Pangolin) KC_ISSUER_URI=http://:8180/realms/meldestelle +# SERVER: https://auth.mo-code.at/realms/meldestelle # Internal JWK Set URI: Service-zu-Service innerhalb Docker (immer keycloak:8080) KC_JWK_SET_URI=http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs @@ -153,10 +155,13 @@ WEB_APP_PORT=4000:4000 # URL für API-Zugriffe vom Browser (Public URL via Pangolin) # LOKAL: http://localhost:8081 # SERVER: https://api.mo-code.at +# SERVER: https://app.mo-code.at (API-Proxy läuft in Caddy unter /api/* – gleiche Domain, kein CORS!) +# ALTERNATIV (eigene Domain): https://api.mo-code.at → dann separaten Pangolin-Route anlegen WEB_APP_API_URL=http://localhost:8081 # URL für Keycloak-Zugriffe vom Browser (Public URL via Pangolin) # LOKAL: http://localhost:8180 # SERVER: https://auth.mo-code.at +# SERVER: https://auth.mo-code.at → Pangolin-Route: auth.mo-code.at → http://10.0.0.50:8180 WEB_APP_KEYCLOAK_URL=http://localhost:8180 # --- DESKTOP-APP --- diff --git a/config/docker/caddy/web-app/Caddyfile b/config/docker/caddy/web-app/Caddyfile index f5def7ec..5584726a 100644 --- a/config/docker/caddy/web-app/Caddyfile +++ b/config/docker/caddy/web-app/Caddyfile @@ -1,40 +1,43 @@ { -# Global options +# TLS wird durch Pangolin/Traefik auf dem VPS terminiert – hier kein HTTPS nötig auto_https off + servers { metrics } } :4000 { -# Root directory +# Root-Verzeichnis für statische Assets root * /usr/share/caddy -# Logging +# Logging (strukturiert, JSON) log { output stdout format json } -# Compression +# Komprimierung encode gzip zstd -# Configuration Template +# Caddy-Template-Engine für config.json (liefert API_BASE_URL & KEYCLOAK_URL an den Browser) templates { mime application/json } -# API Proxy (has priority) +# API-Proxy (höchste Priorität – vor dem SPA-Fallback) handle /api/* { reverse_proxy api-gateway:8081 } -# Health Check +# Health-Check-Endpunkt (für Pangolin Health-Check konfigurieren: GET /health) handle /health { respond "healthy" 200 } -# Serve static files if they exist, otherwise serve index.html (SPA) - file_server - try_files {path} /index.html +# SPA-Fallback: existierende Dateien direkt ausliefern, sonst index.html + handle { + try_files {path} /index.html + file_server + } } diff --git a/config/docker/caddy/web-app/config.json b/config/docker/caddy/web-app/config.json index d0d4e4df..913edbc6 100644 --- a/config/docker/caddy/web-app/config.json +++ b/config/docker/caddy/web-app/config.json @@ -1,10 +1,4 @@ { - "apiBaseUrl": "{{env " - API_BASE_URL - " | default " - "}}", - "keycloakUrl": "{{env " - KEYCLOAK_URL - " | default " - "}}" + "apiBaseUrl": "{{env `API_BASE_URL`}}", + "keycloakUrl": "{{env `KEYCLOAK_URL`}}" }