startup-plan/工作日志/2026-05-22.md

245 lines
7.0 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.

# 工作日志 — 2026-05-22
---
## 一、Admin 项目架构修复(凌晨)
### 1. admin-ai-chat 模块部署 ✅
**问题:** Admin 前端 `TaskAssistant.tsx` 调用 `/admin-api/ai/chat`,但 NestJS 服务端没有对应模块。
**修复:**
- 提交推送 `admin-ai-chat` 模块controller/service/module/dto端点 `POST /admin-api/ai/chat`
- 修复 `AdminUsersModule` 缺少 `PasswordService` 依赖
- 修复 `AdminRole` import 路径 `role.enum``admin-role.enum`
- 修复 systemd 启动路径 `dist/main.js``dist/src/main.js`
- 创建 admin 账号 `admin@zhixi.app / admin123`
- 添加 `GET /admin-api/ai/dashboard` 端点
### 2. Hermes Agent 集成 🔶
**发现:** 4核4G 上运行 `hermes-agent` Docker 容器nousresearch/hermes-agent:0.14.0),是一个带 Web Dashboard 的 AI Agent 平台。
**Hermes 架构:**
- Dashboard端口 9119Web UI
- Gateway负责连接外部平台飞书/微信/Discord 等 30+ 平台)
- 内置 OpenAI 兼容 API Server`api_server.py`):端口 8642提供 `/v1/chat/completions`
**已完成:**
- ✅ 启动 Hermes Gateway
- ✅ 启用 `api_server` 平台(环境变量 `API_SERVER_ENABLED=true`
- ✅ 配置 DeepSeek 作为推理后端(`config.yaml`
- ✅ 设置 API Key 认证 `zhixi-hermes-key-2026`
- ✅ Docker 端口映射 8642
- ✅ UFW 开放 8642仅内网 172.21.0.0/16 + 10.2.0.0/16
- ✅ NestJS `AdminAiChatService` 改为 Hermes 优先 + DeepSeek 降级
---
## 二、内网安全组排查与打通 ✅
### 问题
蜂驰云 8核32G172.21.0.4)→ 轻量云 4核4G10.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 服务器 | NginxSPA fallback + 静态资源缓存) |
| SSL | Let's Encrypt2026-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 (prod) | ✅ active |
| MySQL/Redis/Qdrant | ✅ 运行中 |
| admin.longde.cloud | ✅ HTTPS自动部署 |
| api.longde.cloud | ✅ HTTPS |
### 4核4G (81.70.187.179)
| 服务 | 状态 |
|------|------|
| hermes-agent | ✅ Dashboard :9119API :8642 |
| Gitea 1.23.8 | ✅ |
| Nginx | ✅ |
| 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 模块部署~~
2. ~~AdminUsersModule PasswordService 依赖修复~~
3. ~~AdminRole import 路径修复~~
4. ~~systemd dist 路径修复~~
5. ~~Admin 账号创建~~
6. ~~Hermes Gateway 启动~~
7. ~~Hermes api_server 平台启用~~
8. ~~NestJS → Hermes 优先调用~~
9. ~~腾讯云安全组添加 8642 端口~~
10. ~~去掉 DeepSeek 降级逻辑~~
11. ~~Admin 前端部署 + HTTPS~~
12. ~~API 部署流水线修复~~
### 待完成
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. ⬜ 阶段十:后台管理 + 额度检查