a5fd251fc0
此前应用服务只是本机裸二进制、无 Dockerfile、无法交付。本提交把项目从"只能在我笔记本 跑"变成"任何人一条命令起一整套",是「演示 / 拉投资 / 卖给客户独立部署」的可交付基础。 - Dockerfile ×5:gateway/dispatcher/mcp-go 多阶段(distroless static, 36–55MB); mcp-py(python-slim, 268MB);admin(node 构建→nginx 托管 SPA + 反代 /api,76MB)。 Go 构建上下文为仓库根以兜住 replace ../sundynix-shared;.dockerignore 瘦上下文。 - docker-compose.prod.yml:应用 + 基建一把起;经服务名互连(顺带避开 localhost DNS 坑); 基建端口不对宿主暴露;depends_on 健康检查保序(mcp-go 待 Milvus healthy); APP_ENV=production 强制密钥校验 + 锁 CORS + 管理员白名单。 - .env.example + DEPLOY.md:两类密钥分层(引导密钥走 .env,模型 key 控制台加密存库); 首次管理员流程;安全建议。LICENSE 专有(授权模型可后定)。 - scripts/backup.sh + restore.sh:PG 逻辑备份 + 各数据卷快照 / 恢复。 - .gitignore 挡 .env*(密钥不入库)。 live:5 镜像全构建通过;独立 project 起整套 → nginx→gateway→NATS→dispatcher→mcp 全链路 注册+提任务 running→done,depends_on 保序生效。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
部署指南(独立部署 / 单机演示)
一条命令拉起整套 sundynix-agentix(应用 5 服务 + 基建)。适用于演示与客户独立部署。 集群高可用(多副本 / NATS 集群 / 数据库主从)是用户量上来后的事,不在本指南范围。
前置
- Docker 24+ 与 Docker Compose v2
- 约 8GB 内存、10GB 磁盘(Milvus/Neo4j 较吃资源)
三步上手
# 1) 生成配置
cp .env.example .env
# 2) 填密钥(必填四项 + 管理员)
# 主加密密钥 / JWT 密钥:
openssl rand -base64 32 # 填入 SUNDYNIX_SECRET_KEY
openssl rand -base64 32 # 填入 JWT_SECRET
# 数据库密码:
openssl rand -base64 24 # 填入 POSTGRES_PASSWORD(勿含 @ : /)
openssl rand -base64 24 # 填入 NEO4J_PASSWORD
# ADMIN_USER_IDS 先留空(见下「首次管理员」)
# 3) 起服务(首次会构建镜像,约几分钟)
docker compose -f docker-compose.prod.yml up -d --build
起来后:
- 控制台: http://<服务器IP>:80
- 网关 API: http://<服务器IP>:8080 (桌面端连这里)
- 链路追踪 UI(可选): http://<服务器IP>:16686
首次管理员
生产模式下 /admin 仅 ADMIN_USER_IDS 白名单可进。首次:
- 打开控制台注册第一个账号;
- 取该账号的用户 id(注册响应里有,或
GET /api/v1/auth/me); - 填进
.env的ADMIN_USER_IDS,docker compose -f docker-compose.prod.yml up -d gateway重启网关。
配置模型(部署后在控制台做)
LLM 模型 API key 不放 .env,登录控制台 →「模型管理」配置:
- 对话模型(chat):在线 API(OpenAI 兼容,如 DeepSeek)或本地 vLLM/Ollama
- 向量模型(embedding):RAG 用
平台会用
SUNDYNIX_SECRET_KEY把这些 key AES 加密后存库,不落明文。
两类密钥(重要)
| 类别 | 放哪 | 例子 |
|---|---|---|
| 引导密钥 / 基建凭据 | .env(部署时填一次) |
SUNDYNIX_SECRET_KEY、JWT_SECRET、库密码 |
| 业务模型 key | 控制台(运行时配,加密存库) | DeepSeek / Qwen / embedding 的 api_key |
SUNDYNIX_SECRET_KEY 是前者加密后者的主密钥,务必备份且不可泄露;丢失=已存模型 key 全部失效。 |
备份 / 恢复
见 scripts/backup.sh 与 scripts/restore.sh(备份 PG / Neo4j / Milvus / MinIO 数据卷)。
建议 cron 每日跑 backup.sh,产物存异机。
安全建议(对外开放时)
- 生产把
CORS_ALLOW_ORIGIN设为具体域名,别留*。 - 基建端口(PG/Redis/NATS/Milvus/Neo4j/MinIO)默认不对宿主暴露,仅 compose 内网;勿手动开放。
- 对外建议在 admin 容器前再加一层 TLS 反代(Caddy/Nginx),或用云 LB 终止 HTTPS。
SUNDYNIX_SECRET_KEY/JWT_SECRET用openssl rand生成的强随机值,切勿用示例值。
运维常用
docker compose -f docker-compose.prod.yml ps # 状态
docker compose -f docker-compose.prod.yml logs -f gateway
docker compose -f docker-compose.prod.yml down # 停(保留数据卷)
docker compose -f docker-compose.prod.yml up -d --build gateway # 改配置后单独重启