Files
getDomain/docs/14_domainCheck_正式上线前最终检查单.md
2026-04-18 23:52:51 +08:00

279 lines
9.0 KiB
Markdown
Raw Permalink 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.
# 14 domainCheck 正式上线前最终检查单
## 一、使用场景
本文档用于正式上线前最后一次收口。
适用前提:
- 代码已更新到最新版本
- Linux 测试服已完成基础联调
- PostgreSQL 已执行过 `domainCheck/init_database.py`
- `domaincheck-api``domaincheck-worker` 已按 `systemd` 托管
如果当前仍处于“新机器首次部署”,请先回看:
- `docs/05_domainCheck_Linux部署清单.md`
- `domain-api/deploy/linux/README.md`
- `docs/13_domainCheck_Linux测试服交接文档.md`
如果后续进入“国外控制面 + 大陆执行面 + 多 Worker 扩容”阶段,请直接补充阅读:
- `docs/16_domainCheck_多机检测与跨地域部署设计.md`
- `domain-api/deploy/multi-region/README.md`
如果当前已经进入“大陆 controller + 海外 control”双地域正式联调还应额外确认
- 大陆 `controller` 节点的 `/etc/default/domaincheck-worker`
- `NODE_ROLE=control`
- 大陆 `domaincheck-sync-agent`
- 已启动并稳定运行
- 海外控制面 `runtime/sync-summary`
- 能看到 `detect_result_batches`
如果当前已经切到“海外单脑控制面统一驾驶”模式,建议同时配套阅读:
- `docs/25_domainCheck_海外单脑控制面上线收口总表.md`
- `docs/23_domainCheck_终局运维架构设计_海外单脑控制面.md`
- `docs/24_domainCheck_NodeAgent协议与ReleaseHub设计.md`
## 二、上线前必须确认的结论
上线前至少要确认下面这些结论同时成立:
- `domaincheck-api``active (running)`
- `domaincheck-worker``active (running)`
- `/health` 返回 `worker_mode=linux-systemd`
- `/api/v1/runtime/preflight` 返回 `ok=true`
- `smoke test` 返回 `ok=true`
- 运行中心里的 `start_worker / stop_worker / restart_api` 控制链路可用
- 导入、筛选、批量更新、导出四条核心业务链路至少各回归一次
- 诊断包可正常导出
## 三、正式上线前执行顺序
### 0. 先跑一遍统一上线总检
如果当前已经进入“海外单脑控制面 + 多地域 / Node Agent”这条正式链路建议先跑
```bash
cd /www/wwwroot/getDomain/domain-api
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-check http://127.0.0.1:8100 http://152.53.37.118:8100 summary
```
期望:
- `go_live_status``ready` 或至少没有新的 `blocking_reasons`
- `stack_status` 不为 `blocked`
- `route_surface_complete=true`
- `launchpad_status` 不为 `blocked`
- 如果当前已经纳管执行节点,则 `remote_access_ready` 不应长期为 `0`
- `next_step_action_code` / `operator_title` 应能直接说明当前第一优先动作
- 如果 `log_sync_enabled=true`,则要额外看 `log_sync_state``log_sync_covered_nodes`
如果这里已经出现 `bootstrap_run / run_acceptance`,说明当前上线前仍有节点接管缺口,应先收口首个缺口节点,再继续下面的业务核验。
建议这样理解总检输出:
- `blocking_reasons` 只放真正会阻断上线的项,例如 `remote_agent_ready=0`
- `warnings` 表示还能继续联调,但现在还不适合直接宣称“全部收口”
- `recommended_commands.next_step` 就是当前最值得优先执行的一条命令
- `recommended_commands.log_sync_logs` / `recommended_commands.log_sync_inspection` 用来补远端参与节点的日志观测
### 1. 核对服务状态
```bash
systemctl status domaincheck-api --no-pager -l
systemctl status domaincheck-worker --no-pager -l
```
期望:
- 两个服务都为 `active (running)`
- `domaincheck-worker` 不再循环重启
如果当前是大陆 controller 节点,还要补一条:
```bash
systemctl status domaincheck-sync-agent --no-pager -l
```
期望:
- `domaincheck-sync-agent``active (running)`
- 不循环重启
### 2. 核对健康接口
```bash
curl http://127.0.0.1:8100/health
curl http://127.0.0.1:8100/api/v1/runtime/preflight
curl http://127.0.0.1:8100/api/v1/runtime/readiness
curl http://127.0.0.1:8100/api/v1/runtime/status
```
期望:
- `/health` 返回 `status=ok`
- `/health` 返回 `worker_mode=linux-systemd`
- `/runtime/preflight` 返回 `ok=true`
- `/runtime/readiness` 不应返回 `blocking`
- `/runtime/status` 返回 `worker.running=true`
如果当前已经接入跨地域同步,还建议补看:
```bash
curl http://127.0.0.1:8100/api/v1/runtime/sync-summary
```
期望:
- 返回里能看到 `detect_result_batches`
- 至少能区分:
- `synced`
- `projected`
- `failed`
- 若大陆 `sync-agent` 已接上,则最近执行过的检测任务不应长期停留在 `projected`
当前 `runtime/preflight` 还会额外展示:
- RedisBloom 是否安装,若未安装会明确提示“降级为普通缓存”
- `detect_jucha` / `detect_juziseo` 是否启用
- 若启用了付费检测,对应本地 cookie 文件是否已就绪
当前 `detect/status` / `runtime/status` 还会明确展示代理运行态:
- `代理正常`
- `降级直连`
- `等待代理`
解释:
- `降级直连` 表示代理池暂时无可用代理,但当前允许直连兜底,任务不会因此中断
- `等待代理` 表示代理池无可用代理,且当前未允许直连,这会直接影响检测吞吐或导致步骤失败
当前还补充了两类更细的诊断语义:
- `proxy_runtime_reason=supplier_empty_pool`
- 表示代理源最近都返回了正常 HTTP 响应,但原始代理数为 `0`
- 这类问题更偏向供应侧空池,不是程序拉取失败
- `dependency_alerts`
- 表示外部依赖站点当前存在可观测异常
- 例如 `web.archive.org` 拒连、超时、连接池异常等
当前免费检测链路中的外部依赖异常还采用了“降级继续”策略:
- 例如 `时光机 / 站长之家 / 爱站 / 百度 / 360` 这类外部站点出现明显网络波动、拒连、超时
- 系统会优先记录为步骤级 `degraded`
- 并将域名置为 `待人工复核`
- 同时继续执行后续检测步骤,避免把整条任务链路直接污染成 `检测失败`
### 3. 跑正式服务态 smoke test
```bash
cd /opt/domaincheck/domain-api/deploy/linux
python3 smoke_test.py --base-url http://127.0.0.1:8100
```
如需把 Web 首页一起纳入检查:
```bash
python3 smoke_test.py --base-url http://127.0.0.1:8100 --web-url http://127.0.0.1
```
期望:
- 输出中 `ok=true`
### 4. 回归运行中心控制动作
建议至少各执行一次:
- `start_worker`
- `stop_worker`
- `restart_api`
期望:
- `stop_worker` 后,`runtime/status``worker.running=false`
- `start_worker` 后,`runtime/status``worker.running=true`
- `restart_api` 调用返回成功,随后 API 能重新恢复
说明:
- 当前 Linux 正式服务态已改为 `systemctl --no-block restart domaincheck-api`
- 因此 `restart_api` 会先返回成功,再由 `systemd` 异步完成 API 切换
### 5. 回归核心业务链路
建议至少确认下面 4 条:
- 导入域名成功,且会落到 `domains`
- 导入后自动创建 `detect_tasks`
- 筛选接口 `/api/v1/domains` 返回正常
- 批量更新后数据库字段与页面展示一致
- 导出任务可创建、导出文件可下载
如果时间紧,最小回归顺序建议为:
1. 导入一份小样本
2. 查看导入任务结果
3. 查看域名列表
4. 执行一次批量更新
5. 生成一次 TXT 或 CSV 导出
## 四、建议保留的上线证据
正式上线前,建议至少保留下面这些结果:
- `systemctl status domaincheck-api --no-pager -l`
- `systemctl status domaincheck-worker --no-pager -l`
- `journalctl -u domaincheck-api -n 200 --no-pager`
- `journalctl -u domaincheck-worker -n 200 --no-pager`
- `systemctl status domaincheck-sync-agent --no-pager -l`
- `journalctl -u domaincheck-sync-agent -n 200 --no-pager`
- `/health` 返回
- `/api/v1/runtime/preflight` 返回
- `/api/v1/runtime/sync-summary` 返回
- `smoke_test.py` 输出
- 一份最新诊断包
诊断包导出命令:
```bash
cd /opt/domaincheck/domain-api/deploy/linux
bash collect_diagnostics.sh /opt/domaincheck
```
## 五、当前可接受的非阻断项
以下项目目前已确认不会阻断正式服务运行:
- Redis 未安装 Bloom 模块时,会降级为普通缓存
- `worker``QT_QPA_PLATFORM=offscreen` 下无头运行
- 付费检测默认关闭时,不要求本机预置 `jucha` / `juziseo` cookie 文件
这些项可以在后续优化阶段继续增强,但不应再作为当前上线阻塞条件。
## 六、仍建议继续观察的项
以下内容不属于当前功能阻断,但上线后建议继续观察:
- 真实代理池可用率
- 代理为空时是否长期停留在 `降级直连`
- Wayback 首次全量检测耗时
- 长时间运行下的 Worker 稳定性
- 真实业务数据量上升后的数据库与导出耗时
## 七、最终上线判定
如果下面三类检查都通过,就可以视为已经具备正式上线条件:
- 服务状态检查通过
- 核心接口与 `smoke test` 通过
- 核心业务链路回归通过
一句话判定:
> 当前项目已经完成开发、Linux 测试服联调、正式服务态验证和关键日志降噪;剩余工作主要是正式环境发布与上线后观察,不再是功能性大修。