使用 erpc worker import 部署您已有的应用

erpc worker import 按原样接收您已有的应用。它写入应用的 erpc.toml,不修改应用的任何代码。
本页介绍 ERPC CLI v0.1.0-rc.4,这是一个预发布版本。

导入并部署

应用可以是目前在 systemd 或 Docker 下运行的机器人,也可以是用其他语言编写的服务。import 读取应用的目录,并写入描述该应用的 erpc.toml。应用中不会写入其他任何内容,不会运行其中的任何东西,也不会修改其代码。erpc 会像 init 一样,将应用加入自己的列表。
bash
cd my-bot                                   # a Cargo package
erpc worker import                          # writes erpc.toml from what is there
erpc worker check                           # what it describes, and what is missing
erpc worker deploy                          # your VPS, or a new hourly one

cd my-go-service && make linux              # any other toolchain: build the Linux binary your way
erpc worker import --binary dist/service --port 8080 --health /healthz
erpc worker deploy
  • Cargo 包与 init 创建的应用一样,使用 cargo build --release 构建。除非 --name 另行指定,应用以包名命名;包含多个二进制文件时,用 --bin 选择其中一个。工作区根目录会被拒绝:请将 import 指向包本身。
  • 在任何地方、用任何语言构建的 Linux 二进制文件,以同样的方式通过 --binary <PATH> 部署,并按原样交付。erpc 读取其文件头,拒绝服务器无法运行的二进制文件:macOS 或 Windows 二进制文件、脚本、共享库、被截断的文件,或架构与 build.target 不同的文件。二进制文件必须是静态的,或者链接 glibc 且其加载器位于常规路径。它是应用的一个文件:以该名称存在、却指向应用目录之外的链接会被拒绝。二进制文件不可用时,部署会在购买服务器之前停止。如果部署需要带上某项修改,请先重新构建二进制文件。

import 读取的内容

目录中的内容import 如何处理
.env.example 及类似的示例文件每个名称在可以作为设置时成为一项设置:不由大写字母、数字和 _ 组成(且不以数字开头)的名称,或 erpc 或服务器自己设置的名称(ERPC_WORKER_…、LD_…),会被略过。普通名称连同示例中的值写入 [vars]。从名称看像 Secret,或者值中带有凭据的名称,会注明用于保存它的命令,其值不会被复制
.env只读取名称,端口号除外
PORT、API_PORT、Dockerfile 的 EXPOSE写入 run.port,除非 --port 指定了它。--health <PATH> 在该端口上添加健康检查
GRPC_ENDPOINT、SHREDS_ENDPOINT 以及数据线路提供的其他设置不写入 [vars]:由 deploy 上对应线路的标志设置
wallet.json、id.json、*keypair.json会注明,并附上 erpc worker key import <FILE> --wipe,该命令将密钥保存到 erpc worker 读取的位置,并擦除该文件
包含 Redis 或 PostgreSQL 的 compose 文件写入 [services],由 deploy 将它们部署到服务器上
Dockerfile、compose 文件本身不用于运行应用:erpc worker 以经过加固的 systemd 单元自行运行二进制文件
import --chain 指定应用所针对的链,默认为 solana。

import 如何读取目录

该目录可能是您一分钟前刚克隆的,因此 import 会谨慎地读取它。
  • erpc.toml 是新建的。该路径上已存在任何东西时,import 会拒绝:它从不覆盖文件,也从不通过链接写入。
  • 它读取目录内的普通文件,每个最大 1 MiB。指向目录之外的链接、管道、设备、更大的文件以及非 UTF-8 文件不会被读取,并会逐一说明。
  • 它当作 Secret 的值都不会被复制。它按形态查找凭据,因此这一检查是一张网,而不是证明:形态未知的 Secret 会像其他值一样被复制。提交 erpc.toml 之前,请您自己阅读一遍。
  • erpc worker check 警告的种类少于 import 扣留的种类。对于 [vars] 下路径中带有密钥的 RPC URL 或助记词,它不会提示:请使用 erpc worker secret put 保存这些内容。

应用在服务器上看到的环境

  • 设置以环境变量的形式送达,[vars] 和 [secrets] 都是如此。服务器上没有 .env,使用 dotenv 库读取 .env 文件的应用仍能正常工作。
  • 应用自己的目录是只读的。它写入的文件放在 ERPC_WORKER_STATE_DIR 所指定的目录下(也是它的 HOME),部署会保留该目录,erpc worker backup 会备份该目录。
  • 交易密钥经由管道送达,而不是放在文件中:应用启动时,在 ERPC_WORKER_KEY_FD 所指定的文件描述符上一次性送达 64 字节,公钥则在 ERPC_WORKER_PUBKEY 中。读取密钥文件的应用需要修改这一处读取;pumpfun 模板的 src/wallet.rs 展示了做法。
  • 它是一个二进制文件加上 run.files 列出的文件。它在运行时打开的其他任何文件都必须在该列表中。

后续步骤