feat: add Docker Compose configuration and update README for improved setup instructions

This commit is contained in:
mlogclub
2026-05-23 22:53:33 +08:00
parent 5e0d479640
commit c5c3852a4b
4 changed files with 141 additions and 4 deletions
+1
View File
@@ -7,6 +7,7 @@
.superpowers
Dockerfile
docker-data
dist
data
qdrant
+14 -4
View File
@@ -280,16 +280,26 @@ make migration # 执行 migration
## Docker
推荐使用 Docker Compose 同时启动应用、MySQL 和 Qdrant
```bash
docker build -t cs-agent .
docker run --rm -p 8083:8083 -v cs-agent-data:/app/data cs-agent
docker compose up -d --build
```
容器默认使用 `/app/config/config.yaml`,镜像内会基于 `config/config.example.yaml` 放置一份默认配置。生产环境建议通过挂载配置文件覆盖
Compose 默认会启动
- `cs-agent`:应用服务,端口 `8083`
- `mysql`MySQL 8.4,数据卷 `mysql-data`
- `qdrant`:向量数据库,数据卷 `qdrant-data`,端口 `6333`/`6334`
Compose 使用 [docker/cs-agent.yaml](docker/cs-agent.yaml) 作为容器内配置,应用会通过 Docker 内部服务名访问 `mysql``qdrant`
也可以只构建应用镜像,但需要自行准备 MySQL 和 Qdrant,并挂载对应配置:
```bash
docker build -t cs-agent .
docker run --rm -p 8083:8083 \
-v $(pwd)/config/config.yaml:/app/config/config.yaml:ro \
-v $(pwd)/docker/cs-agent.yaml:/app/config/config.yaml:ro \
-v cs-agent-data:/app/data \
cs-agent
```
+53
View File
@@ -0,0 +1,53 @@
services:
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_DATABASE: cs_ai_agent
MYSQL_USER: cs_agent
MYSQL_PASSWORD: cs_agent_password
MYSQL_ROOT_PASSWORD: cs_agent_root_password
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u\"$${MYSQL_USER}\" -p\"$${MYSQL_PASSWORD}\" --silent"]
interval: 10s
timeout: 5s
retries: 10
qdrant:
image: qdrant/qdrant:latest
restart: unless-stopped
volumes:
- qdrant-data:/qdrant/storage
ports:
- "6333:6333"
- "6334:6334"
cs-agent:
build:
context: .
dockerfile: Dockerfile
image: cs-agent:latest
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
qdrant:
condition: service_started
ports:
- "8083:8083"
volumes:
- cs-agent-data:/app/data
- ./docker/cs-agent.yaml:/app/config/config.yaml:ro
environment:
TZ: Asia/Shanghai
volumes:
mysql-data:
qdrant-data:
cs-agent-data:
+73
View File
@@ -0,0 +1,73 @@
server:
port: 8083
db:
type: mysql
dsn: cs_agent:cs_agent_password@tcp(mysql:3306)/cs_ai_agent?charset=utf8mb4&parseTime=True&multiStatements=true&loc=Local
maxIdleConns: 5
maxOpenConns: 20
connMaxIdleTimeSeconds: 300
connMaxLifetimeSeconds: 1800
logger:
level: info
format: text
addSource: false
auth:
tokenTTLHours: 12
maxFailedAttempts: 5
credentialLockMinute: 15
customerSession:
secret: replace-with-a-random-secret
ttlMinutes: 120
refreshThresholdMinutes: 30
storage:
default: local
maxUploadSizeMB: 20
local:
root: /app/data/storage
baseUrl: /storage
oss:
endpoint: ""
bucket: ""
accessKeyId: ""
accessKeySecret: ""
baseUrl: ""
private: false
signedUrlExpireSeconds: 600
vectorDB:
type: qdrant
host: qdrant
grpcPort: 6334
apiKey: ""
useTls: false
mcp:
enabled: true
servers:
system:
enabled: true
endpoint: "http://127.0.0.1:8083/api/mcp"
timeoutMs: 15000
headers: {}
wxWork:
enabled: false
corpId: ""
corpSecret: ""
agentId: ""
oauthRedirect: ""
stateSecret: ""
rsaPrivateKey: ""
token: ""
encodingAESKey: ""
notify:
enabled: false
toUsers: []
safe: false
enableDuplicateCheck: true
duplicateCheckInterval: 1800