Files

70 lines
2.6 KiB
Markdown
Raw Permalink Normal View History

# 2026-06-12 远程浏览器(Playwright Worker)上线
## 摘要
**66.154.115.131** 部署 `browser-worker`Playwright Chromium),Nexus 主站桥接 WebSocket + canvas 浮动面板,替代已移除的 iframe 方案。
## 动机
运维需在面板内完整浏览公网站点(不受 X-Frame-Options 限制);Chromium 运行在独立 Worker,隔离 SSRF 与内存压力。
## 涉及文件
| 区域 | 文件 |
|------|------|
| Worker | `browser-worker/*` |
| 后端 | `server/api/browser.py`, `browser_session.py`, `server/infrastructure/browser/*`, `server/utils/browser_url_safe.py`, `server/utils/browser_ui_state.py`, `server/config.py`, `server/main.py` |
| 前端 | `GlobalBrowserPanel.vue`, `useGlobalBrowser.ts`, `useRemoteBrowserSession.ts`, `BrowserPage.vue`, `App.vue`, `router`, `ServersPage.vue` |
| 测试 | `tests/test_browser_url_safe.py`, `tests/test_browser_ui_state.py` |
## 部署拓扑
```
管理员 SPA → Nexus (20.24.218.235) → Worker (66.154.115.131:8443) → 公网
```
## 生产配置(勿提交 git
主站 `/var/lib/nexus/.env``docker/.env.prod` 均需:
```env
NEXUS_BROWSER_ENABLED=1
NEXUS_BROWSER_WORKER_URL=http://66.154.115.131:8443
NEXUS_BROWSER_WORKER_SECRET=<与 Worker .env WORKER_SECRET 相同>
NEXUS_BROWSER_MAX_SESSIONS=2
NEXUS_BROWSER_IDLE_TIMEOUT_SEC=1800
```
Worker`/opt/nexus-browser-worker/.env``WORKER_SECRET` 同上)
防火墙:Worker `8443` 已对 Nexus 主站 IP `20.24.218.235` 放行。
## 迁移 / 重启
- 无 DB 迁移(复用 `admin_ui_preferences` / `embedded_browser`
- Worker`docker compose up -d --build`
- 主站:重建/重启 `nexus-prod-nexus-1` + 同步 `web/app`
## 验证
```bash
venv/bin/pytest tests/test_browser_url_safe.py tests/test_browser_ui_state.py -q
cd frontend && npm run type-check && npx vite build
curl -H "Authorization: Bearer $TOKEN" https://api.synaglobal.vip/api/browser/status
# → enabled:true, worker_ok:true
```
浏览器:左下角地球按钮 / 侧栏「浏览器」;输入 `https://example.com` 应出现 canvas 画面。
## 回滚
`NEXUS_BROWSER_ENABLED=0` 重启主站;Worker `docker compose down` 不影响 Nexus 其他功能。
## 2026-06-12 热修 — 画面不显示 / 连不上
**根因**Worker `CDPSession` 误用 `wait_for_event`(不存在),screencast 立即崩溃;断线后会话残留导致 `409`
**修复**`browser-worker/session_manager.py` 改为 `cdp.on("Page.screencastFrame")` + 队列;`POST /api/browser/sessions` 创建前清理该管理员陈旧会话。
**验证**:主站容器内 WS 测试 `SCREENCAST_OK`example.com JPEG ~4KB)。