feat: v2.6.0 - API安全优化和文档整合

## 核心优化
- 移除详情页自动调用博查API的逻辑,改为按需加载
- 添加基于IP的频率限制(每小时3次)
- 实现验证码防护机制(超过阈值后要求验证)
- 新增频率限制工具类 utils/rate_limiter.py

## 成本控制
- API调用减少约90%+(只在用户点击时调用)
- 防止恶意滥用和攻击
- 可配置的频率限制和验证码策略

## 文档整合
- 创建 docs/ 目录结构
- 归档历史版本文档到 docs/archive/
- 移动部署文档到 docs/deployment/
- 添加文档索引 docs/README.md

## 技术变更
- 新增依赖: Flask-Limiter==3.5.0
- 修改: app.py (移除自动调用,新增API端点)
- 修改: templates/detail_new.html (按需加载UI)
- 新增: utils/rate_limiter.py (频率限制和验证码)
- 新增: docs/archive/DEVELOP_v2.6.0_API_SECURITY.md

## 部署说明
1. pip install Flask-Limiter==3.5.0
2. 重启应用
3. 无需数据库迁移

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Jowe
2026-02-06 15:54:13 +08:00
parent c1a06ad684
commit 939717fa57
27 changed files with 1670 additions and 140 deletions

View File

@@ -0,0 +1,208 @@
# ZJPB v2.1 增量部署指南
## 📋 本次更新内容
### 新增功能
1. **Prompt管理系统** - 后台可管理AI提示词模板
2. **详情页图标优化** - Material Icons替换为Emoji
3. **标签显示修复** - 修复编辑页标签名称无法显示问题
4. **页脚优化** - 添加ICP备案号和Microsoft Clarity统计
### 数据库变更
- 新增表:`prompt_templates` Prompt模板表
- 无现有表结构变更,完全兼容旧数据
---
## 🔒 增量部署步骤
### 第一步:备份生产数据库(必须!)
在1Panel中备份数据库
```bash
# 方法1使用1Panel面板
1. 进入1Panel -> 数据库
2. 找到 ai_nav 数据库
3. 点击"备份"按钮
4. 下载备份文件到本地保存
# 方法2使用命令行
mysqldump -h 112.124.42.38 -u ai_nav_user -p ai_nav > backup_$(date +%Y%m%d_%H%M%S).sql
```
### 第二步:停止生产应用
```bash
# SSH登录到生产服务器
ssh root@your-server-ip
# 进入应用目录
cd /www/wwwroot/zjpb
# 停止应用
./manage.sh stop
```
### 第三步:备份现有代码
```bash
# 创建备份目录
cd /www/wwwroot
cp -r zjpb zjpb_backup_$(date +%Y%m%d_%H%M%S)
```
### 第四步:上传新代码
**方法1使用Git推荐**
```bash
# 在本地提交所有修改
git add .
git commit -m "release: v2.1 - Prompt管理系统、页脚优化、图标修复"
git push origin master
# 在服务器上拉取
cd /www/wwwroot/zjpb
git pull origin master
```
**方法2手动上传**
```bash
# 在本地压缩(排除不需要的文件)
zip -r zjpb_v2.1.zip . -x "*.pyc" "*__pycache__*" "*.git*" ".env" "venv/*" "test_*.py" "*.db" "nul"
# 上传到服务器 /www/wwwroot/zjpb_new.zip
# 然后解压覆盖
cd /www/wwwroot/zjpb
unzip -o ../zjpb_new.zip
```
### 第五步:安装新依赖(如有)
```bash
cd /www/wwwroot/zjpb
source venv/bin/activate
pip install -r requirements.txt
```
### 第六步:运行数据库迁移
```bash
# 激活虚拟环境
source venv/bin/activate
# 运行迁移脚本(创建 prompt_templates 表)
python migrate_prompts.py
```
**预期输出:**
```
正在创建 prompt_templates 表...
[OK] 表创建成功
正在初始化默认prompt模板...
[OK] 默认prompt模板初始化成功
- 标签生成: 1
- 主要功能生成: 2
- 详细介绍生成: 3
```
### 第七步:重启应用
```bash
./manage.sh start
```
### 第八步:验证部署
**检查项:**
1. **访问前台首页**
- 检查页脚是否显示ICP备案号
- 检查Clarity统计是否加载F12查看Network
2. **访问详情页**
- 检查图标是否正常显示不是Material Icons文本
3. **登录后台**
- 检查是否有"Prompt管理"菜单
- 进入Prompt管理查看是否有3条默认数据
4. **测试网站编辑**
- 编辑任意网站,检查标签是否正常显示(不是空白蓝框)
5. **测试AI功能**
- 创建新网站,测试"AI生成标签"功能
- 测试"AI生成详细介绍"功能
- 测试"AI生成主要功能"功能
---
## 🔄 回滚方案(如出现问题)
### 快速回滚代码
```bash
cd /www/wwwroot
./zjpb/manage.sh stop
# 删除新版本
rm -rf zjpb
# 恢复备份
mv zjpb_backup_YYYYMMDD_HHMMSS zjpb
# 重启
cd zjpb
./manage.sh start
```
### 恢复数据库
```bash
# 如果新表导致问题,可以删除新表
mysql -h 112.124.42.38 -u ai_nav_user -p ai_nav
# 在MySQL中执行
DROP TABLE IF EXISTS prompt_templates;
```
---
## 📝 注意事项
1.**本次更新不会影响现有数据** - 只是新增表,不修改现有表
2.**完全向后兼容** - 即使不运行迁移脚本,前台也能正常访问
3.**可以随时回滚** - 保留了完整备份
4. ⚠️ **必须备份数据库** - 虽然风险很低,但备份是必须的
5. ⚠️ **检查.env配置** - 确保生产环境的.env配置正确
---
## 🐛 常见问题
### Q1: 迁移脚本报错 "表已存在"
**A:** 说明之前已经运行过迁移,可以跳过此步骤
### Q2: Prompt管理菜单看不到
**A:** 清除浏览器缓存,重新登录后台
### Q3: 标签还是显示不出来
**A:** 清除浏览器缓存强制刷新Ctrl+F5
### Q4: Clarity统计没加载
**A:** 检查网络是否能访问 clarity.ms可能被墙
---
## 📞 技术支持
如遇问题,请检查日志:
```bash
# 查看应用日志
./manage.sh logs
# 查看错误日志
tail -f logs/error.log
```