services: browser: build: context: ./browser_env dockerfile: Dockerfile.browser image: browser-use-browser-runtime:latest container_name: browser-use-browser environment: - MODEL_DEFAULT=${MODEL_DEFAULT:-qwen3.5-122b} - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_BASE_URL=${OPENAI_BASE_URL} - BROWSER_USE_RPC_HOST=0.0.0.0 - BROWSER_USE_RPC_PORT=8787 ports: - "${BROWSER_NOVNC_PUBLISH:-6080:6080}" - "${BROWSER_CDP_PUBLISH:-9222:9222}" networks: browser-net: aliases: - browser shm_size: '2gb' volumes: - browser_profiles:/src/browser_data - ./workspace:/app/workspace:rw restart: always healthcheck: test: [ "CMD-SHELL", "curl -fsS http://127.0.0.1:9222/json/version >/dev/null && curl -fsS http://127.0.0.1:8787/health >/dev/null || exit 1" ] interval: 10s timeout: 3s retries: 12 start_period: 20s browser-api: build: context: ./api dockerfile: Dockerfile container_name: browser-use-api environment: - BROWSER_USE_RPC_URL=http://browser:8787/run - BROWSER_API_HOST=0.0.0.0 - BROWSER_API_PORT=8088 - BROWSER_API_MAX_CONCURRENCY=2 - BROWSER_VIEW_BASE_URL=${BROWSER_VIEW_BASE_URL:-http://localhost:6081} - BROWSER_USE_ISOLATION_MODE=${BROWSER_USE_ISOLATION_MODE:-docker-per-principal} - BROWSER_RUNTIME_IMAGE=${BROWSER_RUNTIME_IMAGE:-browser-use-browser-runtime:latest} - BROWSER_RUNTIME_NETWORK=${BROWSER_RUNTIME_NETWORK:-browser-net} - BROWSER_RUNTIME_TTL_SECONDS=${BROWSER_RUNTIME_TTL_SECONDS:-900} - BROWSER_RUNTIME_START_TIMEOUT=${BROWSER_RUNTIME_START_TIMEOUT:-45} - BROWSER_RUNTIME_ENABLE_UI=${BROWSER_RUNTIME_ENABLE_UI:-true} - MODEL_DEFAULT=${MODEL_DEFAULT:-qwen3.5-122b} - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_BASE_URL=${OPENAI_BASE_URL} depends_on: browser: condition: service_healthy ports: - "${BROWSER_API_PUBLISH:-8088:8088}" volumes: - /var/run/docker.sock:/var/run/docker.sock healthcheck: test: [ "CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8088/health', timeout=2).read()\" >/dev/null 2>&1 || exit 1", ] interval: 120s timeout: 3s retries: 12 start_period: 10s restart: always networks: - browser-net browser-view-proxy: image: nginx:alpine container_name: browser-use-view-proxy volumes: - ./browser_env/nginx.browser-view.conf:/etc/nginx/nginx.conf:ro depends_on: browser: condition: service_healthy ports: - "${BROWSER_VIEW_PROXY_PUBLISH:-6081:8080}" restart: always networks: - browser-net tunnel: image: cloudflare/cloudflared:latest profiles: - remote container_name: browser-use-tunnel restart: always command: tunnel --protocol http2 --url http://browser-view-proxy:8080 --no-tls-verify networks: - browser-net volumes: browser_profiles: networks: browser-net: name: browser-net driver: bridge