跳转到内容

多实例 / 多小组

真遇中,一个 server 实例 = 一个小组。同一台机器上可以跑多个实例来承载多个小组;它们通常共用同一个注册处,从而共享账号、好友与公开组目录。

字段 说明
server_id 实例 / 服务器 id,全局唯一
listen 监听地址与端口,各实例不得重复
data_dir 数据目录,各实例独立

其余字段(小组名、对外地址等)按实例分别设置。为每个实例各写一份配置文件即可。

实例一(server-1.toml):

owner_public_key_hex = "<持有者公钥 hex>"
server_id = "group-one"
name = "第一小组"
listen = "127.0.0.1:8443"
data_dir = "/srv/gather/group-one"
public_endpoint = "https://one.example.com"
registry_url = "https://registry.example.com"

实例二(server-2.toml):

owner_public_key_hex = "<持有者公钥 hex>"
server_id = "group-two"
name = "第二小组"
listen = "127.0.0.1:8444"
data_dir = "/srv/gather/group-two"
public_endpoint = "https://two.example.com"
registry_url = "https://registry.example.com"

两个实例可指向同一个注册处;各自可在公开组目录中被解析与搜索(取决于 register / public)。

owner_public_key_hex 是小组持有者身份的 ed25519 公钥(hex),它决定了谁拥有最高权限(如创建邀请)。

客户端对导出身份公钥的支持随公开发布提供(即将开放)。届时将持有者身份的公钥填入配置、重启实例,即可用该身份在客户端内管理该小组。

持有者是小组的最高权限身份,请务必自行妥善保管其恢复凭证,不要使用来源不明的密钥。

两种邀请链接形式:

形式 依赖
指定 server(经注册处解析地址) 该实例已上报注册处,且 register=true
指定 server + endpoint=<直连地址> 不依赖注册处,直接指向该实例

当同一浏览器 / 网络环境下存在多个实例时,建议使用带 endpoint 的链接,避免被默认实例接管。

现象 原因 处理
Address already in use 端口冲突 为不同实例设置不同的 listen
加入后连到了另一个实例 邀请链接缺少 endpoint 使用带 endpoint 的直连链接
改动 server_id 后「数据没了」 新 id 相当于新建实例 改回原 id,或连同 data_dir 一起迁移
公开组目录搜不到某个实例 public=false 或注册处不可达 置 true 并确认注册处可达
浏览器直连某实例报跨源 未把页面来源加入该实例白名单 在各实例的 cors_allowed_origins 中加入来源