使用 erpc worker 运行、监控应用并为其付费

erpc worker status 显示您的应用是否在运行,以及其按小时计算的费用。每次启动都会先显示其价格,erpc worker delete --release-server 会结束应用按小时使用的 gRPC、Shreds 和 Unlimited RPC,然后结束其按小时计费的服务器。
本页介绍 ERPC CLI v0.1.0-rc.4,这是一个预发布版本。

检查应用

$ erpc worker status --env prod
api-prod on 203.0.113.10: running, release 20261101T093000Z-1a2b3c4d, pid 4217, up 2h 14m
  current 20261101T093000Z-1a2b3c4d, previous 20261028T171500Z-9f8e7d6c, 2 releases kept
  WAF: listening on port 8080, forwarding to 127.0.0.1:3000, since 2026-11-01T09:30:12Z; requests 5120, forwarded 5043, blocked 71, connections refused 12, app errors 6, addresses banned now 1
  `erpc worker delete --release-server --env prod` ends what this app is charged for.
status 显示应用处于锁定状态还是正在运行、哪个 release,以及从何时开始。登录后,它还会显示该环境按小时计算的费用,每个项目附带您的账户为其支付的价格,以及您账户的 Credit 及其可维持的时长。--json 在 hourly.charged 下包含相同内容。
不在账户计费项目中的项目会被说明为不在其中,而不会被称为已结束,因为该列表可能比启动晚一分钟。没有会话时,或无法读取您账户的计费项目时,status 会说明已记录的内容。

控制应用

命令作用
erpc worker logs -n 200, logs -f应用和 agent 的日志。行中的控制字符会打印为 ?
erpc worker start运行应用,worker 处于锁定状态时会发送密钥
erpc worker stop, stop --lock停止应用;--lock 还会将密钥从内存中清除
erpc worker restart停止应用后再次启动
erpc worker releases服务器上保留的 release(deploy.keep_releases)
erpc worker rollback, rollback --to <release>回到上一个 release,或指定的 release。当该 release 的健康检查端口现已被另一个正在运行的 worker 占用时,会被拒绝,正在使用的 release 保持不变
erpc worker api <PATH>从本机读取应用的 API,而 API 仍在服务器的 loopback 上(更改时使用 -X POST、-d '{...}')
erpc worker trades [--profit]应用在其服务器上的交易
erpc worker list本机上的应用及各自的部署位置;--prune 会移除其 erpc.toml 已不存在的应用
应用的 API_TOKEN 在此读取,通过标准输入到达服务器,不出现在任何命令行上,也不出现在任何日志中。每个 worker 命令都接受 --env <name>(默认为 default)和 --json,但 secret unlock 和 secret lock 除外:它们针对的是本机的密钥库而不是某个应用,不接受 --env。从任何位置运行时,命令会按 erpc 所知的名称找到其应用;secret put、secret rm、key import、firewall allow 和 firewall deny 只通过 --dir 指定应用。

按小时计费如何运作

  • 每次启动都会先显示其价格。在终端中,只有在得到确认后才会启动;使用 --yes 时,写明要启动什么的命令行本身就是确认。
  • 按小时计费的产品从 ERPC Credit 中支付,ERPC Credit 需要预先购买,Credit 不足以支付的启动会被拒绝。价格请见价格和 ERPC Web Dashboard。
  • 新的 VPS 一旦被命名就会被记录,此时它尚未就绪。下一次部署会沿用它,而不是再购买一台。
  • 对于 deploy,没有得到响应的启动会被再次发送,绝不会作为新的启动发送。其请求键保留在记录中([env.<name>.starting]),因此再次运行同一命令会发送同一请求。在某些响应之后,它会一直保留,直到您手动将其删除(erpc 无法记录的购买)。erpc worker run 不保留记录,因此其下一次运行会发出新的请求。
  • 一次只部署一个环境。同时启动的同一环境的两次部署可能会购买两份,这不受支持。
  • 一条线路是否仍然存在,取决于账户正在为哪些项目付费。erpc 从不结束不按小时计费的线路:请在仪表盘中结束它。

移除应用

