# 浏览器 Worker 独立服务器 — 采购与部署计划 > **目标**:在**单独一台 VPS** 上运行 Playwright Chromium,Nexus 主站(`api.synaglobal.vip`)通过内网 API 桥接,管理员在浮动面板 canvas 操作。 > **设计**:[`2026-06-11-server-browser-chromium-design.md`](../specs/2026-06-11-server-browser-chromium-design.md) > **状态**:待购机 → 装机 → Nexus 代码联调 → 生产接入 --- ## 1. 为什么要单独买一台 | 项 | 全部塞进 Nexus 主站 | **独立 Worker(本计划)** | |----|---------------------|---------------------------| | 主站内存 | 每会话 +200~500MB | 主站几乎不增 | | Docker 镜像 | +300~500MB | 主镜像不变 | | SSRF 风险面 | 与 API/DB 同机 | 隔离在 Worker | | 扩缩容 | 和 API 绑死 | 可单独升配 Worker | 你已确认:**任意公网 https + Chromium**;**不要 iframe**。Worker 分离是推荐部署形态。 --- ## 2. 购机规格(下单前对照) ### 2.1 最低可用(单人运维、≤2 并发会话) | 项 | 建议 | |----|------| | **CPU** | 2 vCPU(x86_64) | | **内存** | **4 GB**(Chromium 单会话约 300~800MB,留系统与缓冲) | | **磁盘** | 40 GB SSD(系统 + Chromium 缓存) | | **系统** | **Ubuntu 22.04 LTS** 或 **24.04 LTS**(x86_64) | | **带宽** | ≥ 5 Mbps 出站(画面 JPEG 流;10 Mbps 更稳) | | **地域** | 与 Nexus 主站**同区域或近区**(降延迟) | ### 2.2 推荐配置(留余量、偶尔双标签) | 项 | 建议 | |----|------| | CPU | 4 vCPU | | 内存 | **8 GB** | | 磁盘 | 60 GB SSD | ### 2.3 不建议 - **1 GB / 2 GB 内存** — Chromium 易 OOM,会话被 kill - **ARM 除非验证 Playwright** — 优先 x86_64,减少兼容问题 - **与 Nexus 主站共用同一台** — 违背隔离目的(若预算极紧可临时同机,不推荐) ### 2.4 厂商与形态 任意支持 **Ubuntu + 公网 IP** 的 VPS 即可(Azure、阿里云、腾讯云、Vultr 等)。 **不必**买 Windows;Worker 只跑 Linux + Docker。 --- ## 3. 网络与安全(购机时一并规划) ### 3.1 拓扑 ``` [ 管理员浏览器 ] ──HTTPS──► [ Nexus 主站 20.24.218.235 :443 ] │ 内网/VPN/专线(推荐) ▼ [ Browser Worker :8443 ] │ └──► 任意公网站点 ``` ### 3.2 防火墙(Worker 上) | 方向 | 规则 | |------|------| | 入站 | **仅允许 Nexus 主站 IP** 访问 Worker 服务端口(默认 `8443/tcp`) | | 入站 | SSH `22/tcp` 仅你的运维 IP(或跳板机) | | 入站 | **禁止** 0.0.0.0/0 访问 8443 | | 出站 | 允许 `80/443` 访问公网(浏览器上网) | | 出站 | 禁止 Worker 访问 Nexus 内网/MySQL/Redis(Worker 不需要) | > 若 Nexus 与 Worker **同云厂商同 VPC**,用**内网 IP** 通信,Worker **不要绑公网 8443**。 ### 3.3 密钥 购机后生成一对: - `NEXUS_BROWSER_WORKER_SECRET` — 随机 ≥ 32 字节,Worker 与 Nexus 主站 `.env` **各存一份相同值** - Worker **不**存 Nexus `SECRET_KEY` / `DATABASE_URL` --- ## 4. 购机后你要收集的信息(交给 Agent 联调) 买好后请记录(可写在本地 `.env` 片段,**勿提交 git**): ```bash # Browser Worker(新机器) BROWSER_WORKER_PUBLIC_IP= # 若无内网则用 BROWSER_WORKER_PRIVATE_IP= # 与 Nexus 同 VPC 时优先 BROWSER_WORKER_SSH=user@ip BROWSER_WORKER_SSH_KEY=/path/to/key.pem # Nexus 主站侧(deploy/nexus-1panel.secrets.sh 或生产 .env) NEXUS_BROWSER_ENABLED=1 NEXUS_BROWSER_WORKER_URL=https://:8443 NEXUS_BROWSER_WORKER_SECRET=<与 Worker 相同> NEXUS_BROWSER_MAX_SESSIONS=2 NEXUS_BROWSER_IDLE_TIMEOUT_SEC=1800 ``` 并确认: - [ ] 从 **Nexus 主站** `curl -k https://:8443/health` 能通(部署 Worker 后) - [ ] 从 **公网随机 IP** 访问 Worker 8443 **应失败**(防火墙生效) --- ## 5. Worker 机上安装步骤(购机后执行) > 代码侧将提供 `browser-worker/` 目录与 `docker-compose.worker.yml`;以下为计划步骤,**Agent 实现后按 changelog 为准**。 ### Phase A — 基础环境(约 15 分钟) ```bash # 1. SSH 登录新机器 ssh -i key.pem ubuntu@ # 2. 系统更新 + Docker sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install -y ca-certificates curl curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER # 重新登录使 docker 组生效 # 3. 防火墙(示例 ufw) sudo ufw default deny incoming sudo ufw allow from to any port 8443 proto tcp sudo ufw allow from to any port 22 proto tcp sudo ufw enable ``` ### Phase B — 部署 Browser Worker 容器(Agent 交付后) ```bash # 在 Worker 上 git clone http://66.154.115.8:3000/admin/Nexus.git /opt/nexus-worker cd /opt/nexus-worker/browser-worker # 待实现路径 cp .env.example .env # 编辑 WORKER_SECRET、BIND、日志级别 docker compose up -d --build docker compose logs -f # 确认 Chromium 就绪 curl -s http://127.0.0.1:8443/health # 应返回 ok ``` ### Phase C — Nexus 主站接入(Agent 联调) ```bash # 在 Nexus 主站 .env 增加 NEXUS_BROWSER_* # 重启 API:supervisorctl restart nexus 或 docker compose restart nexus bash scripts/local_verify.sh # 开发机 # 生产:bash deploy/pre_deploy_check.sh && bash deploy/deploy-production.sh ``` ### Phase D — 验收 | # | 检查项 | 通过标准 | |---|--------|----------| | 1 | Worker health | `/health` → ok | | 2 | 公网站点 | 面板打开 `https://example.com` 有画面 | | 3 | iframe 曾白屏的站 | 能显示(抽 1~2 个已知站) | | 4 | SSRF | 面板输入 `http://127.0.0.1` → 明确错误,Worker 日志无成功请求 | | 5 | 隔离 | 未授权 IP 无法连 Worker 8443 | | 6 | 持久化 | 刷新 Nexus 后标签/收藏仍在(MySQL) | | 7 | 重启 Worker | Nexus 会话断开可重建,不拖垮主站 | --- ## 6. Nexus 代码实施顺序(与购机并行) 你可**先买服务器**;Agent 在仓库内并行开发,**不阻塞购机**。 | 阶段 | 内容 | 依赖 Worker 机器 | |------|------|------------------| | **W1** | `browser-worker/` 独立服务 + Docker + health | 否(本地 Docker 可测) | | **W2** | SSRF 校验、Playwright screencast、Worker WS 协议 | 否 | | **W3** | Nexus 主站 `browser_bridge` 桥接 + `/ws/browser` | 否(mock Worker) | | **W4** | 前端 canvas 替换 iframe | 否 | | **W5** | 你在 Worker VPS 部署 + 主站 `.env` 联调 | **是** | | **W6** | changelog、audit、门控、生产部署 | 是 | **购机前可完成 W1~W4**;**W5 需要你的 Worker IP + SSH**。 --- ## 7. Worker 服务接口(预定,实现以代码为准) Nexus 主站 → Worker(内网,Header `X-Nexus-Worker-Key`): | 方法 | 路径 | 说明 | |------|------|------| | GET | `/health` | 就绪探测 | | POST | `/v1/sessions` | 创建 `{ session_id, viewport }` | | DELETE | `/v1/sessions/{id}` | 销毁 | | WS | `/v1/sessions/{id}/stream` | 双向:帧 + navigate/键鼠 | 管理员浏览器 **只连 Nexus**;不直连 Worker(Worker 不对管理员暴露)。 --- ## 8. 预算参考(仅供参考) | 配置 | 大致月费(国内/海外 VPS) | |------|---------------------------| | 2C4G | ¥50~150 / $5~20 | | 4C8G | ¥100~300 / $15~40 | 另计:出站流量(画面流持续使用时略高于纯 API)。 --- ## 9. 购机 Checklist(打印勾选) **下单前** - [ ] 2 vCPU + **4 GB RAM** 及以上 - [ ] Ubuntu 22.04/24.04 x86_64 - [ ] 与 Nexus 主站同区域或近区 - [ ] 可配置安全组 / ufw - [ ] 独立公网 IP 或与 Nexus **同 VPC 内网** **到手后** - [ ] SSH 可登录 - [ ] 记录公网 IP / 内网 IP - [ ] ufw:8443 仅 Nexus 主站 IP - [ ] 生成 `NEXUS_BROWSER_WORKER_SECRET` - [ ] 把 §4 信息发给 Agent / 写入本地 secrets - [ ] 等 `browser-worker/` 合并后执行 Phase B~D **回滚** - [ ] 主站 `NEXUS_BROWSER_ENABLED=0` 即关闭,Worker 可关机不影响 Nexus --- ## 10. 与现有文档关系 | 文档 | 关系 | |------|------| | `server-browser-chromium-design.md` | 功能与安全 SSOT | | `server-browser-chromium.md` | Nexus 主站 + 前端实现清单 | | **本文** | **购机、网络、Worker 装机、联调验收** | 购机完成后,在新会话说:「Worker 已就绪,IP 是 …」并提供 SSH(secrets 本地),Agent 从 **W5 联调** 继续。