ba7c790f38
Monitoring history charts and tables now format UTC timestamps as Asia/Shanghai. Remove Playwright worker, global browser panel, and related API routes; open site URLs in a new tab instead. Fix chain test Redis pipeline mock.
3.6 KiB
3.6 KiB
远程内置浏览器方案 — 下线经验(2026-06-12)
状态:已整体移除(代码 + API + Worker 目录)。下次换方案前必读本文。
历史设计归档见docs/design/specs/2026-06-11-server-browser-chromium-design.md等。
演进简史
| 阶段 | 方案 | 结果 |
|---|---|---|
| 1 | 全局浮动窗 + iframe 嵌站点 | 大量站点 X-Frame-Options 拒嵌 → 已移除 |
| 2 | 独立 Worker(Playwright + JPEG screencast)+ Nexus 桥接 WS + 前端 canvas | 2026-06-12 下线 |
曾验证可行的部分
- Worker
GET /health、主站NEXUS_BROWSER_*门控、会话X-Nexus-Worker-Key鉴权链路可通。 Page.startScreencast+cdp.on("Page.screencastFrame")能推 JPEG 到前端 canvas(冒烟 ~4KB/帧)。- 显式
NAVIGATE双端validate_navigation_url可挡明显 SSRF。 - 服务器页「站点」用域名拼
https://打开(guessSiteUrlFromDomain)简单可靠。
未达标的根因(勿重复踩坑)
1. 产品 / UX
- 浮动窗 + 最小化条 + 顶栏按钮 + 默认收起/展开状态机过于复杂,易出现「看不见窗」「展开黑屏」。
- 用户真实诉求是「在运维后台旁路打开站点」,新标签
window.open往往足够;内嵌 canvas 收益不成比例。
2. 技术
- 黑屏:最小化/切标签/重连时 canvas 与 WS 会话生命周期不同步;
disconnect后未稳定connect+navigate;容器尺寸为 0 时 viewport 异常。 - 验证码:阿里云等需 headed + 反自动化 + 人工拖动;Worker 侧成本高且仍不稳定。
- SSRF(P1):仅校验显式
NAVIGATE;页内点击/302 未逐跳校验(设计文档要求但未完)。 - 多 worker:
session_registry进程内字典,uvicorn 多进程时 WS 可能 4403。 - 运维:Worker 8443 防火墙、TLS 自签、会话泄漏(reservation idle)需持续值守。
3. 工程
- 前后端 + Worker 三仓逻辑 +
admin_ui_preferences状态同步,变更面大、门控/审计成本高。 - 与监测槽/文件/终端等主线并行时,合并与部署易拖慢主线。
下线后保留
| 保留 | 说明 |
|---|---|
frontend/src/utils/browserUrl.ts |
服务器列表「站点」→ 新标签打开 |
| 设计/审计/changelog 历史 | 仅供复盘,勿当 SSOT |
MySQL admin_ui_preferences 中 embedded_browser 行 |
可留可清,不再读写 |
下次可选方向(未选型)
- 维持新标签(当前):零维护,无 SSRF 面在 Nexus 内。
- RDP / noVNC 到子机桌面浏览器:已有 RDP 栈时可复用,但资源重。
- SSH 隧道 + 本地 Chrome:仅高级用户,不适合默认产品路径。
- 第三方堡垒机式 Web 终端浏览器:参考 JumpServer,独立产品级投入。
- 若再做内嵌:必须先闭环 framenavigated SSRF、单进程会话注册表/Redis、验证码策略、E2E 黑屏回归,再动 UI。
验收清单(换方案时)
- 明确是否必须内嵌(vs 新标签/远程桌面)
- 威胁模型:SSRF、Worker 暴露面、会话归属
- 最小 UI:一种入口、一种展开态,避免三套入口(地球/顶栏/最小化条)
- 门控:定向 pytest + 生产
/api/browser/*不存在或 404 - 下线时:删路由、删前端、删 Worker 部署、文档一篇 lessons
相关文档
- Changelog:
docs/changelog/2026-06-12-remove-remote-browser.md - 审计(历史):
docs/audit/2026-06-12-remote-browser-worker.md - 巡查(历史):
docs/reports/2026-06-12-remote-browser-bug-patrol.md