跳转到内容

连接到远程服务器

每个客户端都只是 cc_server 之上的渲染器,而数据由它掌控。桌面端可以在自身内部运行一个服务器实例;app.usectrl.dev 上的 Web 应用则不行,因为浏览器标签页无法托管服务器。无论哪种情况,本指南都会让客户端指向一个运行在别处的服务器——一台小机器、一台云 VM,或一台构建服务器。

  • 一个正在运行的 cc_server。如果你还没有,请参阅运行无界面服务器。
  • 要么是服务器生成的三个配对值——服务器 URL(ws://…/rpc 或 wss://…/rpc)、设备 ID 和配对密钥——要么是工作区管理员给出的一次性邀请码。兑换邀请码会为你预配用户、记录你的成员资格,并为你生成本客户端的凭据,因此你完全不必接触设备 ID 或密钥。

本地服务器无需任何额外配置:ws://localhost:9030/rpc 在桌面端和浏览器中都能正常工作,因为浏览器把环回地址视为可信来源。

另一台机器上的服务器则不同。app.usectrl.dev 通过 HTTPS 提供,因此浏览器只会用自己已经信任的证书去建立 wss:// 套接字——而且 cc_server 本身也拒绝在没有 TLS 的情况下绑定非环回地址。请为它提供以下之一:

  • 直接提供证书,使用 --tls-cert 和 --tls-key
  • 在前面部署一个负责终止 TLS 的反向代理,并以 --insecure 启动服务器(代理之后为明文,仅限可信网络)
  • 由隧道或 VPN 提供证书——Tailscale、cloudflared 或类似方案。设置 → 服务器 → 连接与状态在共享此服务器下提供了内置隧道的启用选项。

服务器端有两项设置很容易被忽略。在代理、NAT 或隧道之后,请把 --public-url 设为客户端实际应连接的地址——它默认取本地绑定地址,因此不设置的话客户端会尝试错误的主机。另外,如果你自行托管 Web 构建的副本,请把它的源加入 --allowed-origins;该选项默认只允许 https://app.usectrl.dev。环回地址和原生客户端始终被允许。

全新安装时:

  1. 启动 Control Center。首次运行界面会询问 Control Center 应如何运行?
  2. 不要选择在此应用中运行,而是填写连接字段:服务器 URL,以及邀请码,或设备 ID 与配对密钥。
  3. 点击连接。Control Center 会连接服务器,并进入工作区收件箱。

对于已经在运行自己服务器的桌面端:

  1. 打开设置 → 服务器 → 连接与状态。
  2. 点击添加服务器。输入服务器 URL(wss://host:9030/rpc),以及邀请码,或设备 ID 与配对密钥。URL 字段的后缀按钮会在你的局域网或 tailnet 上发现 cc_server 实例。
  3. 点击连接,然后在新服务器所在行点击切换。

切换是实时的:应用会就地围绕新会话重建,无需重启。如果连接失败,你会留在当前服务器上并看到错误。你当前所在服务器的那一行没有切换操作;本地服务器是第一行,标记为在此应用中运行。

切换之后,桌面端不再持有数据库。每个界面都通过 WebSocket 经由远程服务器读写。

Web 构建始终是远程的。

  1. 打开 app.usectrl.dev,或你自己的 Web 构建副本。
  2. 输入服务器 URL,以及邀请码,或设备 ID 与配对密钥。
  3. 客户端会连接服务器,并渲染出与桌面端相同的界面。

如果 URL 中包含配对深度链接,这些字段会预先填好。配对密钥位于 URL 的片段中,浏览器绝不会把它发送给托管页面的服务器,因此静态托管方永远看不到它。

Web 客户端读写的是与桌面端相同的服务器,但有几个功能需要原生窗口或本机自带的设备:

  • 没有操作系统通知弹窗、通知声音或常驻横幅栏(应用内通知中心仍然可用)
  • 在添加服务器对话框中无法发现局域网或 tailnet 上的服务器
  • 没有应用内文章阅读器——新闻流文章会在新标签页中打开
  • 无法重新运行会议摘要,也无法取消正在处理的摘要

有两项并非缺失,只是行为不同。会议录制在浏览器中可用,会采集你的麦克风,以及带音轨的屏幕共享。在 IDE 中打开同样可用,但它会请求服务器在_服务器_的显示器上启动编辑器,因此在没有安装任何编辑器的无界面主机上,该按钮会自行隐藏。

  • 连接超时:服务器必须能从客户端访问。检查绑定地址(--bind any)、端口是否开放,以及 --public-url 是否指向客户端实际能连接的地址。在开放互联网上,TLS 是强制性的——除非服务器是在代理之后以 --insecure 启动的,否则明文的非环回绑定会在启动时被拒绝。
  • 浏览器拒绝连接,但原生客户端正常:浏览器的源不在服务器的 --allowed-origins 列表中。默认只允许 https://app.usectrl.dev(外加环回地址)。
  • 配对密钥被拒绝:在服务器上重新运行 cc_server pair 以轮换该设备的密钥,然后输入新的密钥。被撤销的设备会发现自己的凭据已不存在,因此失败即关闭;撤销会在几秒内断开活动会话。
  • 工作区错误:工作区是 URL 的一部分(/workspaces/:workspaceId/…),并随每次调用一同传递,因此在一个客户端中切换工作区只会改变你自己的视图。你只能访问自己所属的工作区——其他任何工作区都会被以 “Not a member of this workspace” 拒绝。参见工作区与隔离。