services: # ─── Claude Max API Proxy ─────────────────────────────── proxy: image: node:22-alpine container_name: aria-proxy extra_hosts: - "host.docker.internal:host-gateway" # Zugriff auf die VM via SSH command: >- sh -c "apk add --no-cache openssh-client bash curl && npm install -g @anthropic-ai/claude-code claude-max-api-proxy && DIST=$$(find /usr/local/lib -path '*/claude-max-api-proxy/dist' -type d | head -1) && sed -i 's/startServer({ port })/startServer({ port, host: process.env.HOST || \"127.0.0.1\" })/' $$DIST/server/standalone.js && sed -i 's/if (model\.includes/if ((model||\"claude-sonnet-4\").includes/g' $$DIST/adapter/cli-to-openai.js && sed -i '1i\\function _t(c){return typeof c===\"string\"?c:Array.isArray(c)?c.filter(function(b){return b.type===\"text\"}).map(function(b){return b.text||\"\"}).join(\"\"):String(c)}' $$DIST/adapter/openai-to-cli.js && sed -i 's/msg\\.content/_t(msg.content)/g' $$DIST/adapter/openai-to-cli.js && sed -i 's/\"--no-session-persistence\",/\"--no-session-persistence\",\"--dangerously-skip-permissions\",/' $$DIST/subprocess/manager.js && claude-max-api" volumes: - ~/.claude:/root/.claude # Claude CLI Auth (Credentials in /root/.claude/.credentials.json) - ./aria-data/ssh:/root/.ssh # SSH Keys fuer VM-Zugriff (aria-wohnung, rw fuer ARIA) - aria-shared:/shared # Shared Volume fuer Datei-Austausch (Uploads von App) environment: - HOST=0.0.0.0 - SHELL=/bin/bash # Claude Code Bash-Tool braucht bash (nicht nur sh/ash) - CLAUDE_CODE_BUBBLEWRAP=1 # Erlaubt --dangerously-skip-permissions als root restart: unless-stopped networks: - aria-net # ─── Qdrant (Vector-DB fuer ARIAs Gedaechtnis) ──────── # Storage liegt im Repo-Bind-Mount aria-data/brain/qdrant. # Damit Backup/Export/Import komplett ueber das Filesystem gehen. qdrant: image: qdrant/qdrant:latest container_name: aria-qdrant volumes: - ./aria-data/brain/qdrant:/qdrant/storage restart: unless-stopped networks: - aria-net # ─── ARIA Brain (Agent + Memory) ───────────────────────── # Loest das alte aria-core (OpenClaw) ab. Vector-DB-basiertes # Memory, eigener Agent-Loop, SSH zur aria-wohnung-VM. brain: build: ./aria-brain container_name: aria-brain hostname: aria-wohnung-brain # damit ssh known_hosts stabil bleibt extra_hosts: - "host.docker.internal:host-gateway" # Zugriff auf die VM via SSH depends_on: - qdrant - proxy environment: - QDRANT_HOST=aria-qdrant - QDRANT_PORT=6333 - PROXY_URL=http://proxy:3456 - ARIA_AUTH_TOKEN=${ARIA_AUTH_TOKEN:-} volumes: - ./aria-data/brain/data:/data # Memory-Cache + Skills + Models (bind-mount fuer Export) - ./aria-data/brain-import:/import:ro # Quell-MDs fuer den initialen Memory-Import (read-only) - ./aria-data/ssh:/root/.ssh # SSH-Keys fuer aria-wohnung (geteilt mit Proxy) - aria-shared:/shared # gleicher Austausch-Speicher wie Bridge restart: unless-stopped networks: - aria-net # ─── ARIA Voice Bridge ────────────────────────────────── bridge: build: ./bridge container_name: aria-bridge depends_on: - brain networks: - aria-net ports: - "3001:3001" # Diagnostic Web-UI (Diagnostic teilt Netzwerk mit Bridge) volumes: - aria-shared:/shared # Shared Volume fuer Datei-Austausch # Audio-Zugriff - /run/user/1000/pulse:/run/user/1000/pulse - /dev/snd:/dev/snd devices: - /dev/snd environment: - PULSE_SERVER=unix:/run/user/1000/pulse/native - BRAIN_URL=http://aria-brain:8080 - ARIA_AUTH_TOKEN=${ARIA_AUTH_TOKEN:-} - RVS_HOST=${RVS_HOST:-} - RVS_PORT=${RVS_PORT:-443} - RVS_TLS=${RVS_TLS:-true} - RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true} - RVS_TOKEN=${RVS_TOKEN:-} restart: unless-stopped # ─── Diagnostic (Selbstcheck-UI und Einstellungen) ──── # Teilt Netzwerk mit Bridge, damit der Diagnostic-Server die # Bridge auf localhost erreichen kann. diagnostic: build: ./diagnostic container_name: aria-diagnostic depends_on: - bridge network_mode: "service:bridge" volumes: - /var/run/docker.sock:/var/run/docker.sock # Container Restart + Brain-Export/Import - ./aria-data/config/diag-state:/data # Persistenter State (aktive Session etc.) - aria-shared:/shared # Shared Volume (Uploads + Config + Voices) - ./aria-data/brain:/brain # Brain-Export/Import (tar.gz aus Bind-Mount) environment: - ARIA_AUTH_TOKEN=${ARIA_AUTH_TOKEN:-} - PROXY_URL=http://proxy:3456 - BRAIN_URL=http://aria-brain:8080 - RVS_HOST=${RVS_HOST:-} - RVS_PORT=${RVS_PORT:-443} - RVS_TLS=${RVS_TLS:-true} - RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true} - RVS_TOKEN=${RVS_TOKEN:-} restart: unless-stopped volumes: aria-shared: # Datei-Austausch zwischen Bridge / Brain / Diagnostic networks: aria-net: driver: bridge