# ════════════════════════════════════════════════════════
#  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
      # 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
    restart: always
    ports:
      - "80:80"
      - "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:
