Files
zjpb.net/PROGRESS_2026-03-12.md
Jowe 9470acc369 perf: 优化 detail 页面加载性能
- 使用 JOIN 查询替代子查询获取推荐网站
- 异步更新浏览量,避免阻塞页面加载
- 添加数据库索引脚本 (site_tags, sites 表)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 21:07:33 +08:00

191 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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