@evolu/relay

中文文档
4.2.22发布于 2026/11/01MITES Module构建来源已验证

Evolu中继服务器

中文使用文档
文档目录6 节
  1. 使用npm运行
  2. 使用Docker运行
  3. 在服务器上运行
  4. 验证映像
  5. 重新启动
  6. 配置

Evolu继电器

Evolu Relay为Evolu应用程序提供同步和备份。这个包裹是 基于Node.js的引用中继。它被发布到npm @evolu/relay 和 到Docker Hub evoluhq/relay.

默认情况下,中继侦听端口4000,并将其SQLite数据库存储在端口4000中 这个 data 当前工作目录的目录。将应用程序指向 ws://localhost:4000/ 通过在Evolu配置中设置WebSocket传输。

使用npm运行

npx @evolu/relay

使用Docker运行

docker run -d --restart unless-stopped --log-driver local -p 4000:4000 -v evolu-relay-data:/app/data docker.io/evoluhq/relay:4

对于Docker Compose,请下载存储库的 docker-compose.yml, 设置相同的重启策略,然后运行 docker compose up 从 包含该文件的目录。

标签跟随npm包版本: 4.0.0, 4.0, 4, latest 为 最新的稳定版本。预发布版本只获得完整版本标签。

在服务器上运行

通过HTTPS服务的应用程序只能连接到a wss:// 继电器。存储库的 docker-compose.caddy.yml 把接力棒跑到后面 球童,它获取并更新a 让我们为您的域名加密证书。只有卡迪可以联系到 外面:它提供服务 wss:// 在443端口上,并使用端口80作为证书 挑战和重定向到HTTPS。

指向一个DNS名称,例如 relay.example.com,在服务器上使用Docker 安装从 码头工人的包, 其中包括Docker Compose,并开放端口80和443。然后跑在一个空 服务器上的目录:

curl -fsSL -o compose.yaml https://raw.githubusercontent.com/evoluhq/evolu/main/apps/relay/docker-compose.caddy.yml
echo "RELAY_DOMAIN=relay.example.com" > .env
docker compose up -d

将应用程序指向 wss://relay.example.com/,以及正常运行时间监视器 https://relay.example.com/health. 中继的数据库和凯迪的 证书保存在卷中,因此它们在重新启动后仍然有效。要升级,请运行 docker compose pull 和 docker compose up -d 在那个目录里。

继电器读出它的 EVOLU_RELAY_* 变量 配置 从 .env 太;运行 docker compose up -d 再换一次。离开 PORT 未设置,因为Caddy代理到端口4000。中继器接受任何符合以下条件的所有者 连接,所以任何找到它的人都可以存储数据,直到磁盘满; EVOLU_RELAY_MAX_OWNER_BYTES 限制每个所有者,而不是总数。

验证映像

每个映像都使用GitHub工件认证签名。与 GitHub CLI,检查该存储库是否为Docker 工作流在 main 建立一个图像,并打印它验证的摘要:

gh attestation verify oci://docker.io/evoluhq/relay:4.2.15 \
  --repo evoluhq/evolu \
  --signer-workflow evoluhq/evolu/.github/workflows/docker.yaml \
  --source-ref refs/heads/main \
  --format json \
  --jq '.[].verificationResult.statement.subject[] | "\(.name)@sha256:\(.digest.sha256)"'

要完全运行已验证的映像,请替换 docker.io/evoluhq/relay:4 在 这个 docker run 上面的命令,或者中继器 image 在撰写文件中,使用 印刷的参考资料,例如 docker.io/evoluhq/relay@sha256:…. 标签,例如 4 迁移到每个新版本,因此在迁移到每个新版本之前要对其进行验证。 供应链 解释了 认证能证明什么,不能证明什么。

重新启动

一个缺陷,一个继电器无法修复的错误,会使它关闭连接 并以代码1退出,因为它无法证明其共享状态是静止的 完好无损。在重启它的东西下运行它:Docker重启策略 上面的Compose文件,或者npm的systemd等服务管理器 包中。客户端重新连接并同步他们错过的内容。

配置

继电器上写着 PORT 和Relay-specific EVOLU_RELAY_* 环境变量:

变量默认的描述
PORT4000要侦听的TCP端口,也由托管平台提供。
EVOLU_RELAY_MAX_OWNER_BYTES没有限制每个所有者的存储配额,作为大小字面值,例如 10MiB.
EVOLU_RELAY_LOG_LEVELlog控制台级别,从 trace 来 silent. debug 也记录连接, trace 每个SQL查询。

在 debug,日志包括ownerid和被拒绝连接的url。在 trace,它还包括每个SQL查询的参数和结果行,其中 它们是每个所有者的写密钥和加密的更改。使用这些级别仅用于 调试,并使这些日志与中继的数据库一样私有。

配额值使用 ByteSizeLiteral,例如 0B, 512KiB,或者 1.5GiB. 空字节计数,例如 1048576 不被接受;使用 1MiB 代替。 如果没有每个所有者的存储限制,则不设置该变量,或者设置配额 适合您的部署。 0B 不允许存储字节;它不会禁用 配额。每个所有者配额不是对磁盘总使用情况的限制。

一个无效的 PORT或空的、畸形的或未知的 EVOLU_RELAY_* 变量, 使用格式化的验证错误停止中继。提供的值无效 永远不要退回到默认状态。 EVOLU_RELAY_PORT 不支持;使用 PORT.

PORT=4001 EVOLU_RELAY_MAX_OWNER_BYTES=10MiB npx @evolu/relay

对于正常运行时间监视器和负载平衡器,由中继应答 GET 和 HEAD 请求 /health 状态为200,而它的数据库文件可以读取和 状态为503。Docker健康检查请求启用它 PORT. 使用一个 固定的,非零端口在Docker; PORT=0 选择一个不可预测的端口 健康检查无法发现。 图像暴露端口4000,因此显式映射自定义端口:

docker run -d --restart unless-stopped --log-driver local -e PORT=4001 -p 4001:4001 -v evolu-relay-data:/app/data docker.io/evoluhq/relay:4

要添加授权或将中继集成到您自己的服务器中,请使用 createRelay API从 @evolu/nodejs 代替。这个包的 src/index.ts 是完整的例子。

版本与发布记录

@evolu/relay 共发布 36 个版本,首次发布于 2025/10/14;过去 12 个月发布了 29 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.2.22latest2026/11/012 天前
4.2.212026/10/304 天前
4.2.202026/10/294 天前
4.2.192026/10/295 天前
4.2.182026/10/286 天前
4.2.172026/10/1717 天前

其他发布通道:preview → 1.1.2-preview.0。

关于 @evolu/relay 的常见问题

@evolu/relay 是什么?

Evolu中继服务器

如何安装 @evolu/relay?

在项目目录运行 npm install @evolu/relay,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 evolu-relay,可以用 npx evolu-relay 直接运行。

@evolu/relay 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/evolu__relay 是否存在。

@evolu/relay 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@evolu/relay 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.20.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@evolu/relay 可以商用吗?

@evolu/relay 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@evolu/relay 还在维护吗?

最新版本 4.2.22 发布于 2026/11/01(2 天前);至今共发布 36 个版本,其中过去 12 个月发布了 29 个;首次发布于 2025/10/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。