8. 远程 / SSH / HPC 部署配方

很多时候,数据和算力在远程服务器或 HPC 上,而你想在本地笔记本操作。本章给出三种典型场景的可直接复制的命令配方。

先记住一个关键区分:kernel(算力)跑在哪台机器,和你从哪台机器操作 UI,是两件独立的事。下面的方案就是在权衡这两者。

场景 A:本地笔记本 + 浏览器

数据和分析都在本机,最简单:

mkdir -p ~/my-analysis && cd ~/my-analysis
omicos login            # 邮箱 / 密码
omicos serve            # 监听 127.0.0.1:5055,自动开浏览器到 app.omicos.cn

适合:个人电脑上的日常分析。

场景 B:纯终端 TUI(无图形界面的 HPC)

SSH 进了一台没有图形界面的 HPC 登录节点,全程在终端里搞定——登录和聊天都不需要浏览器:

omicos login            # 邮箱 / 密码,纯终端登录(无需浏览器)
cd ~/my-analysis
omicos cli              # 进入终端聊天界面

如果不方便在这台机器输入密码,可改用 omicos cli login 设备码配对,在另一台已登录 omicOS 的设备上确认配对码。

适合:纯命令行环境、防火墙严格、不方便开浏览器隧道的 HPC。

场景 C:服务器跑分析,笔记本浏览器看

这是最常见也最值得讲清楚的场景。有两种走法。

方法 1:SSH 端口转发(推荐,kernel 重活首选)

让本地浏览器通过 SSH 隧道直连服务器上的 5055 端口,kernel 调用全程留在服务器内部,零云端中继

# 在笔记本上建立隧道
ssh -L 5055:127.0.0.1:5055 user@sherlock.stanford.edu

# 在同一个 SSH 会话里启动 omicos
cd ~/my-analysis
omicos serve --no-browser

# 回到笔记本,浏览器打开 https://app.omicos.cn
# 网页端会自动找到被转发过来的本地 5055 端口
  • 优点:plot、变量详情、kernel 执行都走本地隧道,带宽和延迟最低。
  • 代价:必须保持那个 SSH 窗口开着。SSH 一断,浏览器访问 localhost:5055 就会 connection refused
  • 官方建议:kernel 重活(大数据、频繁画图)走这条路。

方法 2:纯云端中继(免 SSH,跨机器即插即用)

只要服务器上的守护进程已登录,云端中继就是自动的——不需要任何额外 flag。登录后 omicos serve 会主动 outbound 拨一条 wss 到 wss://auth.omicos.cn/ws/process 并注册自己。你从任意浏览器打开网页端、在进程选择器里选中这台实例,云端就会把聊天 / UI 请求沿这条 socket 下推,守护进程再把它们打到自己的本机 runtime(127.0.0.1:5055,kernel 就在那里),并把响应沿同一条 socket 回传:

# 一次性前提:服务器上先登录
omicos login

# 服务器上启动(无需 SSH 隧道,也无需 --upstream-base-url)
cd ~/my-analysis
omicos serve --no-browser

# 笔记本上用任意浏览器打开 https://app.omicos.cn(需同一账户)
# 在进程选择器里选中 sherlock 那台实例 → 云端 ProcessHub 中继 kernel 调用
  • 优点:零网络配置,换任何一台能上网的机器都能接入。
  • 代价:plot / 变量详情 / kernel 执行都经 wss://auth.omicos.cn 中继,带宽吃在云端,延迟更高
  • 建议:偶尔查看、轻量交互用它;重度分析还是走方法 1。

不要把中继归因于 --upstream-base-url 启用中继的唯一条件是守护进程持有 process_token(来自 omicos login,或 OMICOS_PROCESS_TOKEN 环境变量)——与 --upstream-base-url 无关。--upstream-base-url 只配置本地一个 HTTP 代理回退(把未匹配的 /api/* 转发给后端,即云同步的 escape hatch),不决定 kernel 跑在哪,正常情况下也不需要手动传。kernel 默认在本机 5055,由 --kernel-base-url 单独控制。

让进程在后台长期存活

服务器上你通常希望 omicos 在你断开 SSH 后继续跑。三种常见做法(都配 --no-browser):

# nohup
nohup omicos serve --no-browser > omicos.log 2>&1 &
disown

# tmux
tmux new-session -d -s omicos \
  'cd ~/my-analysis && omicos serve --no-browser'

# screen
screen -dm -S omicos bash -c \
  'cd ~/my-analysis && omicos serve --no-browser'

systemd 服务的话,ExecStart 写:

ExecStart=/usr/local/bin/omicos serve --no-browser

(omicos 检测到非 TTY 环境会自动不画仪表盘、日志走 stderr,适配 systemd journal。)

用 cli 远程挂载到云端进程

如果你想在本地终端里直接挂到远程进程上聊天,用 omicos cli --process

omicos cli --process local-<远程workspace_id>

这样本地 TUI 直接操作远程那台机器上的分析进程。

健康检查与冒烟测试

不管哪种部署,都可以用这套命令确认服务正常:

curl -sS http://127.0.0.1:5055/health
# 期望 HTTP 200,返回 JSON:
# {"service":"omicos-core","status":"ok","version":{"semver":"0.2.x", ...}}

curl -sS http://127.0.0.1:5055/api/process/info | python3 -m json.tool
# 期望 HTTP 200,形如:
# {"name":"OmicOS Core","runtime":"rust","version":"0.2.x", ...}
# 注意:响应里没有 "status" 字段;未登录 / 终端启动时 id、process_id、process_name 为空串

一个注意点:账户切换会触发自愈重启

如果在一个工作区里切换登录账户,云端会以 WebSocket 关闭码 4403 通知,omicos 会旋转 workspace_id 并自动重启自己。这看起来像崩溃,实际是预期的恢复行为。代价是会话同步的高水位被清空,新账户下会话列表可能显示为空(本地旧会话文件仍在)。详见故障排查

results matching ""

    No results matching ""