-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathdocker-compose.prod.yml
More file actions
95 lines (89 loc) · 3.73 KB
/
docker-compose.prod.yml
File metadata and controls
95 lines (89 loc) · 3.73 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
## PRDforge — production compose (uses pre-built images from ghcr.io)
## Usage: docker compose -f docker-compose.prod.yml up -d
services:
postgres:
image: postgres:16-alpine@sha256:97ff59a4e30e08d1c11bdcd9455e7832368c0572b576c9092cde2df4ae5552a3
environment:
POSTGRES_DB: ${POSTGRES_DB:-prdforge}
POSTGRES_USER: ${POSTGRES_USER:-prdforge}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-prdforge}
ports:
- "127.0.0.1:${POSTGRES_PORT:-5432}:5432"
volumes:
- pgdata:/var/lib/postgresql/data
- ./db/01_init.sql:/docker-entrypoint-initdb.d/01_init.sql:ro
- ./db/02_seed.sql:/docker-entrypoint-initdb.d/02_seed.sql:ro
- ./db/03_comments.sql:/docker-entrypoint-initdb.d/03_comments.sql:ro
- ./db/04_replies_and_settings.sql:/docker-entrypoint-initdb.d/04_replies_and_settings.sql:ro
- ./db/05_token_stats.sql:/docker-entrypoint-initdb.d/05_token_stats.sql:ro
- ./db/06_chat.sql:/docker-entrypoint-initdb.d/06_chat.sql:ro
- ./db/07_multi_user.sql:/docker-entrypoint-initdb.d/07_multi_user.sql:ro
- ./db/08_mcp_activity.sql:/docker-entrypoint-initdb.d/08_mcp_activity.sql:ro
- ./db/09_audit.sql:/docker-entrypoint-initdb.d/09_audit.sql:ro
- ./db/10_password_reset.sql:/docker-entrypoint-initdb.d/10_password_reset.sql:ro
- ./db/11_chat_multiuser.sql:/docker-entrypoint-initdb.d/11_chat_multiuser.sql:ro
- ./db/12_better_auth.sql:/docker-entrypoint-initdb.d/12_better_auth.sql:ro
- ./db/13_section_access_log.sql:/docker-entrypoint-initdb.d/13_section_access_log.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-prdforge}"]
interval: 3s
timeout: 2s
retries: 10
restart: unless-stopped
mcp-server:
image: ghcr.io/tommass/prdforge-mcp-server:${PRDFORGE_VERSION:-latest}
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-prdforge}:${POSTGRES_PASSWORD:-prdforge}@postgres:5432/${POSTGRES_DB:-prdforge}
ports:
- "127.0.0.1:8080:8080"
depends_on:
postgres:
condition: service_healthy
command: python server.py --http 8080
healthcheck:
test: ["CMD-SHELL", "python -c \"import socket; s=socket.create_connection(('localhost', 8080), 2); s.close()\""]
interval: 5s
timeout: 3s
retries: 5
start_period: 10s
restart: unless-stopped
python-api:
image: ghcr.io/tommass/prdforge-api:${PRDFORGE_VERSION:-latest}
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-prdforge}:${POSTGRES_PASSWORD:-prdforge}@postgres:5432/${POSTGRES_DB:-prdforge}
CHAT_PROVIDER: ${CHAT_PROVIDER:-claude_cli}
CHAT_MCP_URL: ${CHAT_MCP_URL:-http://mcp-server:8080/mcp/}
CLAUDE_CLI_PERMISSION_MODE: ${CLAUDE_CLI_PERMISSION_MODE:-acceptEdits}
CLAUDE_CLI_APPROVAL_PERMISSION_MODE: ${CLAUDE_CLI_APPROVAL_PERMISSION_MODE:-acceptEdits}
CLAUDE_CLI_MODEL: ${CLAUDE_CLI_MODEL:-}
CLAUDE_CLI_ARGS: ${CLAUDE_CLI_ARGS:-}
CLAUDE_CLI_PATH: ${CLAUDE_CLI_PATH:-claude}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
ANTHROPIC_MODEL: ${ANTHROPIC_MODEL:-claude-3-7-sonnet-latest}
volumes:
- ${HOME}/.claude:/root/.claude
ports:
- "127.0.0.1:8088:8088"
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 3s
timeout: 2s
retries: 5
restart: unless-stopped
frontend:
image: ghcr.io/tommass/prdforge-frontend:${PRDFORGE_VERSION:-latest}
ports:
- "127.0.0.1:3000:3000" # use a reverse proxy for external access
environment:
NEXT_PUBLIC_API_URL: ""
depends_on:
- python-api
restart: unless-stopped
volumes:
pgdata: