# Deployment layouts One image, three roles (`JARVIS_ROLE`), selected in `.env`. GPU is added per OS via a compose override picked with `COMPOSE_FILE`. ## A. All-in-one (single machine) Everything (desktop + Chrome + bridge + bot + TTS) in one container. ``` # .env JARVIS_ROLE=full COMPOSE_FILE=docker-compose.yml:docker-compose.gpu-linux.yml # Ubuntu # COMPOSE_FILE=docker-compose.yml:docker-compose.gpu-windows.yml # Windows 11 DISCORD_SELFBOT_TOKEN=... DISCORD_GUILD_ID=... docker compose up -d # Ollama + javis (COMPOSE_FILE adds GPU) ``` ## B. Split: browser host (LAN) + bot on your PC The on-screen Chrome, real mouse/keyboard (xdotool) and screen live on the **browser host**. Your PC runs the **bot** and drives that browser over the internal network — no auth (internal only). ### Browser host (the LAN machine that shows Chrome, e.g. 192.168.10.9) ``` # .env JARVIS_ROLE=browser CDP_BIND=0.0.0.0 BROWSER_CONTROL_BIND=0.0.0.0 CDP_PUBLISH_BIND=0.0.0.0 # no GPU needed → leave COMPOSE_FILE unset (base compose only) docker compose up -d javis # desktop + Chrome + control-server (port 8777) ``` Watch it on this machine’s VNC (`localhost:5901`) / noVNC (`localhost:6080`). ### Bot host (your PC — Ubuntu or Windows 11) ``` # .env JARVIS_ROLE=bot BROWSER_CONTROL_URL=http://192.168.10.9:8777 # the browser host's LAN IP COMPOSE_FILE=docker-compose.yml:docker-compose.gpu-linux.yml # Ubuntu # COMPOSE_FILE=docker-compose.yml:docker-compose.gpu-windows.yml # Windows 11 DISCORD_SELFBOT_TOKEN=... DISCORD_GUILD_ID=... docker compose up -d # bot + bridge + TTS + Ollama (GPU per OS) ``` The bot’s `controlBrowser` tool posts commands to `BROWSER_CONTROL_URL`, so "네이버에서 X 검색", "구글로 돌아가" etc. drive the **browser host’s** Chrome with real human-style input (visible on its VNC). ## Windows 11 notes - Install the NVIDIA driver on Windows and enable GPU in Docker Desktop (Settings → Resources → WSL Integration). Use the `gpu-windows.yml` override. - Paths: named volumes are cross-platform. The Gemini OAuth bind mount defaults to `${HOME}/.config/javis/gemini` (works under WSL); override `GEMINI_OAUTH_DIR` if needed. ## Known limitation Discord Go-Live broadcast of the **browser host's** screen from a **remote** bot is not supported (the bot's WebRTC screen capture is local to the bot machine). Use the browser host's VNC to view it. A full remote-broadcast path is separate, larger work.