erpc worker delete 移除 worker。erpc worker delete --release-server 还会结束其线路,然后结束其按小时计费的服务器。无法结束的内容会保留在记录中,不按小时计费的线路会被列出名称,以便在仪表盘中结束。
  • 普通删除会拒绝已购买但从未连接上的 VPS,因为删除会在其仍在计费时遗忘它。对已连接上的按小时计费的 VPS 进行普通删除,会在其仍在计费时将其从记录中移除,并对此发出警告。
  • 使用 --forget 时,erpc 不会尝试连接已无法连接的服务器,--forget-line <id> 将在 erpc 之外结束的线路从记录中移除。

从服务器测量 RPC 延迟

erpc worker bench 从环境的服务器为 RPC 调用计时:ERPC 的共享 RPC、其 Unlimited RPC,以及其他任意 RPC,并排比较。服务器上的 agent 为每次调用计时,因此这些数字就是应用实际得到的。
bash
erpc worker bench                                  # getSlot: shared RPC vs the Unlimited RPC
erpc worker bench --rounds 300 --interval 150      # for a plan that limits calls per second
erpc worker bench --url other=op://<vault-id>/<item-id>/url   # another provider's RPC
  • --method 接受 getSlot、getBlockHeight、getLatestBlockhash 或 getHealth。
  • --no-shared 不包括共享 RPC。--url 的值可以是 URL 本身、op://…、keychain:… 或 keystore:… 引用(指向保存着带有密钥的 URL 的位置;绝不能是交易密钥的条目,这样的引用会被拒绝),或 -(从标准输入读取,或提示您不显示地输入)。超过六个端点会被拒绝。
  • bench 会打印 p50、p90、p99、最小值和最大值、失败情况及第一个失败原因,以及在同一轮中每个响应落后于最新响应多少个 slot。
  • 密钥只通过标准输入到达服务器,表中显示 scheme、主机和端口。

备份应用的状态数据

erpc worker backup on 每天将应用的状态数据备份到 ERPC Global Storage,由 restic 加密,时间为服务器时间的 --at,并在其后 30 分钟内进行。需要一个存储方案(erpc storage buy 5)。
  • 备份的内容是应用的状态数据,即 /var/lib/private/erpc-worker-<id>。release 不会被备份,因为部署会将它们放回。Redis 和 PostgreSQL 的数据不在备份范围内。
  • 服务器无法删除快照。它从不持有 erpc 会话、账户的管理密钥或其主密码。
  • 被接管的服务器可以读取账户中每台机器的快照,包括本机的快照;在 off 之后仍保留仓库的密钥,而 restic 从不更改该密钥;以另一台机器的名义添加快照,因此发生这种情况后,请检查 restore latest 选中的是什么;以及填满账户的存储,从而使每台机器的备份都停止。erpc worker backup off 会首先撤销服务器的访问密钥,无论服务器是否响应。
  • restic 按文件当前的样子复制,而此时 worker 仍在运行,因此数据库可能需要单独的转储才能恢复到一致的状态。服务器关机期间错过的运行会在服务器恢复后运行。
  • erpc worker backup off、status 和 now 分别停止备份、报告备份情况和运行备份。快照在 off 之后仍然保留,erpc backup prune --host 会精简旧的快照。
在本机上运行 erpc backup init 之后,从本机恢复:
bash
erpc backup restore latest --from-host erpc-worker-<id>-<tag> --path /var/lib/private/erpc-worker-<id> --target ./restored

多个环境和多台机器

  • 一台服务器上的多个 worker 各自作为自己的单元运行,共用服务器的防火墙表,并且各自只开放自己的端口。
  • 一个应用可以有多个环境([env.staging]、[env.prod]),每个环境有自己的服务器和线路。
  • 环境可以将其服务器信息保存在 1Password 中,而不是 erpc.toml 中。这样,任何登录到该保险库并拥有应用仓库的机器都可以运行所有命令;此类应用中的 keychain: 和 keystore: 引用会收到警告,因为其他机器无法读取它们。新环境会将其信息保存在 1Password 中,前提是 erpc login 也将会话保存在那里;deploy --vault <vault-id> 指定另一个保险库,deploy --inline 将信息保存在 erpc.toml 中。