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,358 @@
# 1Panel Web界面部署指南
## 使用1Panel Web界面部署ZJPB项目
### 前提条件
- 1Panel已安装并可访问
- 1Panel版本支持Python项目管理
---
## 方式一使用1Panel的运行时环境推荐
### 步骤1准备项目文件
1. **压缩项目**
- 在本地压缩整个项目文件夹
- 排除:`venv/`, `__pycache__/`, `.env`, `test_*.py`, `logs/`
### 步骤2在1Panel中创建数据库
1. 登录1Panel管理面板
2. 进入 **数据库** 菜单
3. 点击 **创建数据库**
4. 填写信息:
```
数据库名ai_nav
用户名ai_nav_user
密码:(自动生成或自定义)
权限:本地访问
```
5. 点击确定,**记录数据库密码**
### 步骤3上传项目文件
1. 进入 **文件** 菜单
2. 导航到网站目录(如 `/www/wwwroot/`
3. 创建项目目录 `zjpb`
4. 上传并解压 `zjpb.zip`
### 步骤4配置环境变量
1. 在项目目录中,找到 `.env.example` 文件
2. 复制为 `.env`
3. 点击编辑,填写配置:
```env
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=ai_nav_user
DB_PASSWORD=你的数据库密码
DB_NAME=ai_nav
# 安全配置
SECRET_KEY=你的密钥(使用下方命令生成)
FLASK_ENV=production
# DeepSeek API可选
DEEPSEEK_API_KEY=sk-xxxxx
DEEPSEEK_BASE_URL=https://api.deepseek.com
```
生成SECRET_KEY
```bash
# 在1Panel终端执行
python3 -c "import secrets; print(secrets.token_hex(32))"
```
### 步骤5使用1Panel创建Python项目
#### 5.1 进入网站管理
1. 点击 **网站** 菜单
2. 点击 **创建网站**
3. 选择 **运行时** 类型
#### 5.2 配置Python项目
填写以下信息:
**基本设置:**
```
网站类型:运行时
运行时Python
域名your-domain.com或IP地址
代码目录:/www/wwwroot/zjpb
```
**Python设置**
```
Python版本选择 3.8+ 的版本
应用类型:选择 "Flask" 或 "其他"
启动文件app.py
启动命令gunicorn -c gunicorn_config.py app:app
端口5000默认
```
**环境变量:**如果1Panel支持在界面配置
```
FLASK_ENV=production
```
**其他选项:**
```
☑ 自动启动
☑ 守护进程
进程数4
```
#### 5.3 安装依赖
1. 创建网站后1Panel会自动创建虚拟环境
2. 进入网站设置
3. 找到 **依赖管理** 或 **包管理**
4. 上传 `requirements.txt` 或手动安装
5. 点击 **安装依赖**
或者使用1Panel的终端
```bash
# 进入项目目录
cd /www/wwwroot/zjpb
# 激活虚拟环境1Panel自动创建的
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
### 步骤6初始化数据库
1. 在1Panel中打开 **终端** 或 SSH连接
2. 执行:
```bash
cd /www/wwwroot/zjpb
source venv/bin/activate
python init_db.py
```
### 步骤7启动和管理
1. 在1Panel网站列表中找到你的项目
2. 点击 **启动** 按钮
3. 查看状态:运行中 ✓
### 步骤8配置反向代理如果需要
如果1Panel没有自动配置Nginx
1. 进入网站设置
2. 找到 **反向代理** 或 **代理配置**
3. 配置:
```
目标地址http://127.0.0.1:5000
```
### 步骤9配置SSL证书推荐
1. 在网站设置中找到 **SSL**
2. 选择 **Let's Encrypt**
3. 点击申请证书
4. 启用 **强制HTTPS**
### 步骤10访问验证
1. 前台:`https://your-domain.com`
2. 后台:`https://your-domain.com/admin/login`
- 默认用户名:`admin`
- 默认密码:`admin123`
3. **立即修改密码**:访问 `/admin/change-password`
---
## 方式二使用1Panel的OpenResty/Nginx + Supervisor
如果1Panel的Python运行时不支持或不稳定可以使用传统方式
### 步骤1-4同上数据库、文件上传、环境配置
### 步骤5手动创建虚拟环境
```bash
cd /www/wwwroot/zjpb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
### 步骤6创建Supervisor配置
1. 在1Panel中进入 **容器** 或 **进程管理**
2. 如果有Supervisor功能创建新任务
或手动创建配置文件:
```bash
nano /etc/supervisor/conf.d/zjpb.conf
```
内容:
```ini
[program:zjpb]
command=/www/wwwroot/zjpb/venv/bin/gunicorn -c gunicorn_config.py app:app
directory=/www/wwwroot/zjpb
user=www
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/www/wwwroot/zjpb/logs/supervisor.log
environment=FLASK_ENV="production"
```
启动:
```bash
supervisorctl reread
supervisorctl update
supervisorctl start zjpb
```
### 步骤7创建反向代理网站
1. 在1Panel **网站** 菜单中点击 **创建网站**
2. 选择 **反向代理**
3. 填写:
```
域名your-domain.com
代理地址http://127.0.0.1:5000
```
### 步骤8配置SSL
同方式一
---
## 常见问题
### Q1: 1Panel在哪里创建Python项目
**A:**
- 进入 **网站** 菜单
- 点击 **创建网站**
- 选择 **运行时** 或 **Runtime**
- 选择 **Python**
### Q2: 找不到虚拟环境?
**A:**
- 1Panel创建的虚拟环境通常在项目目录下的 `venv/` 文件夹
- 路径:`/www/wwwroot/zjpb/venv/`
- 可以在文件管理器中查看
### Q3: 如何查看应用日志?
**A:**
- 方式1在网站管理中点击 **日志** 按钮
- 方式2查看文件 `logs/error.log`
- 方式3使用1Panel的终端`tail -f logs/error.log`
### Q4: 如何重启应用?
**A:**
- 方式1在1Panel网站列表中点击 **重启** 按钮
- 方式2使用管理脚本`./manage.sh restart`
- 方式3Supervisor`supervisorctl restart zjpb`
### Q5: 端口被占用怎么办?
**A:**
修改 `gunicorn_config.py` 中的端口:
```python
bind = "0.0.0.0:5001" # 改为其他端口
```
然后在反向代理中也修改为对应端口。
---
## 管理和维护
### 更新代码
1. 在1Panel文件管理中上传新文件
2. 在网站管理中点击 **重启**
### 查看状态
1. 进入网站列表
2. 查看状态指示灯
3. 点击网站名称查看详细信息
### 备份数据库
1. 进入 **数据库** 菜单
2. 找到 `ai_nav` 数据库
3. 点击 **备份** 按钮
### 监控日志
1. 在网站设置中找到 **日志** 选项
2. 查看访问日志和错误日志
3. 可以设置日志轮转
---
## 推荐配置
### 生产环境推荐配置
```
服务器配置:
- CPU: 2核+
- 内存: 2GB+
- 硬盘: 20GB+
Python版本
- Python 3.8+
数据库:
- MySQL 5.7+
- MariaDB 10.3+
Web服务器
- Nginx (1Panel自带)
进程管理:
- Supervisor 或 1Panel内置
工作进程数:
- gunicorn workers: 4
- gunicorn threads: 2
```
---
## 安全建议
1. ✅ 修改默认管理员密码
2. ✅ 使用强密码的SECRET_KEY
3. ✅ 启用HTTPS (Let's Encrypt)
4. ✅ 定期备份数据库
5. ✅ 设置文件权限:
```bash
chmod 600 .env
chmod 755 static/uploads
```
6. ✅ 配置防火墙1Panel通常自动配置
---
## 获取帮助
如果遇到问题:
1. 查看 `logs/error.log` 日志文件
2. 检查1Panel的系统日志
3. 验证数据库连接
4. 检查端口是否被占用
5. 确认虚拟环境依赖已安装
祝部署顺利!🎉