chore: post-deployment cleanup and docs update

- Make AI routing rules DB-driven (read from system_configs, removed from config.py)
- Add translation quota tracking to LLM translation (OpenAIProvider)
- Add Alibaba MT ECS RAM role support (STS token, no AccessKey needed)
- Fix admin sidebar link for AI模型配置 page
- Fix Quota.vue API path (quotas → translation-quotas)
- Fix login auto-redirect to dashboard
- Add provider dropdown selects to AI routing config UI
- Clean up stale ai_provider_* system_configs records
- Remove OpencodeGo, Spark providers (code + DB)
- Update deploy config: nginx port 8000, systemd cwd
This commit is contained in:
TradeMate Dev
2026-06-02 15:40:02 +08:00
parent fa3050a17c
commit f17a6ccbac
28 changed files with 1140 additions and 209 deletions
+102 -22
View File
@@ -1,7 +1,7 @@
# TradeMate (外贸小助手) - 项目进度文档
**更新时间**: 2026-05-29 12:00
**状态**: ✅ 生产分支活跃开发 — 安全加固完成 + 4 前端项目并行 + 客户挖掘+AI 模型管理
**更新时间**: 2026-06-02 12:00
**状态**: ✅ 生产环境运行中 — AI 路由 DB 驱动 + 翻译配额全链路 + ECS RAM 角色认证
---
@@ -11,9 +11,11 @@
|------|------|------|
| 后端 API | http://localhost:8000 | ✅ 运行中 |
| API 文档 | http://localhost:8000/docs | ✅ 可用 |
| 前端 H5 (uni-app) | http://localhost:5173 | ✅ 运行中 |
| 管理后台 (admin-frontend) | http://localhost:5173 | ✅ 运行中 |
| 用户工作台 (user-frontend) | http://localhost:5174 | ✅ 运行中 |
| 主站 — 营销落地页 | https://trade.yuzhiran.com/ | ✅ 已部署 |
| 主站 — 移动端 H5 | https://trade.yuzhiran.com/app/ | ✅ 已部署 |
| 主站 — 管理后台 | https://trade.yuzhiran.com/admin/ | ✅ 已部署 |
| 主站 — 用户工作台 | https://trade.yuzhiran.com/workspace/ | ✅ 已部署 |
| 镜像站 | https://www.yuzhiran.com.cn/ | ✅ 同步部署 |
| Redis | localhost:6379 | ✅ 运行中 |
| PostgreSQL | localhost:5432 | ✅ 运行中 |
@@ -40,21 +42,30 @@
|------|------|------|
| **CORS 白名单** | `app/core/middleware.py` | 限制特定前端域名、方法和请求头 |
| **速率限制** | `app/core/middleware.py` | 登录 5次/分、注册 3次/时、改密 3次/5分、支付 20次/分、Admin 30次/分 |
| **CSRF 防护** | `app/core/csrf.py` | 双提交 Cookie 模式中间件;auth/payment/profile 等敏感端点必检;webhook 跳过 |
| **CSRF 防护** | `app/core/csrf.py` | 双提交 Cookie 模式中间件;payment/profile 等敏感端点必检;login/register/webhook 跳过 |
| **敏感日志清理** | 全代码审计 | 移除 Token/Key 等敏感信息打印 (T-002) |
### 3. AI 提供商重构 ✅
| 变更 | 说明 |
|------|------|
| **移除** | Claude (`claude.py`)、DeepL (`deepl.py`)、本地模型 (`local.py`) |
| **新增** | 阿里机器翻译 (`alibaba.py`)、NVIDIA (`nvidia.py`) |
| **主提供商** | Sensenova (商汤, `sensenova.py`) |
| **Fallback** | OpencodeGo → NVIDIA → 讯飞 Spark |
| **DB 驱动配置** | 新增 `AIProvider` 模型 + `admin_ai.py` API → 管理后台在线增删改 AI 模型 |
| **路由规则** | `router.py` 支持 `reload_from_db()` 从数据库实时加载配置 |
| **移除** | Claude (`claude.py`)、DeepL (`deepl.py`)、本地模型 (`local.py`)、OpencodeGo (`opencode_go.py`)、讯飞 Spark (`spark.py`) |
| **当前提供商** | Sensenova (商汤) + NVIDIA + 阿里机器翻译 (ECS RAM 角色) |
| **DB 驱动配置** | `AIProvider` 模型 + `admin_ai.py` API → 管理后台在线增删改 AI 模型 |
| **路由规则 DB 化** | 从 `config.py` 硬编码改为 `system_configs` 表读取 (key: `ai_routing`),保存后自动重载 |
| **ECS RAM 角色** | 阿里翻译无需 AccessKey,优先使用 ECS 实例 RAM 角色获取 STS 临时凭证 |
| **Env 自动种子** | 启动时从 `.env` 读取 API Key 自动写入 DB |
### 3.1 当前 AI 提供商
| 名称 | 类型 | 模型 | 用途 |
|------|------|------|------|
| Sensenova (商汤) | sensenova | deepseek-v4-flash | 翻译/回复/营销/提取/聊天 |
| NVIDIA | nvidia | stepfun-ai/step-3.7-flash | 翻译/回复/营销/提取/聊天 |
| Sensenova (商汤) lite | sensenova | sensenova-6.7-flash-lite | 轻量备用 |
| NVIDIA qwen | nvidia | qwen/qwen3.5-397b-a17b | 备用 |
| 阿里翻译 | alibaba-mt | alibaba-mt | 专用翻译 (ecommerce/general) |
### 4. 客户挖掘 (Discovery) ✅
| 功能 | 文件 | 说明 |
@@ -73,6 +84,26 @@
| 年费定价 | `payment.py` — 新增 yearly 套餐选项 |
| 搜索 API 管理 | `admin_search.py` — 管理后台配置搜索提供商 |
### 5.1 支付系统 ✅
| 组件 | 文件 | 说明 |
|------|------|------|
| **统一网关** | `services/unified_pay.py` | 对接 宇之然 pay-apiHMAC-SHA256 签名 |
| **网关抽象** | `services/payment_gateway.py` | `PaymentGateway` 抽象基类 |
| **支付服务** | `services/payment.py` | 多套餐创建/查询/退款/回调 |
| **交易记录** | `models/payment_transaction.py` | 订单号/金额/状态/退款流水 |
| **支付 API** | `api/v1/payment.py` | 下单/查询/退款/Webhook 统一入口 |
| **管理接口** | `api/v1/admin.py` | 交易列表/统计/后台退款 |
| **数据迁移** | `alembic/versions/add_payment_transactions_table.py` | `payment_transactions` 表 |
**支付流程**:
1. 前端 POST `/api/v1/payment/create-order` (`plan` + `pay_type`: `alipay` / `wechat`)
2. 后端调用 unified pay-api 创建订单,返回 `pay_url`(支付宝) 或 `code_url`(微信扫码)
3. 用户完成支付后,pay-api 回调 `POST /api/v1/payment/webhook`
4. 后端更新订单状态 + 激活用户套餐
**凭证**: `PAY_API_KEY` / `PAY_API_SECRET``.env` 读取(外贸助手密钥),HMAC-SHA256 认证
### 6. PC 桌面端布局 ✅
| 功能 | 说明 |
@@ -99,6 +130,8 @@
| 11 | `app/api/v1/auth.py` + `deps.py` | API 500 根因 — 游客 UUID 格式问题 | ✅ 已修复 |
| 12 | `backend/.env` + `app/main.py` | CORS 配置不当 | ✅ 已修复 |
| 13 | `uni-app/src/utils/api.js` | 前端直连后端端口 → 跨域 | ✅ 已修复 |
| 14 | `app/api/v1/auth.py` | 登录/注册 CSRF 鸡生蛋 — 匿名用户无 cookie 导致 403 | ✅ 已修复 |
| 15 | 4 个前端登录/注册页面 | 后端错误英文直接展示给用户 | ✅ 已修复 |
### 8. 游客模式 (Guest Mode) ✅
@@ -119,7 +152,26 @@
| AI 模型配置 | 在线增删改 AI 提供商、重载配置、启停控制 |
| 搜索配置 | 搜索提供商管理 |
### 10. 其他增强
### 10. 翻译配额全链路 ✅
| 组件 | 说明 |
|------|------|
| `TranslationQuota` 模型 | 按月配额管理,支持 ecommerce/general/llm 三个版本 |
| `TranslationQuotaService` | 自动按月重置、配额检查/扣减/查询/管理 |
| `AlibabaMTProvider.translate()` | 调用前检查配额,调用后扣减字符 |
| `OpenAIProvider.translate()` | LLM 翻译也走配额检查 (`llm` 版本) |
| 后台 `Quota.vue` | 配额管理页 (月限额/启用/重置),修复了 API 路径 bug |
### 11. 管理后台增强
| 功能 | 说明 |
|------|------|
| AI 路由规则 | 配置页新增"AI路由规则"卡片,下拉选择已启用供应商 |
| 翻译配额页 | 修复路径 bug (`quotas``translation-quotas`),新增 `llm` 配额 |
| AI 模型配置 | 修复侧边栏链接路径 |
| 登录跳转 | 登录后自动跳转仪表盘 |
### 12. 其他增强
| 功能 | 说明 |
|------|------|
@@ -176,13 +228,14 @@
### 4.2 AI 提供商
| 提供商 | 类型 | 用途 |
|--------|------|------|
| Sensenova (商汤) | 主提供商 | 翻译/回复/营销/提取 |
| OpencodeGo | Fallback | 翻译/回复/营销/提取 |
| NVIDIA | Fallback | 通用对话 |
| 讯飞 Spark | Fallback | 通用对话 |
| 阿里机器翻译 | 专用 | 翻译 (translate) |
| 提供商 | 类型 | 模型 | 用途 |
|--------|------|------|------|
| Sensenova (商汤) | 主提供商 | deepseek-v4-flash | 翻译/回复/营销/提取/聊天 |
| NVIDIA | Fallback | stepfun-ai/step-3.7-flash | 翻译/回复/营销/提取/聊天 |
| Sensenova lite | 轻量备用 | sensenova-6.7-flash-lite | 备用 |
| NVIDIA qwen | 备用 | qwen/qwen3.5-397b-a17b | 备用 |
| 阿里机器翻译 | 专用翻译 | alibaba-mt | 翻译 (ecommerce/general) |
| **已删除** | — | — | OpencodeGo / 讯飞 Spark / Claude / DeepL / 本地模型 |
### 4.3 前端
@@ -273,13 +326,39 @@ cd backend && alembic upgrade head
## 八、部署架构
### 8.1 域名
| 域名 | 用途 |
|------|------|
| `trade.yuzhiran.com` | 主站 — 营销落地页 + Web 应用(当前生产域名) |
| `www.yuzhiran.com.cn` | 之前用作镜像站 AI 教育,外贸项目不再使用 |
### 8.2 目录结构
```
trade.yuzhiran.com/
├── / → 静态营销落地页
├── /app/ → uni-app 构建 (移动端 H5)
├── /app/ → uni-app 构建 (移动端 H5,当前未部署)
├── /admin/ → admin-frontend 构建 (管理后台)
├── /workspace/ → user-frontend 构建 (用户工作台)
└── /api/ → Nginx proxy → 127.0.0.1:8002
└── /api/ → Nginx proxy → 127.0.0.1:8000 (systemd 管理)
```
### 8.3 部署流程
```bash
# 前端构建 & 部署
cd user-frontend && npm run build && cp -r dist/* /www/wwwroot/trade.yuzhiran.com/workspace/
cd admin-frontend && npm run build && cp -r dist/* /www/wwwroot/trade.yuzhiran.com/admin/
# 后端重启 (systemd)
sudo systemctl restart ftrade-backend.service
# 查看启动日志
sudo journalctl -u ftrade-backend.service -n 20
# 本地开发启动
cd backend && source venv/bin/activate && uvicorn app.main:app --reload --port 8000
```
---
@@ -288,6 +367,7 @@ trade.yuzhiran.com/
| 日期 | 变更内容 |
|------|----------|
| 2026-06-02 | 生产环境部署 + AI 路由 DB 驱动 + 翻译配额扩展至 LLM + ECS RAM 角色认证 + 删除 OpencodeGo/Spark |
| 2026-05-29 | 安全加固 (T-005): 限流/CSRF/CORS + AI 提供商 DB 管理 + 客户挖掘联系人提取 |
| 2026-05-28 | 加载反馈 + 搜索历史自动保存 + 超时修复 |
| 2026-05-26 | 落地页 + 推荐系统 + 用量配额 + 搜索 API 管理 + 年费定价 |