-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
179 lines (174 loc) · 6.87 KB
/
Copy pathdocker-compose.yml
File metadata and controls
179 lines (174 loc) · 6.87 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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# ──────────────────────────────────────────────
# AgentHub Hub Server — Docker Compose 开发环境
# ──────────────────────────────────────────────
# 启动完整 Hub 技术栈:PostgreSQL 16 + Redis 7 + Hub Server。
#
# 快速开始:
# cp .env.example .env # 首次:复制环境变量(已提供默认值)
# ./scripts/dev/dev-up.sh # 一键启动全部服务
# ./scripts/dev/dev-down.sh # 停止并清理
#
# 仅启动基础设施(自己用 go run 启动 Hub Server):
# docker compose up -d postgres redis
# cd hub-server && go run ./cmd/server-hub
#
# 服务端口:
# Hub Server API: http://localhost:8080
# Hub Admin/metrics: http://localhost:6060
# PostgreSQL: localhost:5432
# Redis: localhost:6379
#
# 默认仅绑定 127.0.0.1,避免开发密码和管理端口暴露到局域网。
# 如确需远程调试,显式设置 AGENTHUB_BIND_HOST=0.0.0.0 并自行加防火墙。
# ──────────────────────────────────────────────
services:
# ── PostgreSQL 16 ──────────────────────────
postgres:
image: postgres:16-alpine
container_name: agenthub-postgres
restart: unless-stopped
mem_limit: ${AGENTHUB_POSTGRES_MEM_LIMIT:-512m}
cpus: ${AGENTHUB_POSTGRES_CPUS:-1.0}
pids_limit: ${AGENTHUB_POSTGRES_PIDS_LIMIT:-256}
environment:
POSTGRES_DB: ${AGENTHUB_DB_NAME:-agenthub}
POSTGRES_USER: ${AGENTHUB_DB_USER:-agenthub}
POSTGRES_PASSWORD: ${AGENTHUB_DB_PASSWORD:?请设置 AGENTHUB_DB_PASSWORD(开发环境可设为 dev_password)}
ports:
- "${AGENTHUB_BIND_HOST:-127.0.0.1}:${AGENTHUB_DB_PORT:-5432}:5432"
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${AGENTHUB_DB_USER:-agenthub} -d ${AGENTHUB_DB_NAME:-agenthub}"]
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
networks:
- agenthub-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ── Redis 7 ────────────────────────────────
redis:
image: redis:7-alpine
container_name: agenthub-redis
restart: unless-stopped
mem_limit: ${AGENTHUB_REDIS_CONTAINER_MEM_LIMIT:-256m}
cpus: ${AGENTHUB_REDIS_CPUS:-0.5}
pids_limit: ${AGENTHUB_REDIS_PIDS_LIMIT:-128}
command: >
redis-server
--appendonly yes
--appendfsync everysec
--maxmemory 256mb
--maxmemory-policy allkeys-lru
--save 900 1
--save 300 10
ports:
- "${AGENTHUB_BIND_HOST:-127.0.0.1}:${AGENTHUB_REDIS_PORT:-6379}:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
networks:
- agenthub-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ── Hub Server ─────────────────────────────
hub-server:
build:
context: ./hub-server
dockerfile: ./deployments/Dockerfile
container_name: agenthub-hub
restart: unless-stopped
mem_limit: ${AGENTHUB_HUB_MEM_LIMIT:-512m}
cpus: ${AGENTHUB_HUB_CPUS:-2.0}
pids_limit: ${AGENTHUB_HUB_PIDS_LIMIT:-512}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
environment:
# 数据库
AGENTHUB_DB_HOST: postgres
AGENTHUB_DB_PORT: "5432"
AGENTHUB_DB_USER: ${AGENTHUB_DB_USER:-agenthub}
AGENTHUB_DB_PASSWORD: ${AGENTHUB_DB_PASSWORD:?请设置 AGENTHUB_DB_PASSWORD}
AGENTHUB_DB_NAME: ${AGENTHUB_DB_NAME:-agenthub}
# Redis
AGENTHUB_REDIS_HOST: redis
AGENTHUB_REDIS_PORT: "6379"
AGENTHUB_REDIS_PASSWORD: ""
AGENTHUB_REDIS_DB: "0"
AGENTHUB_REDIS_POOL_SIZE: "100"
AGENTHUB_REDIS_MIN_IDLE_CONNS: "10"
# JWT
AGENTHUB_JWT_SECRET: ${AGENTHUB_JWT_SECRET:?请设置 AGENTHUB_JWT_SECRET(开发环境可设为 dev-secret-change-in-production-min-length-32)}
AGENTHUB_JWT_ACCESS_TTL: ${AGENTHUB_JWT_ACCESS_TTL:-15m}
AGENTHUB_JWT_REFRESH_TTL: ${AGENTHUB_JWT_REFRESH_TTL:-720h}
# 服务
AGENTHUB_SERVER_PORT: ${AGENTHUB_SERVER_PORT:-8080}
AGENTHUB_SERVER_LOG_LEVEL: ${AGENTHUB_SERVER_LOG_LEVEL:-info}
AGENTHUB_SERVER_ADMIN_PORT: ${AGENTHUB_SERVER_ADMIN_PORT:-6060}
AGENTHUB_UPLOAD_DIR: ${AGENTHUB_UPLOAD_DIR:-./uploads}
AGENTHUB_UPLOAD_MAX_SIZE: ${AGENTHUB_UPLOAD_MAX_SIZE:-10485760}
# TokenDance ID OIDC. Values stay empty in local dev unless the operator
# has registered an AgentHub OAuth client in TokenDance ID.
# Web dev owns browser callbacks on 5174. Desktop/Tauri uses the
# http://127.0.0.1/callback loopback policy for dynamic callback ports;
# do not register Desktop port 5173 as a Web callback.
# Run hub-server/scripts/setup-tokendance-oidc.sh to register the client,
# then set the CLIENT_ID and CLIENT_SECRET below.
AGENTHUB_TOKENDANCE_ID_ISSUER_URL: ${AGENTHUB_TOKENDANCE_ID_ISSUER_URL:-http://localhost:3000}
AGENTHUB_TOKENDANCE_ID_JWKS_URI: ${AGENTHUB_TOKENDANCE_ID_JWKS_URI:-}
AGENTHUB_TOKENDANCE_ID_CLIENT_ID: ${AGENTHUB_TOKENDANCE_ID_CLIENT_ID:-}
AGENTHUB_TOKENDANCE_ID_CLIENT_SECRET: ${AGENTHUB_TOKENDANCE_ID_CLIENT_SECRET:-}
AGENTHUB_TOKENDANCE_ID_REDIRECT_URI: ${AGENTHUB_TOKENDANCE_ID_REDIRECT_URI:-http://127.0.0.1/callback}
AGENTHUB_TOKENDANCE_ID_ALLOWED_REDIRECT_URIS: ${AGENTHUB_TOKENDANCE_ID_ALLOWED_REDIRECT_URIS:-http://127.0.0.1/callback,http://localhost:5174/auth/tokendance/callback,http://127.0.0.1:5174/auth/tokendance/callback}
ports:
- "${AGENTHUB_BIND_HOST:-127.0.0.1}:${AGENTHUB_SERVER_PORT:-8080}:8080"
- "${AGENTHUB_BIND_HOST:-127.0.0.1}:${AGENTHUB_SERVER_ADMIN_PORT:-6060}:6060"
volumes:
- uploads_data:/app/uploads
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
read_only: true
tmpfs:
- /tmp:rw,noexec,nosuid,size=64M
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"]
interval: 15s
timeout: 5s
retries: 5
start_period: 15s
networks:
- agenthub-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
pg_data:
name: agenthub_pg_data
redis_data:
name: agenthub_redis_data
uploads_data:
name: agenthub_uploads
networks:
agenthub-net:
name: agenthub-net
driver: bridge