Skip to content

Latest commit

 

History

History
182 lines (128 loc) · 6.75 KB

File metadata and controls

182 lines (128 loc) · 6.75 KB

Ubuntu 服务器部署与远程登录方案

这份文档是给服务器上的 Codex 看的执行说明。目标是:在 Ubuntu 服务器部署当前 browser_api_proxy 项目,并额外提供一个“浏览器里可操作的远程桌面网页”,让用户可以直接在网页里完成 Flow / Doubao 账号登录。

先做什么

收到任务后,先按这个顺序处理:

  1. 先读根目录 readme_for_ai.md
  2. 再读 README.md
  3. 先做部署与环境检查,不要一上来改代码
  4. 只有在确认现有结构无法完成目标时,才考虑改代码;改之前必须先征求用户同意
  5. 如果后续真的发生稳定功能改动,别忘了同步更新 readme_for_ai.md

这次任务的目标

  • 在 Ubuntu 服务器上跑起当前项目
  • 保留现有管理页 /ui/?tab=flow 和 /ui/?tab=doubao
  • 额外提供一个可以在浏览器里打开的远程桌面页面,让用户看到并操作服务器上的真实浏览器
  • 用户点管理页里的“打开登录窗口”后,能在远程桌面页面里看到对应浏览器窗口,并手动完成登录
  • 登录态只保存在服务器本地,不再依赖从 Windows 往 GitHub 同步缓存

关键判断

  • 当前项目自带的管理页只能调用后端接口,让服务器本地打开浏览器窗口
  • 当前项目自带的管理页不能把服务器浏览器画面直接嵌进网页,也不能直接把鼠标键盘操作转发到服务器浏览器
  • 所以,单独部署当前管理页还不够
  • 要实现“用户在网页里直接操控登录”,必须额外加一层轻量远程桌面网页

推荐方案

推荐最小可行方案:

  • browser_api_proxy 后端
  • 项目自带 React 管理页
  • 一个轻量虚拟显示环境
  • 一个轻量窗口管理器
  • 一个 VNC 服务
  • 一个 noVNC 网页入口

可接受的实现方向:

  • Xvfb + openbox + x11vnc + noVNC
  • 或者服务器环境里更容易落地的同类轻量组合

注意:

  • 服务器只有 2 核 4G,优先轻量方案
  • 不要上重型桌面环境,比如完整 GNOME / KDE,除非服务器现成已经有
  • 不要为了这个任务重构业务代码

明确不要做的事

  • 不要把这次目标理解成“只部署当前 React 管理页”
  • 不要默认继续走“Windows 浏览器缓存 -> GitHub -> Ubuntu”这条链路
  • 不要直接复用 Windows 里的 accounts.json
  • 不要把浏览器 profile 长期放进 Git 历史同步
  • 不要前台阻塞等待长任务跑完,要后台启动并轮询检查
  • 不要用假的登录成功或其他补丁绕过真实登录流程

为什么不能直接靠 GitHub 同步 Windows 缓存

  • 当前账号注册表会记录 Windows 绝对路径,直接带到 Ubuntu 容易失效
  • Chromium 持久化 profile 跨 Windows -> Linux 并不可靠
  • 浏览器缓存二进制很多、变化碎,不适合长期进 Git 仓库
  • 默认部署方案应当是:登录态在服务器本地生成并留在服务器本地

部署实施顺序

1. 检查服务器环境

  • 确认 Ubuntu 版本
  • 确认是否有域名反代在用
  • 确认当前开放端口、已有服务、磁盘空间、内存
  • 确认是否能正常 apt / pip / npm 下载;如果下载卡住,记得按用户偏好走代理

2. 部署项目本体

  • 拉取当前仓库代码
  • 创建并复用项目自己的 Python 虚拟环境
  • 安装 requirements.txt
  • 安装 Playwright Chromium 到服务器本地目录
  • 如果 web/dist/ 不存在,再进入 web/ 执行前端依赖安装和构建
  • 启动后端服务,但不要阻塞等待;要后台启动并轮询健康检查

健康检查至少验证:

  • /providers/flow/health
  • /providers/doubao/health

3. 本地化服务器运行数据

  • 让服务器自己生成本地 data/
  • 让服务器自己生成本地浏览器 profile
  • 不要默认从 Windows 拷贝 accounts.json
  • 不要默认从 GitHub 拉取 Windows 浏览器缓存来当正式方案

如果用户明确要求“先试着迁移旧缓存”:

  • 把它当成可选实验,不是默认主方案
  • 实验前先告诉用户这件事不稳定

4. 搭建“网页登录服务器浏览器”的能力

目标效果:

  • 用户用自己电脑打开一个网页
  • 这个网页能显示服务器上的桌面 / 浏览器画面
  • 用户能在网页里点、输、拖动,等同于在服务器浏览器上直接操作

实施要求:

  • 选用轻量远程桌面网页方案
  • 优先使用 noVNC 路线
  • 远程桌面进程和后端都要后台运行
  • 启动后要轮询检查端口或页面是否可访问,不能一直卡住等待

5. 对外访问方式

如果服务器已经有域名和反代:

  • 暴露项目管理页入口
  • 暴露远程桌面网页入口

如果暂时没有现成反代:

  • 短期可先直接暴露端口验证
  • 但上线前至少加一层访问保护

最低保护要求:

  • 基本认证、独立密码、IP 白名单三者至少做一种

因为这里会直接暴露登录操作画面,不能裸奔公开。

6. 登录流程联调

联调时按下面顺序:

  1. 先打开远程桌面网页,确认能看到服务器桌面
  2. 再打开项目管理页
  3. 在 Flow 或 Doubao 账号卡片上点击“打开登录窗口”
  4. 回到远程桌面网页,确认服务器浏览器窗口已经出现
  5. 用户在远程桌面网页里手动完成登录、验证码、二次验证
  6. 回到管理页点击“检查登录”
  7. 确认 session/check 状态变成 ready

7. 登录后运行策略

  • 登录完成后,浏览器 profile 留在服务器本地
  • 后续日常生成请求优先走无头模式以节省资源
  • 但 session/init 仍然是可见浏览器流程,所以远程桌面入口要保留
  • 服务器规格较小,避免同时跑多个重浏览器任务

对 Codex 的执行要求

  • 优先通过部署和运行环境解决问题,不要先改业务代码
  • 如果必须改代码,先停下来征求用户同意
  • 所有长任务都用后台方式启动,再轮询检查结果
  • 读取文本文件时按 UTF-8 / GBK 容错,不要基于乱码下结论
  • 安装依赖或下载资源时如果卡住,要检查并使用代理
  • 不要使用 destructive git 命令

最终验收标准

  • 项目后端在 Ubuntu 服务器可正常启动
  • 管理页可通过域名或端口访问
  • 远程桌面网页可通过浏览器访问
  • 点击“打开登录窗口”后,用户能在远程桌面网页里看到实际浏览器
  • 用户能在网页里亲手完成 Flow 登录
  • 用户能在网页里亲手完成 Doubao 登录
  • session/check 能返回登录就绪
  • 服务重启后登录态仍然保留在服务器本地

交付时应汇报给用户的信息

  • 管理页访问地址
  • 远程桌面网页访问地址
  • 后端健康检查地址
  • 当前登录验证结果
  • 是否已经配置开机自启
  • 是否还存在需要用户亲自处理的验证码 / 二次验证步骤