docs: 保存2026-02-23开发进度记录
This commit is contained in:
143
PROGRESS_2026-02-23.md
Normal file
143
PROGRESS_2026-02-23.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# ZJPB 开发进度 - 2026-02-23
|
||||
|
||||
## 📦 版本信息
|
||||
- **最新提交**: b22627a
|
||||
- **提交时间**: 2026-02-23
|
||||
- **部署状态**: ✅ 代码已推送到 Gitea,待手动部署
|
||||
|
||||
---
|
||||
|
||||
## 🎯 本次完成内容
|
||||
|
||||
### 1️⃣ 性能优化(后台加载慢 >1000ms)
|
||||
|
||||
#### NewsAdmin N+1 查询修复
|
||||
- 在 `NewsAdmin` 添加 `get_query()` 方法,使用 `joinedload` 预加载关联的 `site`
|
||||
- 移除导致报错的 `get_count_query()`(count 查询不支持 joinedload)
|
||||
|
||||
#### 数据库索引优化
|
||||
- 新建 `migrations/add_performance_indexes.py`
|
||||
- 为 `sites`、`news`、`tags` 表添加 10 个高频查询字段索引
|
||||
- 已在生产环境执行完成
|
||||
|
||||
#### 管理后台统计查询优化
|
||||
- 控制台首页多次统计查询合并
|
||||
- `recent_sites` 改为只查必要字段,减少数据传输
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ 验证码 Bug 修复
|
||||
|
||||
**问题**:前台点击获取新闻,输入正确验证码仍提示失败
|
||||
|
||||
**原因**:`detail_new.html` 中 fetch 请求缺少 `credentials: 'same-origin'`,导致浏览器不发送 session cookie,验证码 session 无法匹配
|
||||
|
||||
**修复**:`templates/detail_new.html` fetch 请求中添加 `credentials: 'same-origin'`
|
||||
|
||||
---
|
||||
|
||||
### 3️⃣ 后台网站管理排序修复
|
||||
|
||||
**问题**:网站列表按创建时间正序排列,最新的反而排在最后
|
||||
|
||||
**修复**:`SiteAdmin` 添加 `column_default_sort = ('created_at', True)`,改为倒序
|
||||
|
||||
---
|
||||
|
||||
### 4️⃣ Systemd 服务配置
|
||||
|
||||
**目的**:替代手动 nohup 启动,服务器重启后自动恢复
|
||||
|
||||
**文件**:`/etc/systemd/system/zjpb.service`
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=ZJPB Flask Application
|
||||
After=network.target mysql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/1panel/apps/zjpb
|
||||
ExecStart=/opt/1panel/apps/zjpb/venv/bin/gunicorn -c gunicorn_config.py app:create_app()
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
**常用命令**:
|
||||
```bash
|
||||
systemctl start zjpb # 启动
|
||||
systemctl stop zjpb # 停止
|
||||
systemctl restart zjpb # 重启
|
||||
systemctl status zjpb # 状态
|
||||
journalctl -u zjpb -f # 实时日志
|
||||
```
|
||||
|
||||
**同步修改**:`gunicorn_config.py` 中 `daemon = False`、`pidfile` 改为绝对路径
|
||||
|
||||
---
|
||||
|
||||
### 5️⃣ 一键部署脚本
|
||||
|
||||
**文件**:`update.sh`
|
||||
|
||||
**用法**:SSH 登录服务器后执行 `./update.sh`
|
||||
|
||||
**功能**:
|
||||
1. `git pull` 拉取最新代码
|
||||
2. `systemctl restart zjpb` 重启服务
|
||||
3. 自动验证服务状态,失败时输出日志
|
||||
|
||||
---
|
||||
|
||||
### 6️⃣ 发布策略调整
|
||||
|
||||
**调整前**:Claude 可以直接 SSH 连接生产服务器操作,风险高
|
||||
|
||||
**调整后**:
|
||||
```
|
||||
本地开发 → git push 到 Gitea → 手动 SSH → ./update.sh
|
||||
```
|
||||
|
||||
**权限文件**:`.claude/settings.local.json`
|
||||
- 移除:`ssh`、`scp`、`curl`、`wget`、`cmd`、`powershell`
|
||||
- 保留:`git` 操作、`python`/`pip`
|
||||
|
||||
---
|
||||
|
||||
## 📂 修改文件清单
|
||||
|
||||
| 文件 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `app.py` | 修改 | NewsAdmin joinedload、控制台查询优化、SiteAdmin 排序 |
|
||||
| `templates/detail_new.html` | 修改 | fetch 添加 credentials |
|
||||
| `gunicorn_config.py` | 修改 | daemon=False,pidfile 绝对路径 |
|
||||
| `.claude/settings.local.json` | 修改 | 移除 SSH 权限 |
|
||||
| `update.sh` | 新增 | 一键部署脚本 |
|
||||
| `migrations/add_performance_indexes.py` | 新增 | 数据库索引迁移脚本 |
|
||||
| `/etc/systemd/system/zjpb.service` | 新增(仅服务器) | systemd 服务配置 |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 待完成(下次登录后)
|
||||
|
||||
- [ ] 服务器执行 `git pull && chmod +x update.sh` 完成本次部署
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 服务器信息
|
||||
|
||||
- **IP**: 112.124.42.38
|
||||
- **SSH**: `ssh zjpb-prod`(使用 `~/.ssh/id_rsa_atplist` 密钥)
|
||||
- **项目路径**: `/opt/1panel/apps/zjpb`
|
||||
- **服务管理**: `systemctl restart zjpb`
|
||||
- **Gitea**: `http://server.zjpb.net:3000/jowelin/zjpb.git`
|
||||
|
||||
---
|
||||
|
||||
**开发人员**: Claude Sonnet 4.6
|
||||
**项目负责人**: lisacc
|
||||
**开发日期**: 2026-02-23
|
||||
Reference in New Issue
Block a user