Spaces:
Paused
Paused
| # Automaker Docker Compose - Development Mode | |
| # Runs Automaker with live reload for development. | |
| # Source code is volume mounted for instant changes. | |
| # | |
| # Usage: | |
| # docker compose -f docker-compose.dev.yml up | |
| # Then open http://localhost:3007 | |
| # | |
| # This mode: | |
| # - Mounts source code as volumes (live reload) | |
| # - Runs npm install inside container | |
| # - Uses Vite dev server with HMR | |
| # - Server runs with tsx watch for TypeScript changes | |
| services: | |
| # Development server (backend API) | |
| server: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile.dev | |
| args: | |
| # Match container user to host user for mounted volume permissions | |
| # Override with: UID=$(id -u) GID=$(id -g) docker-compose build | |
| UID: ${UID:-1001} | |
| GID: ${GID:-1001} | |
| container_name: automaker-dev-server | |
| restart: unless-stopped | |
| ports: | |
| - '3008:3008' | |
| environment: | |
| # Optional - Anthropic API key | |
| - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} | |
| # Optional - Claude CLI OAuth credentials | |
| - CLAUDE_OAUTH_CREDENTIALS=${CLAUDE_OAUTH_CREDENTIALS:-} | |
| # Optional - Cursor CLI OAuth token | |
| - CURSOR_AUTH_TOKEN=${CURSOR_AUTH_TOKEN:-} | |
| # Optional - authentication | |
| - AUTOMAKER_API_KEY=${AUTOMAKER_API_KEY:-} | |
| # Development settings | |
| - NODE_ENV=development | |
| - PORT=3008 | |
| - CORS_ORIGIN=http://localhost:3007 | |
| - HUSKY=0 | |
| # Optional - restrict to specific directory within container | |
| - ALLOWED_ROOT_DIRECTORY=${ALLOWED_ROOT_DIRECTORY:-/projects} | |
| - DATA_DIR=/data | |
| # Internal - indicates containerized environment | |
| - IS_CONTAINERIZED=true | |
| volumes: | |
| # Mount source code for live reload | |
| - .:/app:cached | |
| # Use named volume for node_modules to avoid platform conflicts | |
| # This ensures native modules are built for the container's architecture | |
| - automaker-dev-node-modules:/app/node_modules | |
| # IMPORTANT: Mount local ./data directory (not a Docker volume) | |
| # This ensures data is consistent across Electron and web modes | |
| - ./data:/data | |
| # Persist CLI configurations | |
| - automaker-claude-config:/home/automaker/.claude | |
| - automaker-cursor-config:/home/automaker/.cursor | |
| # Note: Workspace mount (/projects) comes from docker-compose.override.yml | |
| # Install deps, build packages, then start server in watch mode | |
| # Note: We override the entrypoint to handle permissions properly | |
| entrypoint: /bin/sh | |
| command: | |
| - -c | |
| - | | |
| # Install as root to avoid permission issues with named volumes | |
| # Use --force to skip platform-specific devDependencies (dmg-license is macOS-only) | |
| echo 'Installing dependencies...' && | |
| npm ci --legacy-peer-deps --force && | |
| echo 'Building shared packages...' && | |
| npm run build:packages && | |
| # Fix permissions and start server as automaker user | |
| chown -R automaker:automaker /app/node_modules && | |
| echo 'Starting server in development mode...' && | |
| exec gosu automaker npm run _dev:server | |
| healthcheck: | |
| test: ['CMD', 'curl', '-f', 'http://localhost:3008/api/health'] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 5 | |
| start_period: 60s | |
| # Development UI (frontend with HMR) | |
| ui: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile.dev | |
| args: | |
| UID: ${UID:-1001} | |
| GID: ${GID:-1001} | |
| container_name: automaker-dev-ui | |
| restart: unless-stopped | |
| ports: | |
| - '3007:3007' | |
| environment: | |
| - NODE_ENV=development | |
| - VITE_SERVER_URL=http://localhost:3008 | |
| - TEST_PORT=3107 | |
| - VITE_SKIP_ELECTRON=true | |
| - VITE_APP_MODE=3 | |
| - HUSKY=0 | |
| volumes: | |
| # Mount source code for live reload | |
| - .:/app:cached | |
| # Share node_modules with server container | |
| - automaker-dev-node-modules:/app/node_modules | |
| depends_on: | |
| server: | |
| condition: service_healthy | |
| working_dir: /app/apps/ui | |
| # Start Vite dev server for UI with HMR | |
| # --host flag makes Vite bind to 0.0.0.0 for Docker access | |
| # Note: We override the entrypoint to run as automaker user | |
| entrypoint: /bin/sh | |
| command: | |
| - -c | |
| - | | |
| exec gosu automaker sh -c " | |
| echo 'Waiting for dependencies to be ready...' && | |
| while [ ! -d /app/node_modules/.bin ]; do sleep 2; done && | |
| echo 'Starting UI development server...' && | |
| cd /app/apps/ui && npx vite --host | |
| " | |
| volumes: | |
| automaker-dev-node-modules: | |
| name: automaker-dev-node-modules | |
| # Named volume for container-specific node_modules | |
| automaker-claude-config: | |
| name: automaker-claude-config | |
| automaker-cursor-config: | |
| name: automaker-cursor-config | |