-
Notifications
You must be signed in to change notification settings - Fork 580
Expand file tree
/
Copy pathdocker-compose.dev.yml
More file actions
149 lines (131 loc) · 4.61 KB
/
docker-compose.dev.yml
File metadata and controls
149 lines (131 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# 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