Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions docker/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Makefile for Browser Operator Core
# Provides DevTools frontend + Agent Server deployments

.PHONY: help build devtools-up up down logs status chrome chrome-clean

# Chrome binary detection with cross-platform fallbacks
# Override with: CHROME_BINARY=/path/to/chrome make chrome
CHROME_BINARY ?= $(shell \
if command -v google-chrome >/dev/null 2>&1; then echo "google-chrome"; \
elif command -v chromium >/dev/null 2>&1; then echo "chromium"; \
elif command -v chromium-browser >/dev/null 2>&1; then echo "chromium-browser"; \
elif [ -x "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary" ]; then echo "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"; \
elif [ -x "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then echo "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; \
else echo "chrome-not-found"; \
fi)

# Chrome profile directory (cleaned before each run)
CHROME_PROFILE ?= /tmp/browser-operator-chrome-profile

help: ## Show this help
@echo "Browser Operator Core - Docker Deployments"
@echo "==========================================="
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-12s %s\n", $$1, $$2}'
@echo ""
@echo "Deployment options:"
@echo " Type 1: make devtools-up # DevTools only (AUTOMATED_MODE=true by default)"
@echo " Type 2: make up # DevTools + Agent Server (lightweight)"
@echo ""
@echo "Full build (includes agent-server in image):"
@echo " make build && docker-compose up -d"
@echo ""
@echo "For manual debugging mode (Type 1 without API key bypass):"
@echo " docker-compose build --build-arg AUTOMATED_MODE=false && make devtools-up"

build: ## Build full image (DevTools + Agent Server baked in)
docker-compose build

devtools-up: ## Start DevTools only (Type 1)
docker-compose up -d
@echo ""
@echo "DevTools UI: http://localhost:8000"

up: ## Start DevTools + Agent Server (Type 2 - lightweight)
docker-compose -f docker-compose.lightweight.yml up -d
@echo ""
@echo "Services:"
@echo " DevTools: http://localhost:8000"
@echo " Agent API: http://localhost:8080"
@echo " Agent WS: ws://localhost:8082"

down: ## Stop all containers
docker-compose -f docker-compose.lightweight.yml down 2>/dev/null || true
docker-compose down 2>/dev/null || true

logs: ## Show logs
docker-compose -f docker-compose.lightweight.yml logs -f 2>/dev/null || docker-compose logs -f

status: ## Show container status
@docker ps --filter "name=browser-operator"

chrome-clean: ## Remove Chrome debug profile
@rm -rf "$(CHROME_PROFILE)"
@echo "Cleaned Chrome profile: $(CHROME_PROFILE)"

chrome: chrome-clean ## Launch Chrome with custom DevTools (clean profile)
@if [ "$(CHROME_BINARY)" = "chrome-not-found" ]; then \
echo "Error: No Chrome/Chromium binary found."; \
echo "Set CHROME_BINARY=/path/to/chrome make chrome"; \
exit 1; \
fi
@echo "Using Chrome: $(CHROME_BINARY)"
@echo "Profile: $(CHROME_PROFILE)"
"$(CHROME_BINARY)" \
--remote-debugging-port=9222 \
--remote-allow-origins="*" \
--auto-open-devtools-for-tabs \
--user-data-dir="$(CHROME_PROFILE)" \
--custom-devtools-frontend=http://localhost:8000/
48 changes: 48 additions & 0 deletions docker/docker-compose.lightweight.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Lightweight deployment: DevTools + Agent Server (no full build required)
# Uses pre-built DevTools image + separate Agent Server container
#
# Usage:
# docker-compose -f docker-compose.lightweight.yml up -d

services:
devtools:
image: browser-operator-devtools:latest
container_name: browser-operator-devtools
ports:
- "8000:8000"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
restart: unless-stopped
networks:
- devtools-network

agent-server:
image: node:18-alpine
container_name: browser-operator-agent
working_dir: /app
volumes:
- ../agent-server/nodejs:/app:ro
- agent-data:/app/clients
command: ["node", "start.js"]
ports:
- "8080:8080"
- "8082:8082"
environment:
- NODE_ENV=production
- HOST=0.0.0.0
- PORT=8082
- API_PORT=8080
- CDP_HOST=${CDP_HOST:-host.docker.internal}
- CDP_PORT=${CDP_PORT:-9222}
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
networks:
- devtools-network

volumes:
agent-data:

networks:
devtools-network:
driver: bridge