feat: 统一前后端日志和错误处理

This commit is contained in:
2026-04-19 00:14:22 +08:00
parent fd21e641a2
commit 9d452c4e75
10 changed files with 602 additions and 663 deletions

View File

@@ -1534,6 +1534,117 @@ pub struct Announcement {
- [ ] 日志不记录敏感信息
- [ ] 生产环境使用强密钥
## 十二、部署测试与自动回退
### 12.1 测试步骤要求
每次部署必须执行以下测试步骤:
#### 部署前测试(本地)
```bash
# 1. 代码检查
cargo clippy 2>&1 | grep -E "error|warning" || echo "✅ Clippy passed"
# 2. 格式化检查
cargo fmt --check || cargo fmt
# 3. 编译测试
APP_ENV=development cargo build 2>&1 | tail -5
# 4. 单元测试
cargo test 2>&1 | tail -10
```
#### 部署后测试(远程服务器)
```bash
# 部署后自动执行 test_deployment.sh测试内容
# 1. 健康检查
curl -f http://127.0.0.1:8080/health || exit 1
# 2. 登录接口
curl -f -X POST https://xmclassmate.top/dev/api/login \
-H "Content-Type: application/json" \
-d '{"code":"test"}' || exit 1
# 3. 静态资源
curl -f https://xmclassmate.top/dev/assets/img/favicon.png || exit 1
```
### 12.2 测试失败自动回退机制
部署脚本必须实现测试失败时的自动回退:
```bash
#!/bin/bash
# deploy.sh 核心逻辑
ENV=${1:-production}
REMOTE_DIR="/root/rust/rust_backend"
SERVICE_NAME="rust-backend.service"
BACKUP_DIR="/root/rust/backups"
# 1. 部署前备份
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
if [ -f "$REMOTE_DIR/rust-backend" ]; then
mkdir -p $BACKUP_DIR
cp "$REMOTE_DIR/rust-backend" "$BACKUP_DIR/rust-backend-$TIMESTAMP"
echo "✅ 备份已创建: rust-backend-$TIMESTAMP"
fi
# 2. 执行部署
rsync target/release/rust-backend root@1panel-server:$REMOTE_DIR/
ssh root@1panel-server "systemctl restart $SERVICE_NAME"
sleep 3
# 3. 执行测试
echo "🔍 执行部署后测试..."
if ssh root@1panel-server "bash $REMOTE_DIR/test_deployment.sh"; then
echo "✅ 部署成功"
else
echo "❌ 测试失败,执行回退..."
# 回退到上一个版本
LAST_BACKUP=$(ls -t $BACKUP_DIR/rust-backend-* | head -1)
if [ -n "$LAST_BACKUP" ]; then
rsync "$LAST_BACKUP" root@1panel-server:$REMOTE_DIR/rust-backend
ssh root@1panel-server "systemctl restart $SERVICE_NAME"
echo "✅ 已回退到: $(basename $LAST_BACKUP)"
else
echo "⚠️ 无可用备份,回退失败"
exit 1
fi
fi
```
### 12.3 回退触发条件
以下情况自动触发回退:
| 测试项 | 失败条件 | 影响 |
|--------|----------|------|
| 健康检查 | `curl -f` 返回非0 | 服务无法启动 |
| 登录接口 | HTTP 状态码 != 200 | 核心功能不可用 |
| 静态资源 | HTTP 状态码 >= 400 | 页面显示异常 |
| systemd 状态 | `active (running)` 以外 | 服务启动失败 |
### 12.4 回退操作限制
- **仅自动回退二进制文件**`rust-backend` 可执行文件
- **配置不回退**:配置文件(`config/*.toml`)保持新版本
- **数据库不回退**:数据库变更需要手动处理
- **日志保留**:回退后旧版本日志仍保存在 `$REMOTE_DIR/logs/`
### 12.5 备份保留策略
```bash
# 保留最近 10 个备份
BACKUP_COUNT=$(ls $BACKUP_DIR/rust-backend-* 2>/dev/null | wc -l)
if [ $BACKUP_COUNT -gt 10 ]; then
ls -t $BACKUP_DIR/rust-backend-* | tail -$((BACKUP_COUNT - 10)) | xargs rm -f
echo "🗑️ 已清理旧备份,保留最近 10 个"
fi
```
---
**最后更新**2026-04-17