Mit RVS_HTTP_TLS=true spricht der RVS auf RVS_HTTP_PORT HTTPS/WSS statt Klartext — damit ist auch die Strecke externer Proxy → RVS verschluesselt. Das oeffentliche Zertifikat hat der Proxy; hier reicht ein selbstsigniertes, das beim ersten Start in data/rvs-tls/ erzeugt wird (eigenes darf dort liegen). Image bekommt dafuer openssl. Nur ohne den Caddy im Stack. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
2.7 KiB
YAML
64 lines
2.7 KiB
YAML
# ════════════════════════════════════════════════════════
|
|
# ARIA RVS Stack — WebSocket Relay + OAuth Callback HTTP
|
|
# 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".
|
|
# ════════════════════════════════════════════════════════
|
|
#
|
|
# Start: docker compose up -d
|
|
|
|
services:
|
|
rvs:
|
|
build: .
|
|
restart: always
|
|
# 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
|
|
- ./data/rvs-tls:/certs # internes Zertifikat (RVS_HTTP_TLS)
|
|
environment:
|
|
- RVS_HTTP_TLS=${RVS_HTTP_TLS:-false}
|
|
- MAX_SESSIONS=10
|
|
# 4 GB V8-Heap — sonst OOM beim Empfang von 1 GB-Files
|
|
# (base64 inflated ~1.34 GB plus WS-Frame-Margin).
|
|
- NODE_OPTIONS=--max-old-space-size=4096
|
|
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
|
|
profiles: ["caddy"] # nur mit COMPOSE_PROFILES=caddy
|
|
restart: always
|
|
ports:
|
|
- "80:80"
|
|
- "${CADDY_HTTPS_PORT:-444}: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:
|