From 3c114cdf0b112c789c3fb0d9174766124779204e Mon Sep 17 00:00:00 2001 From: Jowe <123822645+Selei1983@users.noreply.github.com> Date: Mon, 23 Feb 2026 23:34:42 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E4=BF=9D=E5=AD=982026-02-23=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E8=BF=9B=E5=BA=A6=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROGRESS_2026-02-23.md | 143 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 PROGRESS_2026-02-23.md diff --git a/PROGRESS_2026-02-23.md b/PROGRESS_2026-02-23.md new file mode 100644 index 0000000..fbae050 --- /dev/null +++ b/PROGRESS_2026-02-23.md @@ -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