d939fc4ac3
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>
54 lines
2.1 KiB
YAML
54 lines
2.1 KiB
YAML
# ════════════════════════════════════════════════════════
|
|
# 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:
|
|
rvs:
|
|
build: .
|
|
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:
|
|
- ./updates:/updates # APK-Dateien fuer Auto-Update
|
|
environment:
|
|
- 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:
|