---
title: "使用 erpc worker import 部署您已有的應用"
description: "erpc worker import 讀取應用的目錄並寫入其 erpc.toml，讓 Cargo 套件或以任何語言構建的 Linux 二進位檔無需修改程式碼即可部署。"
canonical: "https://erpc.global/zh-tw/doc/erpc-cli/worker-import/"
locale: "zh-tw"
---

# 使用 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 套件**以 `cargo build --release` 構建，與 `init` 建立的應用相同。除非 `--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-tw/doc/erpc-cli/worker-secrets/)：保存 `import` 未寫入的設定，以及交易金鑰。
- [防火牆與 WAF](https://erpc.global/zh-tw/doc/erpc-cli/worker-firewall-and-waf/)：選擇誰可以連到應用。
- [worker 指南](https://github.com/elsoul/erpc-cli/blob/v0.1.0-rc.4/docs/worker.md)：`import` 讀取的每個檔案，以及它尋找的憑證形式。
