-
Notifications
You must be signed in to change notification settings - Fork 581
Expand file tree
/
Copy pathdocker-compose.dev-server.yml
More file actions
106 lines (90 loc) · 3.52 KB
/
docker-compose.dev-server.yml
File metadata and controls
106 lines (90 loc) · 3.52 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
# Automaker Docker Compose - Server Only (Development Mode)
# Runs only the backend API in a container for use with local Electron.
#
# Usage:
# docker compose -f docker-compose.dev-server.yml up
# Then run Electron locally which connects to http://localhost:3008
#
# This mode:
# - Runs only the backend server in a container
# - Mounts source code as volumes (live reload)
# - Server runs with tsx watch for TypeScript changes
# - Electron runs locally on host machine
services:
# Development server (backend API only)
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-only
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 Electron and web mode share the same data directory
# and projects opened in either mode are visible in both
- ./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
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