perf: 优化 detail 页面加载性能
- 使用 JOIN 查询替代子查询获取推荐网站 - 异步更新浏览量,避免阻塞页面加载 - 添加数据库索引脚本 (site_tags, sites 表) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
190
PROGRESS_2026-03-12.md
Normal file
190
PROGRESS_2026-03-12.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# ZJPB 开发进度 - 2026-03-12
|
||||
|
||||
## 📦 版本信息
|
||||
- **工作日期**: 2026-03-12
|
||||
- **部署状态**: ✅ 新服务器部署完成,应用正常运行
|
||||
|
||||
---
|
||||
|
||||
## 🎯 本次完成内容
|
||||
|
||||
### 1️⃣ 更换 Gitea 仓库地址
|
||||
|
||||
**原因**: 原服务器出现问题,需要迁移到新服务器
|
||||
|
||||
**操作**:
|
||||
- 旧地址: `http://server.zjpb.net:3000/jowelin/zjpb.git`
|
||||
- 新地址: `http://175.178.72.171:3000/jowelin/zjpb.net.git`
|
||||
- 访问令牌: `d507007d9bd411a6468a424441cf534e32e71020`
|
||||
- 已配置 git remote 并成功推送代码
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ 新服务器环境部署(1Panel)
|
||||
|
||||
**服务器信息**:
|
||||
- IP: 175.178.72.171
|
||||
- 环境: 1Panel + Docker
|
||||
- MySQL 容器: `1Panel-mysql-2Z4D` (MySQL 8.4.8)
|
||||
- 项目路径: `/opt/1panel/apps/zjpb`
|
||||
|
||||
**部署步骤**:
|
||||
1. ✅ 克隆项目代码
|
||||
2. ✅ 创建数据库 `zjpb`
|
||||
3. ✅ 配置 .env 文件
|
||||
4. ✅ 创建 Python 虚拟环境
|
||||
5. ✅ 安装依赖 (requirements.txt)
|
||||
6. ✅ 初始化数据库 (init_db.py)
|
||||
7. ✅ 配置 Systemd 服务
|
||||
8. ✅ 配置反向代理
|
||||
9. ✅ 配置 SSL 证书
|
||||
|
||||
---
|
||||
|
||||
### 3️⃣ Systemd 服务配置
|
||||
|
||||
**服务文件**: `/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
|
||||
Environment="PATH=/opt/1panel/apps/zjpb/venv/bin"
|
||||
ExecStart=/opt/1panel/apps/zjpb/venv/bin/gunicorn -c gunicorn_config.py wsgi:app
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
**关键修改**:
|
||||
- `gunicorn_config.py`: `daemon = False` (systemd 管理进程)
|
||||
- 启动命令: `wsgi:app` (不是 `app:create_app()`)
|
||||
- 已设置开机自启: `systemctl enable zjpb`
|
||||
|
||||
**常用命令**:
|
||||
```bash
|
||||
systemctl start zjpb # 启动
|
||||
systemctl stop zjpb # 停止
|
||||
systemctl restart zjpb # 重启
|
||||
systemctl status zjpb # 状态
|
||||
journalctl -u zjpb -f # 实时日志
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4️⃣ 数据库配置
|
||||
|
||||
**连接信息**:
|
||||
- 主机: localhost
|
||||
- 端口: 3306
|
||||
- 用户: zjpb_user
|
||||
- 密码: M3bzYwtiMWWneaTW
|
||||
- 数据库: zjpb
|
||||
|
||||
**初始化状态**:
|
||||
- ✅ 所有表已创建
|
||||
- ✅ 默认管理员账号已创建 (admin/admin123)
|
||||
- ⚠️ 原数据未恢复(.ibd 文件恢复失败)
|
||||
|
||||
---
|
||||
|
||||
### 5️⃣ 反向代理和 SSL
|
||||
|
||||
**配置**:
|
||||
- ✅ 1Panel 中配置反向代理: `http://127.0.0.1:5000`
|
||||
- ✅ SSL 证书已配置
|
||||
- ✅ 防火墙已开放 443 端口
|
||||
- ⚠️ HSTS 暂未开启(建议稳定运行后再开启)
|
||||
|
||||
---
|
||||
|
||||
### 6️⃣ 数据恢复尝试(未成功)
|
||||
|
||||
**尝试方案**:
|
||||
1. ❌ 直接导入 .ibd 文件 - 缺少 .cfg 配置文件
|
||||
2. ❌ 本地 Docker 挂载恢复 - 表结构不匹配
|
||||
3. ❌ 服务器端 .ibd 导入 - Schema mismatch 错误
|
||||
|
||||
**失败原因**:
|
||||
- 只有 .ibd 物理文件,缺少 .cfg 元数据文件
|
||||
- MySQL 版本或表结构可能不同
|
||||
- InnoDB 表空间导入需要完整的配置信息
|
||||
|
||||
**结论**: 放弃数据恢复,使用全新数据库
|
||||
|
||||
---
|
||||
|
||||
## 📂 修改文件清单
|
||||
|
||||
| 文件 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `.git/config` | 修改 | 更新 remote 地址和访问令牌 |
|
||||
| `PROGRESS_2026-02-23.md` | 修改 | 更新 Gitea 地址 |
|
||||
| `/etc/systemd/system/zjpb.service` | 新增 | Systemd 服务配置 |
|
||||
| `gunicorn_config.py` | 修改 | daemon=False |
|
||||
| `.env` | 修改 | 数据库密码修正 |
|
||||
| `restore_ibd.sh` | 新增 | 数据恢复脚本(未使用) |
|
||||
| `create_tables.sql` | 新增 | 表结构 SQL(测试用) |
|
||||
| `restore_db_from_backup.sh` | 新增 | 备份恢复脚本(未使用) |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 待完成(下次工作)
|
||||
|
||||
- [ ] 手动添加核心数据(网站、标签)
|
||||
- [ ] 测试所有功能是否正常
|
||||
- [ ] 考虑是否开启 HSTS
|
||||
- [ ] 配置定时备份任务
|
||||
- [ ] 优化部署流程文档
|
||||
|
||||
---
|
||||
|
||||
## 💡 经验总结
|
||||
|
||||
### 成功经验
|
||||
1. **Systemd 服务管理**: 比 nohup 更可靠,支持自动重启和日志管理
|
||||
2. **1Panel 部署**: 简化了 MySQL、Nginx 等服务的管理
|
||||
3. **Git 令牌认证**: 将令牌嵌入 remote URL,避免每次输入密码
|
||||
|
||||
### 遇到的问题
|
||||
1. **gunicorn 启动命令错误**: `app:create_app()` 括号导致 bash 语法错误
|
||||
2. **daemon 模式冲突**: gunicorn daemon=True 与 systemd Type=simple 冲突
|
||||
3. **.ibd 文件恢复失败**: 缺少 .cfg 文件,无法跨版本/实例恢复
|
||||
|
||||
### 学到的知识
|
||||
1. **InnoDB 表空间导入**: 需要 .ibd + .cfg 文件才能完整恢复
|
||||
2. **Docker MySQL 数据目录**: 挂载现有数据目录需要权限和版本匹配
|
||||
3. **1Panel MySQL**: 通过 Docker 容器运行,需要用 docker exec 执行命令
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 服务器信息
|
||||
|
||||
- **新服务器 IP**: 175.178.72.171
|
||||
- **项目路径**: `/opt/1panel/apps/zjpb`
|
||||
- **MySQL 容器**: `1Panel-mysql-2Z4D`
|
||||
- **服务管理**: `systemctl restart zjpb`
|
||||
- **Gitea**: `http://175.178.72.171:3000/jowelin/zjpb.net.git`
|
||||
- **访问令牌**: `d507007d9bd411a6468a424441cf534e32e71020`
|
||||
|
||||
---
|
||||
|
||||
## 📝 重要提醒
|
||||
|
||||
1. **环境变量修改**: 修改 .env 后必须执行 `systemctl restart zjpb`
|
||||
2. **管理员密码**: 默认 admin/admin123,生产环境务必修改
|
||||
3. **数据备份**: 定期备份数据库,使用 mysqldump 导出 SQL 格式
|
||||
4. **SSL 证书**: 定期检查证书有效期,及时续期
|
||||
|
||||
---
|
||||
|
||||
**开发人员**: Claude Sonnet 4.6
|
||||
**项目负责人**: lisacc
|
||||
**工作日期**: 2026-03-12
|
||||
Reference in New Issue
Block a user