# 部署验证 — 服务器列表展开刷新 + 单机指标历史

**日期**: 2026-06-09  
**范围**: `server_metric_samples`、`GET /servers/{id}/metrics`、展开区 `ServerInlineDetail` + `ServerMetricSparklines`

## 本地验证

| 项 | 结果 |
|----|------|
| `pytest tests/test_server_metrics.py` | 7/7 PASS |
| `bash scripts/local_verify.sh` | 26/26 PASS |
| `npm run type-check` | PASS |
| `vite build` | PASS（`ServersPage-rQyapRTV.js`） |
| `bash deploy/pre_deploy_check.sh` | 7/7 PASS |

## 生产部署

命令：`bash deploy/deploy-production.sh`  
结果：**Deploy successful**

| 检查项 | 结果 |
|--------|------|
| 容器健康 | `nexus-prod-nexus-1` healthy |
| 内网 `/health` | ok |
| 外网 `https://api.synaglobal.vip/health` | HTTP 200（部署脚本输出） |
| 前端入口 | `index-DUJUpEbL.js` → HTTP 200 |
| 前端 bundle | `ServersPage-rQyapRTV.js` 已同步至容器 |

## 终验（浏览器，运维）

1. 打开 `https://api.synaglobal.vip/app/#/servers`
2. 点击某台服务器 **名称** 展开行
3. Network 应出现：
   - `GET /api/servers/{id}`
   - `GET /api/servers/{id}/logs?limit=1`
   - `GET /api/servers/{id}/metrics?hours=24`
4. 展开区：状态 chip、实时 CPU/内存、24h sparkline（有 Agent 且部署满 ~10min 后有数据）、离线 chip（若曾离线）
5. 折叠再展开 → 上述请求再次发出

## 冷启动说明

`server_metric_samples` 自本次部署后每 10 分钟写入；部署后 10 分钟内展开可能显示「暂无历史数据」，属预期。

## 回滚

- 前端：回滚 `web/app` 至上一版 `ServersPage-*.js`
- 后端：回滚镜像/代码；`server_metric_samples` 表可保留（只读无害）
