feat: add Docker Compose configuration and update README for improved setup instructions
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
.superpowers
|
||||
|
||||
Dockerfile
|
||||
docker-data
|
||||
dist
|
||||
data
|
||||
qdrant
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user