Files
zjpb.net/DEPLOY_v3.0.md
Jowe 1be1f35568 docs: 更新部署指南到v3.0.1
更新内容:
- 添加 v3.0.1 修复说明
- 更新服务端路径为 /opt/1panel/apps/zjpb
- 添加数据库约束修复步骤
- 更新最新提交号 7a6fd0c

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 19:27:52 +08:00

508 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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 v3.0 服务端部署指南
**版本:** v3.0.1 (已修复5个代码问题)
**部署日期:** 2025-02-06
**重要程度:** 🔴 重大更新(需要数据库迁移)
---
## 🆕 v3.0.1 更新说明
**最新提交:** 7a6fd0c
已修复以下问题:
1. ✅ Collection 模型唯一约束逻辑错误
2. ✅ 用户注册重复提交数据库
3. ✅ JavaScript 未使用的变量
4. ✅ 文件夹计数逻辑缺失
5. ✅ JavaScript 错误处理不完善
详细修复记录请查看:`BUGFIX_v3.0.1.md`
---
## 📋 部署前准备
### 1. 系统要求
- Python 3.8+
- MySQL/MariaDB 数据库
- Git
- 足够的磁盘空间(建议至少 1GB
### 2. 备份现有数据
**⚠️ 重要:在部署前务必备份数据库!**
```bash
# 备份数据库
mysqldump -u root -p zjpb > zjpb_backup_$(date +%Y%m%d_%H%M%S).sql
# 或者如果使用 SQLite
cp instance/zjpb.db instance/zjpb_backup_$(date +%Y%m%d_%H%M%S).db
```
---
## 🚀 部署步骤
### 步骤 1登录服务器
```bash
ssh your_username@server.zjpb.net
```
### 步骤 2进入项目目录
```bash
cd /opt/1panel/apps/zjpb
```
### 步骤 3拉取最新代码
```bash
# 查看当前分支
git branch
# 拉取最新代码
git pull origin master
```
**预期输出:**
```
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
...
Updating 34cd05b..2067fb1
Fast-forward
11 files changed, 2542 insertions(+), 6 deletions(-)
create mode 100644 CHANGELOG_v3.0.md
create mode 100644 USER_SYSTEM_README.md
...
```
### 步骤 4激活虚拟环境
```bash
# 如果使用 virtualenv
source venv/bin/activate
# 或者如果使用 conda
conda activate zjpb
```
### 步骤 5安装/更新依赖
```bash
# 检查是否有新的依赖v3.0 没有新增依赖)
pip install -r requirements.txt
```
### 步骤 6运行数据库迁移 ⭐
**这是最关键的一步!**
```bash
python create_user_tables.py
```
**预期输出:**
```
开始创建用户系统表...
SUCCESS: Database tables created successfully!
Created tables:
- users
- folders
- collections
Migration completed!
```
**如果出现错误:**
- 检查数据库连接配置
- 确认数据库用户有 CREATE TABLE 权限
- 查看错误信息并根据提示修复
**⚠️ 如果之前已运行过 v3.0.0(未修复版本):**
需要运行约束修复脚本:
```bash
python fix_collection_constraint.py
```
这将修复 Collection 表的唯一约束问题。
### 步骤 7验证数据库表
```bash
# 进入数据库
mysql -u root -p zjpb
# 或者使用 Python 验证
python -c "from app import create_app; from models import db, User, Folder, Collection; app = create_app(); app.app_context().push(); print('Users table:', db.engine.has_table('users')); print('Folders table:', db.engine.has_table('folders')); print('Collections table:', db.engine.has_table('collections'))"
```
**预期输出:**
```
Users table: True
Folders table: True
Collections table: True
```
### 步骤 8重启应用服务
根据您的部署方式选择对应的重启命令:
**如果使用 Systemd**
```bash
sudo systemctl restart zjpb
sudo systemctl status zjpb
```
**如果使用 Supervisor**
```bash
sudo supervisorctl restart zjpb
sudo supervisorctl status zjpb
```
**如果使用 PM2**
```bash
pm2 restart zjpb
pm2 status
```
**如果使用 Gunicorn 手动启动:**
```bash
# 先停止旧进程
pkill -f gunicorn
# 启动新进程
gunicorn -w 4 -b 0.0.0.0:5000 app:app --daemon
```
### 步骤 9验证部署成功
```bash
# 检查应用是否正常运行
curl http://localhost:5000/
# 检查新增的路由
curl http://localhost:5000/register
curl http://localhost:5000/login
```
---
## ✅ 功能测试清单
部署完成后,请按以下步骤测试所有功能:
### 1. 用户注册测试
1. 访问 `https://your-domain.com/register`
2. 输入用户名至少3个字符
3. 输入密码至少6个字符
4. 确认密码
5. 点击"注册"按钮
6. ✅ 应该自动登录并跳转到首页
7. ✅ 导航栏右上角应显示用户名
### 2. 用户登录测试
1. 点击导航栏的"退出登录"
2. 访问 `https://your-domain.com/login`
3. 输入刚才注册的用户名和密码
4. 点击"登录"按钮
5. ✅ 应该跳转到首页并显示登录状态
### 3. 收藏功能测试
1. 登录后访问任意工具详情页
2. 找到"收藏"按钮(在"访问网站"按钮下方)
3. 点击"收藏"按钮
4. ✅ 按钮应变为金色并显示"已收藏"
5. ✅ 页面顶部应显示"收藏成功"提示
6. 再次点击按钮
7. ✅ 应取消收藏并恢复原状
### 4. 用户中心测试
1. 点击导航栏的用户头像/用户名
2. 选择"个人中心"
3. ✅ 应显示用户信息和统计数据
4. ✅ 收藏数应该正确显示
5. ✅ 最近收藏列表应显示刚才收藏的工具
### 5. 收藏列表测试
1. 在用户中心点击"我的收藏"
2. 或访问 `https://your-domain.com/user/collections`
3. ✅ 应显示所有收藏的工具
4. ✅ 文件夹标签应正常显示
5. ✅ 点击工具卡片应跳转到详情页
### 6. 权限隔离测试 ⚠️
**测试普通用户无法访问管理后台:**
1. 使用普通用户账号登录
2. 尝试访问 `https://your-domain.com/admin/`
3. ✅ 应该被拒绝访问403错误或跳转
4. 尝试访问 `https://your-domain.com/admin/seo-tools`
5. ✅ 应该被拒绝访问
**测试管理员登录:**
1. 退出普通用户账号
2. 访问 `https://your-domain.com/admin/login`
3. 使用管理员账号登录
4. ✅ 应该能正常访问管理后台
---
## 🔧 故障排查
### 问题 1数据库迁移失败
**错误信息:**
```
ERROR: Failed to create tables: (pymysql.err.OperationalError) ...
```
**解决方案:**
```bash
# 1. 检查数据库连接
python -c "from app import create_app; app = create_app(); print('Database URI:', app.config['SQLALCHEMY_DATABASE_URI'])"
# 2. 检查数据库用户权限
mysql -u root -p
GRANT ALL PRIVILEGES ON zjpb.* TO 'your_db_user'@'localhost';
FLUSH PRIVILEGES;
# 3. 重新运行迁移
python create_user_tables.py
```
### 问题 2应用启动失败
**错误信息:**
```
ImportError: cannot import name 'User' from 'models'
```
**解决方案:**
```bash
# 1. 确认代码已正确拉取
git log -1 --oneline
# 应该显示2067fb1 feat: v3.0 - 用户系统和收藏功能
# 2. 重新安装依赖
pip install -r requirements.txt --force-reinstall
# 3. 清除 Python 缓存
find . -type d -name __pycache__ -exec rm -r {} +
find . -type f -name "*.pyc" -delete
```
### 问题 3收藏按钮不显示
**可能原因:**
- 静态文件缓存
- JavaScript 加载失败
**解决方案:**
```bash
# 1. 清除浏览器缓存Ctrl + Shift + Delete
# 2. 检查模板文件是否正确更新
grep -n "collectBtn" templates/detail_new.html
# 3. 强制刷新页面Ctrl + F5
```
### 问题 4管理员需要重新登录
**这是正常现象!**
由于 v3.0 修改了 `Admin.get_id()` 的返回格式(从 `id` 改为 `admin:id`),所有管理员需要重新登录一次。
**解决步骤:**
1. 访问 `/admin/login`
2. 使用管理员账号重新登录
3. 之后就可以正常使用了
### 问题 5普通用户仍能访问管理后台
**这是严重的安全问题!**
**检查步骤:**
```bash
# 1. 确认代码版本
git log -1 --grep="v3.0"
# 2. 检查 app.py 中的权限检查
grep -A 3 "isinstance(current_user, AdminModel)" app.py | head -20
# 3. 重启应用
sudo systemctl restart zjpb
```
---
## 📊 性能优化建议
### 1. 数据库索引验证
```sql
-- 进入数据库
mysql -u root -p zjpb
-- 检查索引
SHOW INDEX FROM users;
SHOW INDEX FROM folders;
SHOW INDEX FROM collections;
```
**应该看到以下索引:**
- users: username, email
- folders: user_id, public_slug
- collections: user_id, site_id, folder_id, (user_id, folder_id)
### 2. 静态文件缓存
如果使用 Nginx建议添加静态文件缓存
```nginx
location /static/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
```
### 3. 数据库连接池
检查 `app.py` 中的数据库配置:
```python
SQLALCHEMY_POOL_SIZE = 10
SQLALCHEMY_POOL_RECYCLE = 3600
SQLALCHEMY_MAX_OVERFLOW = 20
```
---
## 🔐 安全检查清单
部署后请确认以下安全措施:
- [ ] 普通用户无法访问 `/admin/` 路径
- [ ] 普通用户无法访问管理员 API 端点
- [ ] 管理员无法使用收藏功能(这是设计行为)
- [ ] 密码已正确哈希存储(不是明文)
- [ ] HTTPS 已启用(生产环境必须)
- [ ] 数据库备份已完成
---
## 📝 部署记录模板
建议在部署后记录以下信息:
```
部署日期2025-02-06
部署版本v3.0.0
部署人员:[您的名字]
服务器server.zjpb.net
数据库迁移:✅ 成功
应用重启:✅ 成功
功能测试:✅ 通过
权限测试:✅ 通过
备注:
- 数据库备份文件zjpb_backup_20250206_HHMMSS.sql
- 管理员已重新登录
- 所有功能测试通过
```
---
## 🎯 后续维护建议
### 1. 监控用户注册
```bash
# 查看用户数量
mysql -u root -p zjpb -e "SELECT COUNT(*) as user_count FROM users;"
# 查看最近注册的用户
mysql -u root -p zjpb -e "SELECT id, username, created_at FROM users ORDER BY created_at DESC LIMIT 10;"
```
### 2. 监控收藏数据
```bash
# 查看收藏总数
mysql -u root -p zjpb -e "SELECT COUNT(*) as collection_count FROM collections;"
# 查看最活跃的用户
mysql -u root -p zjpb -e "SELECT user_id, COUNT(*) as count FROM collections GROUP BY user_id ORDER BY count DESC LIMIT 10;"
```
### 3. 定期备份
建议设置定时任务自动备份:
```bash
# 编辑 crontab
crontab -e
# 添加每天凌晨3点备份
0 3 * * * mysqldump -u root -p'your_password' zjpb > /backup/zjpb_$(date +\%Y\%m\%d).sql
```
### 4. 日志监控
```bash
# 查看应用日志
tail -f /var/log/zjpb/app.log
# 或者如果使用 systemd
journalctl -u zjpb -f
```
---
## 📞 技术支持
如遇到问题,请查看:
1. **用户系统文档**`USER_SYSTEM_README.md`
2. **版本更新日志**`CHANGELOG_v3.0.md`
3. **Flask-Login 文档**https://flask-login.readthedocs.io/
4. **SQLAlchemy 文档**https://docs.sqlalchemy.org/
---
## ✅ 部署完成确认
当您完成以上所有步骤后,请确认:
- ✅ 代码已成功拉取commit: 2067fb1
- ✅ 数据库表已创建users, folders, collections
- ✅ 应用已重启并正常运行
- ✅ 用户注册功能正常
- ✅ 用户登录功能正常
- ✅ 收藏功能正常
- ✅ 用户中心正常显示
- ✅ 权限隔离正常(普通用户无法访问管理后台)
- ✅ 管理员已重新登录
**恭喜v3.0 部署成功!** 🎉
---
**文档版本:** v1.0
**最后更新:** 2025-02-06
**作者:** Claude Sonnet 4.5