feat: 统一前后端日志和错误处理
This commit is contained in:
111
IMPROVEMENTS.md
111
IMPROVEMENTS.md
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user