Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
159 lines (152 loc) · 4.78 KB
/
Copy pathdocker-compose.yml
File metadata and controls
159 lines (152 loc) · 4.78 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
150
151
152
153
154
155
156
157
158
159
# Zakura — OSS quickstart(server + web + 独立 node)
#
# 默认 SQLite(持久化到命名卷),完成管理员初始化后 node 自动登记:
# docker compose up -d
#
# 使用 Postgres(内置 pgvector 服务,需把 DATABASE_URL 指过去):
# DATABASE_URL=postgresql://zakura:zakura@postgres:5432/zakura \
# docker compose --profile postgres up -d
#
# 本地源码构建:
# docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
#
# 健康检查:server 暴露 /livez(liveness)与 /readyz(readiness)。
# 迁移:默认 AUTO_MIGRATE=true(首启建表);生产多副本请设 AUTO_MIGRATE=false,
# 并先用一次 release 任务应用迁移。
services:
server:
image: ${ZAKURA_SERVER_IMAGE:-sunwuyuan/zakura-server:latest}
container_name: zakura-server
ports:
- "8787:8787"
environment:
LISTEN_ADDR: ":8787"
# 默认 SQLite;改用 Postgres:postgresql://zakura:zakura@postgres:5432/zakura
DATABASE_URL: ${DATABASE_URL:-file:/data/zakura.db}
DATA_DIR: /data
# 必填(>=32 字节);quickstart 用占位默认值,部署时务必覆盖
ZAKURA_SECRET: ${ZAKURA_SECRET:-zakura-local-dev-secret-change-me-0123456789abcdef}
PUBLIC_BASE_URL: ${PUBLIC_BASE_URL:-http://localhost:8787}
WEB_PUBLIC_URL: ${WEB_PUBLIC_URL:-http://localhost:3001}
ZAKURA_EDITION: ${ZAKURA_EDITION:-oss}
AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
ZAKURA_NODE_BOOTSTRAP_DIR: /node-bootstrap
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: ${OTEL_EXPORTER_OTLP_LOGS_ENDPOINT:-}
OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-}
volumes:
- zakura-data:/data
- node-bootstrap:/node-bootstrap
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8787/livez"]
interval: 15s
timeout: 3s
retries: 5
start_period: 60s
depends_on:
postgres:
condition: service_healthy
required: false
networks:
- zakura
node:
image: ${ZAKURA_NODE_IMAGE:-sunwuyuan/zakura-agent:latest}
environment:
ZAKURA_AGENT_SERVER: http://server:8787
ZAKURA_AGENT_KIND: server
ZAKURA_AGENT_STATE_DIR: /state
ZAKURA_AGENT_DATA_DIR: /workspace-data
ZAKURA_NODE_BOOTSTRAP_DIR: /node-bootstrap
ZAKURA_WORKSPACE_VOLUME: ${COMPOSE_PROJECT_NAME:-recloud}_workspace-data
volumes:
- node-state:/state
- workspace-data:/workspace-data
- type: volume
source: node-bootstrap
target: /node-bootstrap
read_only: true
volume:
nocopy: true
# Docker Socket 赋予节点宿主管理权限;控制面不挂载此 Socket。
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
server:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD", "zakura-agent", "-healthcheck"]
interval: 20s
timeout: 10s
retries: 3
start_period: 60s
networks:
- zakura
web:
image: ${ZAKURA_WEB_IMAGE:-sunwuyuan/zakura-web:latest}
container_name: zakura-web
ports:
- "3001:3001"
environment:
PORT: 3001
HOSTNAME: 0.0.0.0
depends_on:
server:
condition: service_healthy
restart: unless-stopped
networks:
- zakura
postgres:
profiles: ["postgres"]
# 需带 pgvector(memory embedding / 迁移)
image: ${POSTGRES_IMAGE:-pgvector/pgvector:pg16}
container_name: zakura-postgres
environment:
POSTGRES_USER: zakura
POSTGRES_PASSWORD: zakura
POSTGRES_DB: zakura
# 仅本机调试用;容器间走 zakura 网络
ports:
- "127.0.0.1:5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- zakura
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U zakura -d zakura"]
interval: 5s
timeout: 5s
retries: 10
redis:
# 预留:Go 后端当前不使用 Redis(会话/事件直接落 SQL),此项仅为兼容旧栈
# 或未来演进保留,默认不启动:docker compose --profile redis up -d
profiles: ["redis"]
image: ${REDIS_IMAGE:-redis:7-alpine}
container_name: zakura-redis
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis-data:/data
command: ["redis-server", "--appendonly", "yes"]
networks:
- zakura
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
volumes:
zakura-data:
node-bootstrap:
node-state:
workspace-data:
name: ${COMPOSE_PROJECT_NAME:-recloud}_workspace-data
postgres-data:
redis-data:
networks:
zakura:
name: zakura
driver: bridge