From 10b2def872819feb841e74b0aca6ab59a2ca1e05 Mon Sep 17 00:00:00 2001 From: WangDL Date: Fri, 22 May 2026 10:14:35 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=205/22=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=BF=97=20=E2=80=94=20=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E7=BB=84=E6=89=93=E9=80=9A=20+=20=E5=8E=BB=E6=8E=89=E9=99=8D?= =?UTF-8?q?=E7=BA=A7=20+=20admin=E9=83=A8=E7=BD=B2=20+=20API=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工作日志/2026-05-22.md | 207 +++++++++++++++++++++++++++++++++++------ 1 file changed, 176 insertions(+), 31 deletions(-) diff --git a/工作日志/2026-05-22.md b/工作日志/2026-05-22.md index b3f33e9..7a2764c 100644 --- a/工作日志/2026-05-22.md +++ b/工作日志/2026-05-22.md @@ -2,7 +2,7 @@ --- -## 一、Admin 项目架构修复 +## 一、Admin 项目架构修复(凌晨) ### 1. admin-ai-chat 模块部署 ✅ @@ -34,47 +34,189 @@ - ✅ UFW 开放 8642(仅内网 172.21.0.0/16 + 10.2.0.0/16) - ✅ NestJS `AdminAiChatService` 改为 Hermes 优先 + DeepSeek 降级 -**当前架构:** -``` -Admin 前端 (Vite) - → POST /admin-api/ai/chat (Bearer token) - → NestJS AdminAiChatService (8核32G) - → 尝试 http://10.2.0.7:8642/v1/chat/completions (Hermes) - → 失败则降级 DeepSeekProvider -``` +--- -**待修复:** -- ⏳ 腾讯云安全组需手动开通 8642 端口(仅对内网),当前 8核32G → 4核4G:8642 不通 -- ⏳ 临时方案:NestJS 自动降级到 DeepSeek 直接调用,Admin Chat 功能可用 +## 二、内网安全组排查与打通 ✅ + +### 问题 +蜂驰云 8核32G(172.21.0.4)→ 轻量云 4核4G(10.2.0.7):8642 不通 + +### 排查过程 +1. SSH 到两台服务器实测 +2. 内网 ping 通(1.8ms) +3. 轻量云 UFW 已放行 172.21.0.0/16 → :8642 +4. iptables 里 `YJ-FIREWALL-INPUT` 链(腾讯云 Lighthouse 防火墙)拦截 +5. 根因:**控制台防火墙未添加 8642 规则** + +### 修复 +- 腾讯云控制台 → Lighthouse → 81.70.187.179 → 防火墙 → 添加 TCP 8642,来源 172.21.0.4 +- 连通后 curl 测试:http_code=200,延迟 2.84s ✅ --- -## 二、服务器状态 +## 三、去掉 DeepSeek 降级逻辑 ✅ + +**原因:** Hermes 优先 + DeepSeek 降级的设计导致不知道实际用了哪个服务。 + +**改动:** +- `admin-ai-chat.service.ts`:移除 `DeepSeekProvider` 注入和 `callDeepSeek` 方法 +- `admin-ai-chat.module.ts`:移除 `DeepSeekProvider` 注册 +- Hermes 挂了直接抛错,不再静默降级 + +**全链路架构(最终版):** +``` +Admin 前端 (Vite) → POST /admin-api/ai/chat + → NestJS AdminAiChatService (8核32G) + → POST http://10.2.0.7:8642/v1/chat/completions (Hermes) + → 失败直接报错,前端可见 +``` + +--- + +## 四、Admin 前端部署 ✅ + +### 部署配置 + +| 项目 | 值 | +|------|-----| +| 域名 | `https://admin.longde.cloud` | +| 服务器 | 蜂驰云 8核32G (120.53.227.155) | +| 部署目录 | `/opt/zhixi/admin/dist/` | +| Web 服务器 | Nginx(SPA fallback + 静态资源缓存) | +| SSL | Let's Encrypt,2026-08-20 到期,自动续期 | + +### Nginx 配置 +- `/` → SPA fallback `try_files $uri /index.html` +- `/assets/` → 1年缓存 +- HTTP → HTTPS 自动跳转 + +### CI/CD 流水线 +``` +push main → prod runner + → git clone http://10.2.0.7:3000/wangdl/admin-projects.git + → npm ci → npm run build + → rsync dist/ → /opt/zhixi/admin/dist/ + → nginx reload + → curl 健康检查 +``` + +--- + +## 五、修复 API 部署流水线 ✅ + +### 发现的问题 +旧 workflow 只部署了 RAG Worker,**NestJS 代码不会自动更新**! + +### 旧流水线(有缺陷) +| 步骤 | 状态 | +|------|------| +| git clone/pull | ✅ | +| npm ci | ❌ 缺失 | +| prisma generate | ❌ 缺失 | +| nest build | ❌ 缺失 | +| prisma migrate deploy | ❌ 缺失 | +| rsync dist/node_modules/prisma | ❌ 缺失 | +| restart zhixi-api | ❌ 缺失 | +| deploy RAG Worker | ✅ | +| health check | ✅ | + +### 新流水线 +``` +push main → prod runner + → git clone/pull + → npm ci + → prisma generate + nest build + → docker start mysql/redis/qdrant + → 清理失败 migration + → prisma migrate deploy + → rsync dist/ node_modules/ prisma/ package.json → /opt/zhixi/backend/ + → systemctl restart zhixi-api + → deploy RAG Worker + restart zhixi-worker + → curl health check +``` + +### 踩坑 +- `prisma migrate deploy` 报错 exit code 1 → 缺少 `DATABASE_URL` 环境变量,workflow 顶部加 `env` 解决 + +--- + +## 六、Hermes api_server 架构确认 + +### Gateway 配置 +``` +/opt/data/.env: + API_SERVER_ENABLED=true + API_SERVER_KEY=zhixi-hermes-key-2026 + API_SERVER_HOST=0.0.0.0 + API_SERVER_PORT=8642 + +/opt/data/config.yaml: + model: deepseek-v4-flash + provider: custom + base_url: https://api.deepseek.com/v1 + api_key: sk-ddddea4986d843be978ced9e82988fa0 +``` + +### gateway_state.json +```json +{ + "pid": 91, + "gateway_state": "running", + "platforms": { + "api_server": { + "state": "connected", + "updated_at": "2026-05-21T16:26:56Z" + } + } +} +``` + +### api_server.py 端点 +- `POST /v1/chat/completions` — OpenAI Chat 格式 +- `POST /v1/responses` — OpenAI Responses 格式 +- `GET /v1/models` — 模型列表 +- `GET /v1/capabilities` — API 能力声明 +- `POST /v1/runs` — 启动 run(异步) +- `GET /health` — 健康检查 + +--- + +## 七、服务器状态(最终) ### 8核32G (120.53.227.155) | 服务 | 状态 | |------|------| -| zhixi-api | ✅ active | -| zhixi-worker | ✅ active | -| gitea-runner | ✅ active | +| zhixi-api | ✅ active,支持自动部署 | +| zhixi-worker | ✅ active,支持自动部署 | +| gitea-runner (prod) | ✅ active | | MySQL/Redis/Qdrant | ✅ 运行中 | -| admin-ai-chat 端点 | ✅ `POST /admin-api/ai/chat` | -| admin dashboard 端点 | ✅ `GET /admin-api/ai/dashboard` | +| admin.longde.cloud | ✅ HTTPS,自动部署 | +| api.longde.cloud | ✅ HTTPS | ### 4核4G (81.70.187.179) | 服务 | 状态 | |------|------| -| hermes-agent | ✅ Up,Dashboard :9119,API :8642 | +| hermes-agent | ✅ Dashboard :9119,API :8642 | | Gitea 1.23.8 | ✅ | | Nginx | ✅ | -| gitea-runner | ✅ | +| gitea-runner (web) | ✅ | | UFW | ✅ 22/80/443/2222/9119/8642 | +### 部署流水线对比 + +| | api-server | admin-projects | +|------|------|------| +| 仓库 | suche-Hermes/api-server | wangdl/admin-projects | +| Runner | prod | prod | +| 构建 | npm ci → nest build | npm ci → vite build | +| 部署 | rsync → systemctl restart | rsync → nginx reload | +| 域名 | api.longde.cloud | admin.longde.cloud | + --- -## 三、当前待办(更新) +## 八、当前待办 ### 已完成 1. ~~admin-ai-chat 模块部署~~ ✅ @@ -85,15 +227,18 @@ Admin 前端 (Vite) 6. ~~Hermes Gateway 启动~~ ✅ 7. ~~Hermes api_server 平台启用~~ ✅ 8. ~~NestJS → Hermes 优先调用~~ ✅ +9. ~~腾讯云安全组添加 8642 端口~~ ✅ +10. ~~去掉 DeepSeek 降级逻辑~~ ✅ +11. ~~Admin 前端部署 + HTTPS~~ ✅ +12. ~~API 部署流水线修复~~ ✅ ### 待完成 -9. ⏳ 腾讯云安全组添加 8642 端口(需手动操作控制台) -10. ⏳ 4核4G Nginx 代理 `/hermes-api/` → `127.0.0.1:8642` -11. 🟢 AI 提取 prompt 调优(待真实文档) -12. 🟢 COS 备份同步 + 生命周期清理 -13. 🟢 MySQL 物理清理脚本 -14. 🟢 Docker Compose 统一 -15. 🟢 logrotate 确认 -16. 🔴 学习引擎串联(待产品决策 → `待决策事项.md`) -17. ⬜ 阶段九:iOS API 对接 + 用户闭环测试 -18. ⬜ 阶段十:后台管理 + 额度检查 +13. ⏳ 4核4G Nginx 代理 `/hermes-api/` → `127.0.0.1:8642` +14. 🟢 AI 提取 prompt 调优(待真实文档) +15. 🟢 COS 备份同步 + 生命周期清理 +16. 🟢 MySQL 物理清理脚本 +17. 🟢 Docker Compose 统一 +18. 🟢 logrotate 确认 +19. 🔴 学习引擎串联(待产品决策 → `待决策事项.md`) +20. ⬜ 阶段九:iOS API 对接 + 用户闭环测试 +21. ⬜ 阶段十:后台管理 + 额度检查