使用 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 的 EXPOSErun.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 列出的檔案。它在執行時開啟的其他任何檔案,都必須列在該清單中。

後續步驟