手持ちのアプリを erpc worker import でデプロイする

erpc worker import は、手持ちのアプリをそのまま取り込みます。アプリの erpc.toml を書くだけで、コードには一切手を入れません。
このページは、プレリリースの ERPC CLI v0.1.0-rc.4 について説明しています。

取り込んでデプロイする

取り込めるのは、今 systemd や Docker の下で動いている bot でも、別の言語で書いたサービスでもかまいません。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] に入ります。名前からシークレットに見えるもの、または値に資格情報を含むものは、それを保管するコマンドを示し、値は写しません
.env名前だけを読みます。ポート番号は例外です
PORT、API_PORT、Dockerfile の EXPOSE--port で指定しない限り、run.port になります。--health <PATH> を付けると、そのポートにヘルスチェックを加えます
GRPC_ENDPOINT、SHREDS_ENDPOINT など、データの回線が渡す設定[vars] から外します。deploy に付ける回線のフラグがこれらを設定します
wallet.json、id.json、*keypair.jsonerpc 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 つ 1 MiB まで。 ディレクトリの外へつながるリンク、パイプ、デバイス、それより大きいファイル、UTF-8 でないファイルは読まず、それぞれ読まなかったことを伝えます。
  • シークレットと見なした値は写しません。 資格情報は形で探すので、この検査は網であって証明ではありません。知らない形のシークレットは、ほかの値と同じように写されます。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 がバックアップします。
  • 取引用の鍵はファイルではなくパイプで届きます。 アプリの起動時に 1 回だけ、ERPC_WORKER_KEY_FD が示すファイルディスクリプタに 64 バイトで届き、公開鍵は ERPC_WORKER_PUBKEY に入ります。鍵ファイルを読むアプリは、その読み出し 1 か所を変える必要があります。変え方は pumpfun テンプレートの src/wallet.rs にあります。
  • アプリは 1 つのバイナリと、run.files に並べたファイルだけでできています。 実行中に開くほかのものは、すべてその一覧に入れておく必要があります。

次のステップ