Clarify Docker port binding and SSH tunnel for admin access

Use 127.0.0.1:8001:8001 to bind admin port locally only.
Explain Docker's 0.0.0.0 vs 127.0.0.1 distinction and add
SSH tunnel diagram showing how admin UI is accessed remotely.
This commit is contained in:
Oliver Hofmann 2026-04-28 08:52:26 +02:00
parent ff5c88ecfd
commit f22bad6496

View File

@ -85,6 +85,7 @@ docker build -t llm-quota .
```bash
docker run -d \
-p 8000:8000 \
-p 127.0.0.1:8001:8001 \
-e ADMIN_PASSWORD=geheim \
-e OLLAMA_URL=http://host.docker.internal:11434 \
-e DATABASE_URL=sqlite:///./data/quota.db \
@ -93,39 +94,33 @@ docker run -d \
llm-quota
```
Port 8001 (Admin) wird bewusst **nicht** an den Host gebunden. Die Admin-Oberfläche ist über einen Reverse-Proxy zu exponieren (siehe unten).
| Port | Bindung | Dienst |
|------|---------|--------|
| `8000` | `0.0.0.0` — öffentlich | Proxy (für LLM-Clients) |
| `8001` | `127.0.0.1` — nur lokal am Server | Admin-API + Admin-Oberfläche |
| Port | Dienst |
|------|--------|
| `8000` | Proxy (für LLM-Clients, öffentlich) |
| `8001` | Admin-API + Admin-Oberfläche (nur intern) |
Docker unterscheidet beim Port-Mapping zwischen `0.0.0.0` (alle Interfaces, öffentlich erreichbar) und `127.0.0.1` (nur der Server selbst kann zugreifen). Mit `-p 127.0.0.1:8001:8001` ist Port 8001 am Server verfügbar, aber von außen nicht direkt ansprechbar.
### Admin-Oberfläche via Reverse-Proxy zugänglich machen
### Admin-Oberfläche per SSH-Tunnel erreichbar machen
Beispiel mit nginx — Port 8001 intern weiterleiten, nach außen absichern:
Der SSH-Tunnel leitet einen lokalen Port auf den Server weiter und nutzt dabei, dass Port 8001 dort auf `127.0.0.1` erreichbar ist:
```nginx
server {
listen 443 ssl;
server_name admin.example.com;
location / {
proxy_pass http://localhost:8001;
}
}
```
Oder temporär für lokalen Zugriff per SSH-Tunnel:
Admin-Laptop:8001 ──SSH──► Server:127.0.0.1:8001 ──► Container:8001
```
```bash
ssh -L 8001:localhost:8001 user@server
```
Danach ist die Admin-Oberfläche auf dem Laptop unter `http://localhost:8001` erreichbar — ohne dass Port 8001 öffentlich exponiert wird.
### Mit PostgreSQL
```bash
docker run -d \
-p 8000:8000 \
-p 127.0.0.1:8001:8001 \
-e ADMIN_PASSWORD=geheim \
-e DATABASE_URL=postgresql://user:pass@db-host:5432/llm_quota \
-e OLLAMA_URL=http://ollama:11434 \