---
title: "使用 erpc worker import 部署您已有的应用"
description: "erpc worker import 读取应用的目录并写入其 erpc.toml，Cargo 包或任何语言的 Linux 二进制文件都无需修改代码即可部署。"
canonical: "https://erpc.global/zh/doc/erpc-cli/worker-import/"
locale: "zh"
---

# 使用 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` 列出的文件**。它在运行时打开的其他任何文件都必须在该列表中。

## 后续步骤

- [密钥与 Secret](https://erpc.global/zh/doc/erpc-cli/worker-secrets/)：保存 `import` 扣留的设置以及交易密钥。
- [防火墙与 WAF](https://erpc.global/zh/doc/erpc-cli/worker-firewall-and-waf/)：选择谁可以访问应用。
- [worker 指南](https://github.com/elsoul/erpc-cli/blob/v0.1.0-rc.4/docs/worker.md)：`import` 读取的每个文件，以及它查找的凭据形态。
