Files
sundynix-agentix/DEPLOY.md
T
Blizzard a5fd251fc0 feat(deploy): 容器化 + 一键独立部署 —— 5 服务镜像 + prod compose + 安装/备份/许可
此前应用服务只是本机裸二进制、无 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>
2026-06-26 15:23:36 +08:00

70 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署指南(独立部署 / 单机演示)
一条命令拉起整套 sundynix-agentix(应用 5 服务 + 基建)。适用于**演示**与**客户独立部署**。
集群高可用(多副本 / NATS 集群 / 数据库主从)是用户量上来后的事,不在本指南范围。
## 前置
- Docker 24+ 与 Docker Compose v2
- 约 8GB 内存、10GB 磁盘(Milvus/Neo4j 较吃资源)
## 三步上手
```bash
# 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` 白名单可进。首次:
1. 打开控制台注册第一个账号;
2. 取该账号的用户 id(注册响应里有,或 `GET /api/v1/auth/me`);
3. 填进 `.env``ADMIN_USER_IDS``docker compose -f docker-compose.prod.yml up -d gateway` 重启网关。
## 配置模型(部署后在控制台做)
LLM 模型 API key **不放 .env**,登录控制台 →「模型管理」配置:
- 对话模型(chat):在线 APIOpenAI 兼容,如 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` 生成的强随机值,切勿用示例值。
## 运维常用
```bash
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 # 改配置后单独重启
```