Files
zjpb.net/docs/archive/DEPLOY_v2.2.0.md
Jowe 939717fa57 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>
2026-02-06 15:54:13 +08:00

9.3 KiB
Raw Blame History

ZJPB v2.2.0 Git Patch 部署指南

版本信息

  • 版本号: v2.2.0
  • 发布日期: 2025-12-30
  • 主要功能: 博查新闻搜索集成

新功能概述

1. 博查Web Search API集成

  • 自动获取网站相关新闻
  • 支持手动和批量获取
  • 新闻来源展示(网站名称+图标)

2. 智能新闻更新机制

  • 每日首次访问触发更新用户访问网站详情页时如果今天还没有更新过新闻自动获取最新3条
  • 历史新闻保留:如果没有访问,保留历史新闻不会被删除
  • 一周内新闻:只获取最近一周的相关新闻
  • 自动去重根据URL防止重复新闻

3. 数据库扩展

  • News表新增字段
    • source_name: 新闻来源网站名称
    • source_icon: 新闻来源网站图标URL

4. 用户界面优化

  • 网站详情页新增"相关新闻"模块
  • 新闻展示包括:标题、摘要、来源、发布时间、阅读链接
  • "相似推荐"移至右侧边栏,界面更加清晰

5. 管理功能

  • 后台新闻管理界面优化
  • 支持批量获取所有网站的新闻
  • 定期任务脚本 fetch_news_cron.py

部署前准备

1. 环境要求

  • Python 3.8+
  • MySQL 5.7+
  • Git已配置
  • 虚拟环境已创建

2. 配置检查

必需配置(生产服务器.env文件

# 博查 Web Search API配置必需
BOCHA_API_KEY=your_api_key_here
BOCHA_BASE_URL=https://api.bocha.cn

如果没有配置BOCHA_API_KEY

  • 新闻功能不会运行
  • 不会影响其他功能
  • 详情页会正常显示,只是没有新闻模块

3. 备份数据库

在1Panel中备份数据库

# 或者使用命令行
mysqldump -h 112.124.42.38 -u ai_nav -p ai_nav > backup_before_v2.2_$(date +%Y%m%d).sql

部署步骤

方法一Git Patch部署推荐

1. 上传文件到服务器

需要上传2个文件到 /opt/1panel/apps/zjpb/

  • v2.2.0.patch (56KB)
  • git_patch_deploy_v2.2.sh

使用1Panel文件管理器SCP命令

scp v2.2.0.patch root@your-server:/opt/1panel/apps/zjpb/
scp git_patch_deploy_v2.2.sh root@your-server:/opt/1panel/apps/zjpb/

2. 执行部署脚本

SSH登录服务器或使用1Panel终端

cd /opt/1panel/apps/zjpb

# 赋予执行权限
chmod +x git_patch_deploy_v2.2.sh

# 执行部署
./git_patch_deploy_v2.2.sh

3. 脚本自动完成的操作

1. 停止应用
2. 检查Git状态
3. 备份未提交的修改(如有)
4. 应用v2.2.0补丁
   - 添加NewsSearcher工具类
   - 更新app.py新闻路由+智能更新)
   - 更新models.pyNews字段扩展
   - 更新config.py博查API配置
   - 更新detail_new.html新闻展示UI
   - 添加数据库迁移脚本
   - 添加测试脚本和定期任务脚本
5. 提交到Git
6. 激活虚拟环境
7. 安装依赖
8. 运行数据库迁移添加source_name和source_icon字段
9. 重启应用
10. 检查状态

部署后验证

1. 前台验证

访问网站详情页

http://your-domain.com/site/xxxxxxxx

检查项:

  • 页面正常加载
  • 如果配置了BOCHA_API_KEY首次访问会自动获取新闻
  • "相关新闻"模块显示在左侧主栏
  • "相似推荐"显示在右侧边栏
  • 新闻显示来源名称和图标
  • 点击新闻标题可以跳转到原文

2. 后台验证

登录后台管理

http://your-domain.com/admin/login

检查项:

  • 进入"新闻管理" /admin/newsadmin/
  • 列表显示包含source_name和source_icon
  • 可以搜索和过滤新闻
  • 编辑新闻时可以看到新字段

3. 数据库验证

-- 检查news表结构
DESCRIBE news;

-- 应该看到新字段
-- source_name VARCHAR(100)
-- source_icon VARCHAR(500)

-- 检查现有新闻数据
SELECT id, title, source_name, source_icon
FROM news
ORDER BY created_at DESC
LIMIT 5;

4. API测试可选

如果配置了BOCHA_API_KEY可以测试API

# 在服务器上
cd /opt/1panel/apps/zjpb
source venv/bin/activate

# 运行测试脚本
python test_news_feature.py

5. 日志检查

# 查看应用日志
./manage.sh logs

# 或者查看Gunicorn日志
tail -f logs/gunicorn_error.log

配置博查API重要

1. 获取API Key

如果还没有博查API Key

  1. 访问 https://api.bocha.cn
  2. 注册并获取API Key
  3. 充值建议至少10元用于测试

