From fac3d1ce2cc59df3aec4d90cdc8d516d4c07317a Mon Sep 17 00:00:00 2001 From: faligam Date: Sun, 6 Sep 2026 16:52:21 +0200 Subject: [PATCH] Configure backend proxy for remote deployment --- .env.example | 7 ++++--- ADMIN-Frontend.md | 21 +++++++++------------ Caddyfile | 4 ++-- docker-compose.yml | 6 +++--- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/.env.example b/.env.example index 317fa6d..adb089c 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,9 @@ -# URL des NSCT Backend API -NSCT_API_BASE_URL=http://localhost:8080 +# Erreichbarer Host:Port des Backend-Rechners, ohne URL-Schema. +# Lokal auf demselben Docker-Host: host.docker.internal:8080 +NSCT_API_UPSTREAM=backend.example.com:8080 # Optional: Caddy Domain für externen Zugriff CADDY_DOMAIN= # Default Theme -DEFAULT_THEME=dark \ No newline at end of file +DEFAULT_THEME=dark diff --git a/ADMIN-Frontend.md b/ADMIN-Frontend.md index 4ce3b2a..84a91c5 100644 --- a/ADMIN-Frontend.md +++ b/ADMIN-Frontend.md @@ -53,8 +53,8 @@ cp .env.example .env Minimale `.env`-Konfiguration: ```env -# URL des NSCT Backend API (Docker-Netzwerk) -NSCT_API_BASE_URL=http://nsct-api:8080 +# Erreichbarer Host:Port des Backend-Rechners (kein Docker-Netzwerk nötig) +NSCT_API_UPSTREAM=backend.example.com:8080 # Optional: Domain für HTTPS-Zugriff über Caddy CADDY_DOMAIN=nsct.example.com @@ -172,11 +172,7 @@ Port 80 und 443 müssen im Firewall-Regelwerk freigeschaltet sein. | Variable | Beschreibung | Default | Beispiel | |---|---|---|---| -| `NSCT_API_BASE_URL` | URL des NSCT-Backend-API | `http://nsct-api:8080` | `http://nsct-api:8080` | -| `DEFAULT_THEME` | Start-Theme | `dark` | `light` | -| `NODE_ENV` | Laufzeit-Modus | `production` | (fest im Dockerfile) | -| `HOST` | Bind-Adresse | `0.0.0.0` | (fest im Dockerfile) | -| `PORT` | Port | `3000` | (fest im Dockerfile) | +| `PORT` | Port des statischen Webservers | `3000` | (fest im Caddyfile) | ### Caddy-Container (`caddy` service) @@ -184,13 +180,14 @@ Port 80 und 443 müssen im Firewall-Regelwerk freigeschaltet sein. |---|---|---|---| | `CADDY_DOMAIN` | Domain für HTTPS / Zertifikat | leer | `nsct.example.com` | | `NSCT_RATE_LIMIT` | Rate-Limiting (optional) | leer | `100/second` | +| `NSCT_API_UPSTREAM` | Host:Port des Backend-Rechners | `host.docker.internal:8080` | `backend.example.com:8080` | ### Konfiguration am Beispiel #### Lokale Entwicklung (HTTP only) ```env -NSCT_API_BASE_URL=http://host.docker.internal:8080 +NSCT_API_UPSTREAM=host.docker.internal:8080 CADDY_DOMAIN= DEFAULT_THEME=dark ``` @@ -198,7 +195,7 @@ DEFAULT_THEME=dark #### Produktionsumgebung (HTTPS) ```env -NSCT_API_BASE_URL=http://nsct-api:8080 +NSCT_API_UPSTREAM=backend.example.com:8080 CADDY_DOMAIN=nsct.example.com DEFAULT_THEME=dark ``` @@ -206,7 +203,7 @@ DEFAULT_THEME=dark #### Light-Mode (z.B. für bestimmte Nutzergruppen) ```env -NSCT_API_BASE_URL=http://nsct-api:8080 +NSCT_API_UPSTREAM=backend.example.com:8080 CADDY_DOMAIN=nsct.example.com DEFAULT_THEME=light ``` @@ -520,7 +517,7 @@ NSCT_RATE_LIMIT=100/second ### CORS -Das Frontend stellt keine Cross-Origin-Anfragen. Alle API-Calls gehen direkt an `NSCT_API_BASE_URL` (gleicher Container/Netzwerk). CORS ist kein Problem, da keine fremden Domains angesprochen werden. +Das Frontend stellt keine Cross-Origin-Anfragen. Alle API-Calls gehen an den Same-Origin-Pfad `/api`; Caddy leitet ihn an `NSCT_API_UPSTREAM` weiter. Frontend und Backend können daher auf getrennten Rechnern laufen, ohne dass der Browser CORS zum Backend benötigt. ### API-Key-Speicherung @@ -870,4 +867,4 @@ GET /api/share/abc123 ─────────────────── │ │ - username │ │ - research_id │ │ │ └───────────────┘ └───────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ -``` \ No newline at end of file +``` diff --git a/Caddyfile b/Caddyfile index 61905ac..a7182aa 100644 --- a/Caddyfile +++ b/Caddyfile @@ -7,7 +7,7 @@ :443 { handle_path /api/* { - reverse_proxy nsct-api:8080 + reverse_proxy {$NSCT_API_UPSTREAM} } reverse_proxy web:3000 @@ -48,7 +48,7 @@ # HTTP fallback (when no domain is set) :80 { handle_path /api/* { - reverse_proxy nsct-api:8080 + reverse_proxy {$NSCT_API_UPSTREAM} } reverse_proxy web:3000 diff --git a/docker-compose.yml b/docker-compose.yml index 1a68607..6a0b592 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,9 +5,6 @@ services: dockerfile: Dockerfile container_name: nsct-web restart: unless-stopped - environment: - - NSCT_API_BASE_URL=http://nsct-api:8080 - - DEFAULT_THEME=dark ports: - "3000:3000" networks: @@ -41,6 +38,9 @@ services: environment: - CADDY_DOMAIN=${CADDY_DOMAIN:-} - NSCT_RATE_LIMIT=${NSCT_RATE_LIMIT:-} + - NSCT_API_UPSTREAM=${NSCT_API_UPSTREAM:-host.docker.internal:8080} + extra_hosts: + - "host.docker.internal:host-gateway" networks: - nsct-network depends_on: