version: '3.8' services: playwriter-browser: build: context: . dockerfile: Dockerfile container_name: playwriter-browser hostname: playwriter-browser ports: - "5901:5900" # VNC (use 5901 to avoid conflicts) - "6081:6080" # noVNC web interface - "19988:19988" # Playwriter WebSocket relay - "9222:9222" # Chrome DevTools Protocol volumes: # Persist full Chrome profile (login sessions, cookies, localStorage, bookmarks, passwords) - chrome-profile:/root/.config/google-chrome # Persist keyrings for encrypted credentials (gnome-keyring) - browser-keyring:/root/.local/share/keyrings # Persist session data for quick restore - browser-sessions:/root/.config/google-chrome/Default/Sessions environment: - DISPLAY=:99 - PLAYWRITER_TOKEN=${PLAYWRITER_TOKEN:-nuc-browser-token} # Enable password saving in Chrome - CHROME_ENABLE_PASSWORDS=true # Chrome requires shared memory for stability shm_size: 2gb # Chrome capabilities cap_add: - SYS_ADMIN security_opt: - seccomp:unconfined restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pgrep -x chrome > /dev/null || exit 1"] interval: 30s timeout: 10s start_period: 60s retries: 3 volumes: chrome-profile: name: playwriter-chrome-profile browser-keyring: name: playwriter-browser-keyring browser-sessions: name: playwriter-browser-sessions