2. 配置.env文件

编辑生产服务器的.env文件

nano /opt/1panel/apps/zjpb/.env

添加或更新:

# 博查 Web Search API配置
BOCHA_API_KEY=sk-your-actual-api-key-here
BOCHA_BASE_URL=https://api.bocha.cn

3. 重启应用

cd /opt/1panel/apps/zjpb
./manage.sh restart

定期任务配置(可选)

如果想定期批量更新所有网站的新闻可以配置cron任务

1. 编辑crontab

crontab -e

2. 添加定时任务

# 每天凌晨2点更新前10个网站的新闻每个网站获取3条
0 2 * * * cd /opt/1panel/apps/zjpb && source venv/bin/activate && python fetch_news_cron.py --limit 10 --count 3 >> logs/cron_news.log 2>&1

3. 查看定期任务日志

tail -f /opt/1panel/apps/zjpb/logs/cron_news.log

常见问题排查

1. 新闻不显示

检查项

  • BOCHA_API_KEY是否配置正确
  • API Key是否有余额
  • 网站是否有相关新闻?
  • 查看应用日志是否有错误

测试命令

cd /opt/1panel/apps/zjpb
source venv/bin/activate
python test_news_feature.py

2. 数据库迁移失败

症状source_name或source_icon字段不存在

解决方案

cd /opt/1panel/apps/zjpb
source venv/bin/activate
python migrate_news_fields.py

3. 页面报错

检查

# 查看错误日志
./manage.sh logs

# 检查进程状态
./manage.sh status

# 重启应用
./manage.sh restart

4. 补丁应用失败

症状git apply --check 失败

原因:可能有未提交的本地修改冲突

解决方案

# 查看冲突文件
git status

# 备份本地修改
git stash

# 重新应用补丁
git apply v2.2.0.patch

# 如需恢复本地修改
git stash pop

回滚方案

如果部署后发现问题,可以快速回滚:

1. 回滚代码

cd /opt/1panel/apps/zjpb
./manage.sh stop

# 回滚到上一个提交v2.1.0
git reset --hard HEAD~2

# 如果有stash备份恢复它
git stash list
git stash pop

./manage.sh start

2. 回滚数据库(如需要)

# 删除新添加的字段
mysql -h 112.124.42.38 -u ai_nav -p ai_nav

ALTER TABLE news DROP COLUMN source_name;
ALTER TABLE news DROP COLUMN source_icon;

性能说明

1. 智能更新策略

  • 触发条件:用户首次访问网站详情页 + 今天还没更新过新闻
  • 更新频率:每个网站每天最多更新一次
  • 查询数量每次获取3条新闻
  • 时间范围:最近一周内的新闻
  • API调用:只有满足更新条件时才会调用

2. 对用户体验的影响

  • 首次加载如果触发新闻更新页面加载时间增加1-3秒
  • 后续访问:使用缓存的新闻,无额外延迟
  • 错误处理API调用失败不影响页面正常显示
  • 异步加载:后续可优化为异步加载新闻模块

3. 成本估算

  • 假设每天100个网站被访问每个网站触发一次新闻更新
  • 每次查询约0.01元参考博查API定价
  • 每天成本约1元每月约30元

版本对比

功能 v2.1.0 v2.2.0
Prompt管理
标签生成
功能生成
详细介绍生成
新闻搜索
新闻展示
智能更新
新闻来源信息
定期任务

后续优化建议

  1. 新闻模块异步加载使用AJAX加载新闻不阻塞页面
  2. 缓存优化使用Redis缓存新闻数据
  3. 全文搜索:支持在新闻内容中搜索关键词
  4. RSS订阅为网站新闻生成RSS feed
  5. 新闻分类:根据新闻类型自动分类
  6. 新闻推荐:基于用户行为推荐相关新闻

完整部署命令(一键复制)

# SSH登录服务器后执行
cd /opt/1panel/apps/zjpb

# 检查上传的文件
ls -lh v2.2.0.patch git_patch_deploy_v2.2.sh

# 赋予执行权限
chmod +x git_patch_deploy_v2.2.sh

# 执行部署
./git_patch_deploy_v2.2.sh

# 配置API Key如果还没配置
nano .env
# 添加BOCHA_API_KEY=your-key-here

# 重启应用(如果修改了.env
./manage.sh restart

# 验证部署
./manage.sh status
git log --oneline -3

技术支持

如有问题,请检查:

  1. 应用日志:./manage.sh logs
  2. 数据库连接:检查.env中的DB_配置
  3. API配置检查BOCHA_API_KEY是否正确
  4. 网络连接:确认服务器可以访问 api.bocha.cn

更新日志

v2.2.0 (2025-12-30)

  • 新增博查Web Search API集成
  • 新增智能新闻更新机制
  • News模型扩展source_name, source_icon
  • 新增网站详情页新闻模块
  • 新增定期任务脚本和测试工具
  • 优化详情页布局(新闻左侧,推荐右侧)

部署文档版本: v1.0 最后更新: 2025-12-30 维护者: ZJPB开发团队