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>
70 lines
3.1 KiB
Markdown
70 lines
3.1 KiB
Markdown
# 部署指南(独立部署 / 单机演示)
|
||
|
||
一条命令拉起整套 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):在线 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` 生成的强随机值,切勿用示例值。
|
||
|
||
## 运维常用
|
||
```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 # 改配置后单独重启
|
||
```
|