330 lines
5.9 KiB
Markdown
330 lines
5.9 KiB
Markdown
# 账号管理系统重构部署指南
|
|
|
|
## 快速开始
|
|
|
|
### 1. 备份现有系统
|
|
|
|
```bash
|
|
# 备份数据库
|
|
mysqldump -u root -p your_database > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
|
|
# 备份应用文件
|
|
tar -czf app_backup_$(date +%Y%m%d_%H%M%S).tar.gz app/ migrations/
|
|
|
|
# 备份配置文件
|
|
cp config.py config.py.bak
|
|
```
|
|
|
|
### 2. 应用迁移
|
|
|
|
```bash
|
|
# 进入项目目录
|
|
cd /path/to/KaMiXiTong
|
|
|
|
# 应用数据库迁移
|
|
flask db upgrade
|
|
|
|
# 或手动执行
|
|
alembic upgrade head
|
|
```
|
|
|
|
### 3. 重启应用
|
|
|
|
```bash
|
|
# 如果使用systemd
|
|
sudo systemctl restart kamixitong
|
|
|
|
# 如果使用gunicorn
|
|
sudo killall gunicorn
|
|
# 然后重新启动
|
|
gunicorn -w 4 -b 0.0.0.0:5000 run:app &
|
|
|
|
# 如果直接运行
|
|
python run.py
|
|
```
|
|
|
|
### 4. 验证部署
|
|
|
|
```bash
|
|
# 运行测试脚本
|
|
python test_refactored_admin.py
|
|
```
|
|
|
|
## 详细部署步骤
|
|
|
|
### 步骤1: 准备工作
|
|
|
|
确认以下环境:
|
|
- Python 3.7+
|
|
- MySQL 5.7+ 或 PostgreSQL
|
|
- Flask-Migrate 已安装
|
|
|
|
```bash
|
|
pip list | grep -E "Flask|flask-migrate|sqlalchemy"
|
|
```
|
|
|
|
### 步骤2: 检查代码文件
|
|
|
|
确认以下文件已存在:
|
|
- `app/api/admin.py` (重构后)
|
|
- `app/models/audit_log.py` (新建)
|
|
- `app/web/templates/admin/list.html` (重构后)
|
|
- `migrations/versions/20241111_add_soft_delete_to_admin.py`
|
|
- `migrations/versions/20241111_create_audit_log.py`
|
|
|
|
### 步骤3: 停止应用
|
|
|
|
确保没有活跃的用户连接:
|
|
```bash
|
|
# 查看活跃连接
|
|
lsof -i :5000
|
|
|
|
# 停止应用
|
|
sudo systemctl stop kamixitong
|
|
# 或
|
|
pkill -f "gunicorn.*run:app"
|
|
```
|
|
|
|
### 步骤4: 应用迁移
|
|
|
|
```bash
|
|
# 初始化迁移仓库(如果还没有)
|
|
flask db init
|
|
|
|
# 生成迁移文件(可选,文件已存在)
|
|
# flask db migrate -m "Add soft delete fields to admin"
|
|
# flask db migrate -m "Create audit_log table"
|
|
|
|
# 升级数据库
|
|
flask db upgrade
|
|
|
|
# 验证迁移
|
|
flask db current
|
|
# 应该看到: add_soft_delete_admin 和 create_audit_log
|
|
```
|
|
|
|
### 步骤5: 验证表结构
|
|
|
|
```sql
|
|
-- 连接到数据库
|
|
mysql -u root -p
|
|
|
|
-- 检查admin表
|
|
DESCRIBE admin;
|
|
-- 应该看到: is_deleted, delete_time 字段
|
|
|
|
-- 检查audit_log表
|
|
DESCRIBE audit_log;
|
|
-- 应该存在audit_log表
|
|
```
|
|
|
|
### 步骤6: 启动应用
|
|
|
|
```bash
|
|
# 启动应用
|
|
python run.py
|
|
# 或
|
|
gunicorn -w 4 -b 0.0.0.0:5000 run:app &
|
|
|
|
# 检查日志
|
|
tail -f app.log
|
|
```
|
|
|
|
### 步骤7: 功能测试
|
|
|
|
#### 测试1: 登录系统
|
|
1. 访问登录页面
|
|
2. 使用超级管理员账号登录
|
|
3. 确认可以访问管理后台
|
|
|
|
#### 测试2: 账号管理
|
|
1. 进入"账号管理"页面
|
|
2. 创建新账号
|
|
3. 编辑账号
|
|
4. 启用/禁用账号
|
|
5. 删除账号(验证软删除)
|
|
6. 查看审计日志
|
|
|
|
#### 测试3: 验证新功能
|
|
|
|
```bash
|
|
# 访问审计日志表
|
|
mysql -u root -p -e "SELECT * FROM audit_log ORDER BY create_time DESC LIMIT 10;"
|
|
|
|
# 查看已删除的账号
|
|
mysql -u root -p -e "SELECT admin_id, username, is_deleted, delete_time FROM admin WHERE is_deleted = 1;"
|
|
```
|
|
|
|
## 回滚方案
|
|
|
|
如果遇到问题,可以回滚到原版本:
|
|
|
|
### 方案1: 回滚数据库
|
|
|
|
```bash
|
|
# 查看迁移历史
|
|
flask db history
|
|
|
|
# 回滚到特定版本
|
|
flask db downgrade add_soft_delete_admin
|
|
|
|
# 或完全回滚
|
|
flask db downgrade base
|
|
```
|
|
|
|
### 方案2: 恢复备份
|
|
|
|
```bash
|
|
# 恢复数据库
|
|
mysql -u root -p your_database < backup_YYYYMMDD_HHMMSS.sql
|
|
|
|
# 恢复应用文件
|
|
tar -xzf app_backup_YYYYMMDD_HHMMSS.tar.gz
|
|
|
|
# 重启应用
|
|
sudo systemctl restart kamixitong
|
|
```
|
|
|
|
### 方案3: 手动回滚
|
|
|
|
如果自动回滚失败,手动执行:
|
|
|
|
```sql
|
|
-- 删除audit_log表
|
|
DROP TABLE IF EXISTS audit_log;
|
|
|
|
-- 删除admin表字段
|
|
ALTER TABLE admin DROP COLUMN is_deleted;
|
|
ALTER TABLE admin DROP COLUMN delete_time;
|
|
```
|
|
|
|
## 性能优化建议
|
|
|
|
### 1. 审计日志归档
|
|
|
|
```sql
|
|
-- 归档6个月前的日志
|
|
CREATE TABLE audit_log_archive AS
|
|
SELECT * FROM audit_log
|
|
WHERE create_time < DATE_SUB(NOW(), INTERVAL 6 MONTH);
|
|
|
|
-- 清理旧日志
|
|
DELETE FROM audit_log
|
|
WHERE create_time < DATE_SUB(NOW(), INTERVAL 6 MONTH);
|
|
```
|
|
|
|
### 2. 添加索引
|
|
|
|
```sql
|
|
-- 为常用查询添加索引
|
|
CREATE INDEX idx_admin_status ON admin(status);
|
|
CREATE INDEX idx_admin_username ON admin(username);
|
|
```
|
|
|
|
### 3. 监控查询性能
|
|
|
|
```sql
|
|
-- 慢查询监控
|
|
SET long_query_time = 2;
|
|
SET slow_query_log = 1;
|
|
```
|
|
|
|
## 常见问题解决
|
|
|
|
### Q1: 迁移失败
|
|
|
|
**错误:** `Target database is not up to date`
|
|
|
|
**解决:**
|
|
```bash
|
|
# 标记当前版本
|
|
flask db stamp head
|
|
|
|
# 重新迁移
|
|
flask db upgrade
|
|
```
|
|
|
|
### Q2: 权限错误
|
|
|
|
**错误:** `Access denied for user`
|
|
|
|
**解决:**
|
|
```sql
|
|
-- 授权
|
|
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
```
|
|
|
|
### Q3: 审计日志记录失败
|
|
|
|
**错误:** `Table 'audit_log' doesn't exist`
|
|
|
|
**解决:**
|
|
```bash
|
|
# 手动应用迁移
|
|
alembic upgrade create_audit_log
|
|
```
|
|
|
|
### Q4: 登录失败
|
|
|
|
**错误:** `管理员不存在`
|
|
|
|
**解决:**
|
|
检查数据库中是否有超级管理员账号:
|
|
```sql
|
|
SELECT admin_id, username, role, status, is_deleted FROM admin WHERE role = 1 AND status = 1 AND is_deleted = 0;
|
|
```
|
|
|
|
如果没有,创建一个:
|
|
```sql
|
|
INSERT INTO admin (username, password_hash, email, role, status, is_deleted)
|
|
VALUES ('admin', '<hashed_password>', 'admin@example.com', 1, 1, 0);
|
|
```
|
|
|
|
## 监控和维护
|
|
|
|
### 日常检查
|
|
|
|
1. **查看应用日志**
|
|
```bash
|
|
tail -f app.log | grep -E "ERROR|CRITICAL"
|
|
```
|
|
|
|
2. **检查数据库状态**
|
|
```sql
|
|
SHOW PROCESSLIST;
|
|
SHOW TABLE STATUS;
|
|
```
|
|
|
|
3. **监控审计日志增长**
|
|
```sql
|
|
SELECT COUNT(*) FROM audit_log WHERE create_time > CURDATE();
|
|
```
|
|
|
|
### 定期维护
|
|
|
|
1. **每月归档审计日志**
|
|
2. **清理过期的已删除账号** (可选)
|
|
3. **优化数据库表** (`OPTIMIZE TABLE`)
|
|
4. **备份数据库**
|
|
|
|
## 联系支持
|
|
|
|
如果遇到问题:
|
|
1. 查看 `REFACTOR_NOTES.md` 了解详细变更
|
|
2. 运行 `test_refactored_admin.py` 进行诊断
|
|
3. 检查应用日志和数据库日志
|
|
4. 如需帮助,请提供:
|
|
- 错误日志
|
|
- 数据库版本
|
|
- Python版本
|
|
- 操作系统版本
|
|
|
|
---
|
|
|
|
**重要提示:**
|
|
- 部署前务必备份数据
|
|
- 在测试环境先进行验证
|
|
- 保留原有的admin_old.py和list_old.html作为备份
|
|
- 建议在低峰期进行部署
|