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_* 环境变量:
| 变量 | 默认的 | 描述 |
|---|---|---|
PORT | 4000 | 要侦听的TCP端口,也由托管平台提供。 |
EVOLU_RELAY_MAX_OWNER_BYTES | 没有限制 | 每个所有者的存储配额,作为大小字面值,例如 10MiB. |
EVOLU_RELAY_LOG_LEVEL | log | 控制台级别,从 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
是完整的例子。