feat(rvs): Caddy als TLS-Terminator + Let's Encrypt vor RVS
OAuth-Provider (Spotify, Dropbox, ...) verlangen HTTPS fuer non-localhost
Redirect-URIs. Bisher lief der RVS direkt auf einem TCP-Port ohne TLS —
Spotify hat den Callback abgewiesen.
Loesung: Caddy im selben Compose-Stack davor. Holt automatisch ein
Let's Encrypt-Zertifikat fuer PUBLIC_URL (HTTP-01 ueber Port 80),
terminiert TLS auf 443 und routet alles inkl. WebSocket-Upgrades an
den internen RVS-Container (Port 3000).
- rvs/docker-compose.yml: caddy-Service hinzu (image caddy:latest,
command 'caddy reverse-proxy --from ${PUBLIC_URL} --to rvs:3000'),
rvs-Service verliert ports-Block (nur intern via aria-rvs-net),
data-Volumes fuer Caddy-ACME-State (persistent, Rate-Limit-Schutz).
- rvs/.env.example neu: dokumentiert PUBLIC_URL + DNS/Port-
Voraussetzungen.
- rvs/.gitignore neu: .env + data/ (sonst landen die Zertifikate
versehentlich im Repo).
- README RVS-Sektion: Setup-Schritte mit Caddy + Hinweis wie man's
auskommentiert wenn ein eigener Reverse-Proxy davor steht.
Wer schon einen TLS-Terminator hat (nginx/Traefik): caddy-Service in
der Compose auskommentieren, rvs wieder einen ports-Block geben.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -598,16 +598,27 @@ tar -czf aria-backup-$(date +%Y%m%d).tar.gz aria-data/
|
|||||||
|
|
||||||
## RVS — Rendezvous-Server
|
## RVS — Rendezvous-Server
|
||||||
|
|
||||||
Laeuft im Rechenzentrum. WebSocket Relay + Auto-Update Server.
|
Laeuft im Rechenzentrum. WebSocket Relay + OAuth-Callback HTTP-Server.
|
||||||
Wer sich mit dem gleichen Token verbindet, landet im gleichen Room.
|
Wer sich mit dem gleichen Token verbindet, landet im gleichen Room.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd rvs
|
cd rvs
|
||||||
|
cp .env.example .env # PUBLIC_URL eintragen (Domain die auf den Server zeigt)
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Stack:**
|
||||||
|
- `caddy` (TLS-Terminator + Let's Encrypt, lauscht auf 80+443)
|
||||||
|
- `rvs` (WebSocket Relay + OAuth-Callback HTTP, nur intern auf Port 3000)
|
||||||
|
|
||||||
|
Caddy holt automatisch ein Zertifikat fuer `PUBLIC_URL` via HTTP-01-Challenge.
|
||||||
|
ACME-State persistent in `./data/caddy/` (gitignored) — kein Rate-Limit-Drama
|
||||||
|
bei Container-Restart. WebSocket-Upgrades reicht Caddy transparent durch.
|
||||||
|
|
||||||
**Features:**
|
**Features:**
|
||||||
- WebSocket Relay (alle Message-Types: chat, audio, file, config, xtts, update, etc.)
|
- WebSocket Relay (alle Message-Types: chat, audio, file, config, xtts, update, etc.)
|
||||||
|
- OAuth-Callback HTTP: `GET /oauth/callback/{service}?code=...` → broadcastet als
|
||||||
|
`oauth_callback`-WS-Message + zeigt dem Browser eine "OAuth erfolgreich"-Seite
|
||||||
- Auto-Update: APK-Verteilung an Apps ueber WebSocket
|
- Auto-Update: APK-Verteilung an Apps ueber WebSocket
|
||||||
- Heartbeat + tote Verbindungen aufraeumen
|
- Heartbeat + tote Verbindungen aufraeumen
|
||||||
|
|
||||||
@@ -620,6 +631,11 @@ cp ARIA-v0.0.3.0.apk ~/ARIA-AGENT/rvs/updates/
|
|||||||
|
|
||||||
**Multi-Instanz:** Mehrere ARIA-VMs koennen denselben RVS nutzen — jede mit eigenem Token.
|
**Multi-Instanz:** Mehrere ARIA-VMs koennen denselben RVS nutzen — jede mit eigenem Token.
|
||||||
|
|
||||||
|
**Ohne Caddy / eigener TLS-Terminator:** Wenn Du schon einen Reverse-Proxy
|
||||||
|
(nginx/Traefik) davor hast, kommentier den `caddy`-Service in der
|
||||||
|
`rvs/docker-compose.yml` aus und gib `rvs` wieder einen `ports`-Block
|
||||||
|
(z.B. `["3000:3000"]`). Dein Reverse-Proxy macht dann TLS und reicht weiter.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Gamebox-Stack — F5-TTS + Whisper (GPU-Services)
|
## Gamebox-Stack — F5-TTS + Whisper (GPU-Services)
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# ════════════════════════════════════════════════════════
|
||||||
|
# ARIA RVS — Server-seitige Config
|
||||||
|
# Kopieren nach .env und Werte eintragen.
|
||||||
|
# ════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# Oeffentlich erreichbarer DNS-Name dieses Servers. Caddy holt darauf ein
|
||||||
|
# Let's Encrypt-Zertifikat (HTTP-01 Challenge ueber Port 80) und routet
|
||||||
|
# WebSocket + HTTP weiter an den RVS-Container.
|
||||||
|
#
|
||||||
|
# WICHTIG:
|
||||||
|
# - Die Domain muss per DNS-A-Record/AAAA auf diese Maschine zeigen
|
||||||
|
# - Port 80 + 443 muessen vom Internet aus erreichbar sein
|
||||||
|
# - Kein anderer Reverse-Proxy davor (sonst Cert-Konflikt)
|
||||||
|
PUBLIC_URL=rvs.example.de
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Docker-Compose Konfiguration mit echtem Domain-Namen
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Caddy persistent state (Zertifikate, ACME-Account)
|
||||||
|
data/
|
||||||
|
|
||||||
|
# APK-Verzeichnis bleibt — wird ueber release.sh befuellt + commited als latest.apk
|
||||||
|
# (siehe Hauptverzeichnis README)
|
||||||
+45
-2
@@ -1,10 +1,53 @@
|
|||||||
|
# ════════════════════════════════════════════════════════
|
||||||
|
# ARIA RVS Stack — WebSocket Relay + OAuth Callback HTTP
|
||||||
|
# Caddy davor terminiert TLS via Let's Encrypt (HTTP-01
|
||||||
|
# Challenge ueber Port 80). OAuth-Provider wie Spotify
|
||||||
|
# verlangen HTTPS fuer non-localhost Redirect-URIs.
|
||||||
|
# ════════════════════════════════════════════════════════
|
||||||
|
#
|
||||||
|
# Voraussetzungen:
|
||||||
|
# - Port 80 + 443 frei (kein anderer Reverse-Proxy davor)
|
||||||
|
# - Domain (PUBLIC_URL) zeigt per DNS auf diese Maschine
|
||||||
|
# - .env mit PUBLIC_URL gesetzt
|
||||||
|
#
|
||||||
|
# Start: docker compose up -d
|
||||||
|
# Wenn Du einen eigenen TLS-Terminator nutzt (z.B. nginx,
|
||||||
|
# externer Caddy): caddy-service auskommentieren und
|
||||||
|
# rvs-Container den ports-Block geben (3000 → public Port).
|
||||||
|
|
||||||
services:
|
services:
|
||||||
rvs:
|
rvs:
|
||||||
build: .
|
build: .
|
||||||
ports:
|
|
||||||
- "${RVS_PORT:-443}:3000"
|
|
||||||
restart: always
|
restart: always
|
||||||
|
# KEIN ports-Block — Caddy ist davor, RVS nur intern
|
||||||
|
# via aria-rvs-net erreichbar. Wenn Du Caddy nicht nutzt,
|
||||||
|
# diesen ports-Block reaktivieren: ports: ["${RVS_PORT:-443}:3000"]
|
||||||
volumes:
|
volumes:
|
||||||
- ./updates:/updates # APK-Dateien fuer Auto-Update
|
- ./updates:/updates # APK-Dateien fuer Auto-Update
|
||||||
environment:
|
environment:
|
||||||
- MAX_SESSIONS=10
|
- MAX_SESSIONS=10
|
||||||
|
networks:
|
||||||
|
- aria-rvs-net
|
||||||
|
|
||||||
|
# TLS-Terminator + Let's Encrypt. Holt automatisch ein Zertifikat
|
||||||
|
# fuer ${PUBLIC_URL} (HTTP-01 Challenge ueber Port 80). WebSocket-
|
||||||
|
# Upgrades und HTTP-Routes (OAuth-Callback) werden im reverse-proxy
|
||||||
|
# Modus automatisch durchgereicht. ACME-Cache liegt in ./data/caddy/
|
||||||
|
# damit Restart nicht jedes Mal ein neues Cert holt (Rate-Limit!).
|
||||||
|
caddy:
|
||||||
|
image: caddy:latest
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
command: caddy reverse-proxy --from ${PUBLIC_URL} --to rvs:3000
|
||||||
|
volumes:
|
||||||
|
- ./data/caddy/data:/data # Zertifikate (PERSISTENT)
|
||||||
|
- ./data/caddy/config:/config # Caddy-Config-Cache
|
||||||
|
depends_on:
|
||||||
|
- rvs
|
||||||
|
networks:
|
||||||
|
- aria-rvs-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
aria-rvs-net:
|
||||||
|
|||||||
Reference in New Issue
Block a user