# 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