feat(rvs): Caddy optional per COMPOSE_PROFILES — oder eigener Reverse-Proxy

Neu in rvs/.env: COMPOSE_PROFILES=caddy (wie bisher, Caddy macht TLS) oder
leer (ohne Caddy). Der RVS bietet dafuer immer einen unverschluesselten Port
an (RVS_HTTP_BIND:RVS_HTTP_PORT, Default 127.0.0.1:3000), auf den ein
vorhandener nginx/Traefik zeigt — statt nginx → Caddy → RVS mit doppeltem TLS.
Caddys HTTPS-Port ist jetzt CADDY_HTTPS_PORT (Default 444 wie bisher).

README: beide Modi, nginx-Vorlage mit WebSocket-Headern und IPv6, Hinweis
dass Caddy fuer die Zertifikats-Erneuerung Port 80 von aussen braucht.
Bestehende Installationen mit Caddy muessen COMPOSE_PROFILES=caddy eintragen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 12:22:11 +01:00
co-authored by Claude Opus 5.5
parent 35436bff3c
commit 88036bcad3
3 changed files with 99 additions and 28 deletions
+20 -15
View File
@@ -1,27 +1,31 @@
# ════════════════════════════════════════════════════════
# 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.
# Apps/Satelliten/Boxen brauchen TLS (wss://), OAuth-Provider
# wie Spotify HTTPS. Wer TLS macht, waehlt die .env:
#
# A) COMPOSE_PROFILES=caddy — Caddy hier im Stack holt das
# Zertifikat selbst (Let's Encrypt, HTTP-01 ueber Port 80).
# Voraussetzung: Port 80 + CADDY_HTTPS_PORT von aussen auf
# diese Maschine, PUBLIC_URL zeigt per DNS hierher.
#
# B) COMPOSE_PROFILES= — OHNE Caddy. Ein vorhandener
# Reverse-Proxy (nginx, Traefik, ...) macht TLS und zeigt auf
# den unverschluesselten RVS-Port (RVS_HTTP_BIND:RVS_HTTP_PORT).
# nginx-Beispiel: README → RVS → "Ohne Caddy".
# ════════════════════════════════════════════════════════
#
# 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"]
# Unverschluesselter RVS-Port fuer einen externen Reverse-Proxy (Modus B).
# Default nur 127.0.0.1 — steht der Proxy auf einem ANDEREN Rechner,
# RVS_HTTP_BIND=0.0.0.0 (oder die interne IP) setzen und den Port per
# Firewall nur fuer den Proxy freigeben: hier laeuft alles im Klartext.
ports:
- "${RVS_HTTP_BIND:-127.0.0.1}:${RVS_HTTP_PORT:-3000}:3000"
volumes:
- ./updates:/updates # APK-Dateien fuer Auto-Update
environment:
@@ -39,10 +43,11 @@ services:
# damit Restart nicht jedes Mal ein neues Cert holt (Rate-Limit!).
caddy:
image: caddy:latest
profiles: ["caddy"] # nur mit COMPOSE_PROFILES=caddy
restart: always
ports:
- "80:80"
- "444:443"
- "${CADDY_HTTPS_PORT:-444}:443"
command: caddy reverse-proxy --from ${PUBLIC_URL} --to rvs:3000
volumes:
- ./data/caddy/data:/data # Zertifikate (PERSISTENT)