127 lines
9.2 KiB
Markdown
127 lines
9.2 KiB
Markdown
# 单节点 native browser 验证记录
|
||
|
||
- 执行时间:2026-09-18(Asia/Shanghai)
|
||
- 执行者:本 worktree 的开发检查
|
||
- worktree:`/home/rogee/Workspace/creator-hub-native-browser`
|
||
- 分支:`refactor/native-browser-xvfb-impl`
|
||
- 基线:`7e3808cf4ce453b3583079680a3b59ca2ed64ad4`
|
||
- 远程同步:执行时 `main` 与 `origin/main` 均为 `7e3808cf4ce453b3583079680a3b59ca2ed64ad4`;当前 worktree 未改写原工作目录。
|
||
|
||
## 前置条件
|
||
|
||
| 项目 | 实际记录 | 状态 |
|
||
| --- | --- | --- |
|
||
| Linux 用户 | `rogee`,UID 1000,非 root | 通过 |
|
||
| Xvfb | `/usr/bin/Xvfb` | 通过 |
|
||
| systemd | `systemd-run` 可用,`systemctl --user` 可用 | 通过 |
|
||
| 浏览器 | fingerprint Chromium `148.0.7778.215`,可执行文件存在且可执行 | 通过 |
|
||
| Profile/runtime | 使用专用临时目录;目录权限为 0700 | 通过 |
|
||
| 数据库 | PostgreSQL `127.0.0.1:15432`;每次集成检查使用临时 schema | 通过 |
|
||
| 真实平台账号/真实代理 | 用户已提供抖音账号并完成只读身份/作品读取;合法代理仍未提供 | 部分通过 |
|
||
|
||
## 自动检查
|
||
|
||
| 检查 | 实际结果 | 状态 |
|
||
| --- | --- | --- |
|
||
| Go PostgreSQL 集成测试 | `go test -p 1 -count=1 ./...`,全部通过 | 通过 |
|
||
| Go 覆盖率 | 总覆盖率 `65.01%`;creator `65.9%`、hub `65.8%`、phasea `68.1%` | 通过 |
|
||
| `go vet ./...` | 通过 | 通过 |
|
||
| control-plane 构建 | `go build ./cmd/control-plane`,通过 | 通过 |
|
||
| Go race | `go test -race ./...`,全部通过 | 通过 |
|
||
| Python gateway | 69 tests 通过;生产文件覆盖率 `67%–76%` | 通过 |
|
||
| Frontend | 101 tests 通过;覆盖率 `66.31%`;Vite build 通过 | 通过 |
|
||
| Compose 配置 | PostgreSQL-only Compose 配置检查通过 | 通过 |
|
||
| 静态旧路径检查 | production gateway/control-plane 无 Docker socket、container/image/volume/network 生命周期或 Docker fallback | 通过 |
|
||
|
||
## Real native gateway smoke
|
||
|
||
### 正常生命周期
|
||
|
||
- 临时 gateway 以 UID 1000 启动,监听 `127.0.0.1:28183`,稳定 `node_id=native-smoke-node`。
|
||
- `/healthz` 返回 `204`。
|
||
- `/v1/info` 返回 `200`,列出浏览器版本 `148.0.7778.215`。
|
||
- 创建 `smoke-runtime` 返回 `201`,`state=running`、`status=ready`、`ready=true`,返回独立 display、CDP 端口、runtime/network ID 和 `proxy_ready=true`。
|
||
- stop 返回 `204`,delete 返回 `204`;查询结果为 `state=released`、`cleanup_state=cleaned`。
|
||
- 清理后 `systemctl --user list-units 'creatorhub-browser-*'` 为 0;临时 smoke 目录已删除。
|
||
|
||
### gateway 强制重启恢复
|
||
|
||
- 临时 gateway 监听 `127.0.0.1:28184`,创建一个 ready runtime 后对 gateway 进程执行 `SIGKILL`。
|
||
- 使用相同 state/profile 根目录和稳定 node ID 重启 gateway;重新查询得到同一 runtime,`state=running`、`ready=true`、`node_id=native-restart-node`。
|
||
- stop/delete 均返回 `204`,清理后受管 systemd unit 数量为 0。
|
||
|
||
上述 smoke 使用专用临时目录;为避免测试盘空间限制,仅该 smoke 将 `RUNTIME_MIN_FREE_BYTES` 覆盖为 0,不能替代 20 GB 磁盘阈值用例。
|
||
|
||
## 局域网裸启动 smoke
|
||
|
||
- 使用临时 PostgreSQL schema 启动 control-plane `LISTEN_ADDR=0.0.0.0:28082`,`/healthz` 返回 `204`;使用 Vite `--host 0.0.0.0 --port 5175`,首页返回 `200`。
|
||
- `ss` 确认两个监听分别为 `0.0.0.0:28082` 和 `0.0.0.0:5175`;本机 LAN 地址为 `10.1.1.104`,Vite 输出该地址。
|
||
- smoke 结束后停止临时进程并删除临时 schema/目录;原工作目录中已存在的服务和端口未触碰。
|
||
|
||
## 33 项单节点记录
|
||
|
||
| ID | 记录结果 | 证据/阻塞原因 |
|
||
| --- | --- | --- |
|
||
| A01 | 通过 | 独立 native runtime 新 Profile 通过 VNC 手工登录;control plane 身份核对返回 `logged_in`,Profile 未接管用户的 `chrome.service` |
|
||
| A02 | 阻塞 | 真实二维码、Profile 登录保持和版本升级未执行 |
|
||
| A03 | 阻塞 | 缺少真实竞品账号与采集授权 |
|
||
| A04 | 通过 | 独立 native runtime 通过 control plane scheduler 完成真实 Douyin works/comments checkpoint;当前账号无公开作品,保存 0 条,不伪造作品数据;证据见 `native-control-plane-real-douyin-2026-09-18.md` |
|
||
| A05 | 阻塞 | 同节点双账号真实采集未执行 |
|
||
| A06 | 阻塞 | 同 Profile 并发/人工登录占用未执行 |
|
||
| A07 | 阻塞 | 长期监听与采集并行缺少真实账号 |
|
||
| A08 | 阻塞 | 长期 holder 借用场景未执行 |
|
||
| A09 | 阻塞 | 缺少合法 HTTP/HTTPS/SOCKS4/SOCKS5 代理 |
|
||
| A10 | 阻塞 | 真实人工发送授权未提供 |
|
||
| B01 | 阻塞 | 真实采集取消未执行;代码取消路径有回归测试 |
|
||
| B02 | 阻塞 | 真实超时任务未执行 |
|
||
| B03 | 阻塞 | 真实代理失败与无效 browser path 未逐项手工执行 |
|
||
| B04 | 阻塞 | 真实浏览器/Xvfb 故障注入未执行 |
|
||
| B05 | 阻塞 | 真实目录清理失败未执行 |
|
||
| B06 | 阻塞 | 20 GB 阈值/磁盘写满未执行;smoke 覆盖了非阈值生命周期 |
|
||
| B07 | 通过 | native stop/delete 重复清理回归测试和 smoke 通过 |
|
||
| B08 | 通过 | gateway 强杀后 generation 恢复 smoke 通过 |
|
||
| B09 | 阻塞 | 真实长任务续租及旧 lease 迟到未执行;确定性 lease 测试通过 |
|
||
| B10 | 阻塞 | 真实结果保存失败/响应丢失未执行 |
|
||
| C01 | 通过 | native gateway SIGKILL 后同 runtime/node/ready 恢复 smoke 通过 |
|
||
| C02 | 阻塞 | 真实事件、冷却和订阅恢复未执行;事件去重/lease 自动测试通过 |
|
||
| C03 | 阻塞 | 真实短任务最长寿命观察未执行 |
|
||
| C04 | 阻塞 | control-plane 强杀期间素材处理未执行 |
|
||
| C05 | 阻塞 | 真实旧执行与新执行竞争未执行;资源归属测试通过 |
|
||
| C06 | 阻塞 | 真实机器重启未执行 |
|
||
| C07 | 通过 | 旧 generation/无关资源保护有确定性回归测试;真实目录手工核对未执行 |
|
||
| D01 | 未执行 | 多节点后续目标 |
|
||
| D02 | 未执行 | 多节点后续目标 |
|
||
| D03 | 未执行 | 多节点后续目标 |
|
||
| D04 | 未执行 | 多节点后续目标 |
|
||
| D05 | 未执行 | 多节点后续目标 |
|
||
| D06 | 未执行 | 多节点后续目标 |
|
||
|
||
## 尚未执行/阻塞的真实验收
|
||
|
||
- Douyin 独立 native runtime 登录、身份核对、只读采集和空结果 checkpoint 已通过;Xiaohongshu、长期监听、自动响应、写操作仍未执行,分别因范围/授权/真实平台条件标记未执行或阻塞。
|
||
- HTTP/HTTPS/SOCKS4/SOCKS5 真实出口及认证失败:缺少合法代理端点,阻塞。
|
||
- 另一台设备的 LAN 手工访问与前端完整点击流程:未执行,需联调操作者完成;本机 `0.0.0.0` 裸启动 smoke 已通过。
|
||
- 磁盘不足、真实 Profile 占用、清理失败和真实平台写操作:真实破坏性/写入场景未执行;确定性测试、真实 stop/repeat-stop/delete 和 runtime cleanup 已通过,不能把它们替代为全部真机故障证据。
|
||
- 多节点、A/B、跨机恢复、性能对比:按目标边界延期,不属于本目标。
|
||
|
||
本记录没有保存密码、Cookie、token、真实账号标识或平台数据。
|
||
|
||
## 补充:用户授权的 service-managed Chrome 真实读取
|
||
|
||
初始记录完成后,用户授权使用当前由 `chrome.service` 管理的 Chrome,仅通过本机 CDP `127.0.0.1:9222` 连接测试交互;没有让 native gateway 接管该 Chrome,也没有改变原有 `:99` Xvfb/VNC 启动方式。详细记录见 [`native-douyin-service-browser-2026-09-18.md`](native-douyin-service-browser-2026-09-18.md)。
|
||
|
||
- 抖音身份核对:通过,用户提供的账号标识与平台返回 UID 匹配。
|
||
- 抖音资料读取:通过,UID 与 `sec_uid` 两种查询均返回 `status_code=0`。
|
||
- 抖音作品第一页读取:通过,返回 13 条作品并标记存在下一页。
|
||
- 独立 native runtime 的 control-plane works/comments checkpoint 已通过;自动响应、人工发送、代理和真实资源故障场景仍未执行,不能用只读读取结果替代。
|
||
- 代理阻塞确认:2026-09-18 用户确认不提供合法 HTTP/HTTPS/SOCKS4/SOCKS5 代理端点;相关用例继续标记为“阻塞”,不宣称单节点目标完成。
|
||
|
||
## 补充:变更后自动检查复跑
|
||
|
||
- Python gateway:69 tests 通过;生产文件覆盖率分别为 `douyin.py 67%`、`gateway.py 68%`、`proxy.py 68%`、`runtime.py 76%`,均达到 65% 要求。
|
||
- Go:`go test -p 1 -count=1 ./...`、`go test -race -p 1 -count=1 ./...`、`go vet ./...`、`go build ./cmd/control-plane` 通过。
|
||
- Frontend:Vitest 101 tests 通过;coverage statements `66.31%`、lines `68.73%`;Vite build 通过。默认 worker 在机器高负载时曾启动超时,改用单 worker threads pool 后通过,未修改测试代码。
|
||
- 部署:`git diff --check`、`docs/deployment_stop_test.sh` 通过。
|
||
- 外部显示人工观察:临时 native gateway 复用已运行的 Xvfb `:99`,runtime 在 VNC `5900` 可见;停止/删除后恢复用户的 `chrome.service`,原 Profile 未被覆盖。该模式仅用于单节点人工观察,默认仍是每 runtime 独立 Xvfb。
|
||
- 独立 native gateway + control plane 的真实抖音闭环记录见 [`native-control-plane-real-douyin-2026-09-18.md`](native-control-plane-real-douyin-2026-09-18.md):runtime 启停、身份核对、works/comments checkpoint 均已通过;当前账号无公开作品,因此保存 0 条作品,不把空结果伪造为有数据。
|