Configure backend proxy for remote deployment

This commit is contained in:
faligam
2026-09-06 16:52:21 +02:00
parent 37636e144b
commit fac3d1ce2c
4 changed files with 18 additions and 20 deletions

View File

@@ -1,5 +1,6 @@
# 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=

View File

@@ -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

View File

@@ -7,7 +7,7 @@
:443 {
handle_path /api/* {
reverse_proxy {$NSCT_API_UPSTREAM}
}
}
reverse_proxy web:3000
@@ -48,7 +48,7 @@
:80 {
handle_path /api/* {
reverse_proxy {$NSCT_API_UPSTREAM}
}
}
reverse_proxy web:3000

View File

@@ -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: