erpc worker で最初のアプリをサーバーにデプロイする
erpc worker で Rust の小さな HTTP API を作り、自分のマシンで動かして、4 つのコマンドでサーバーにデプロイします。このページは、プレリリースの ERPC CLI
v0.1.0-rc.4 について説明しています。erpc worker(別名 erpc w)は、アプリを Linux ネイティブのバイナリにコンパイルし、ERPC の VPS、新しく開始する時間課金の VPS、または自分のサーバーで動かします。動かすのは堅牢化した systemd ユニットの下で、間に Docker もランタイムも挟みません。正常に起動しなかったリリースは、1 つ前のリリースにロールバックされます。1 台のサーバーで複数のアプリを、それぞれ自分のポートで動かせます。アプリについての設定はすべて、アプリのルートにある
erpc.toml に入ります。このファイルはシークレットを含まないので、コミットできます。前提条件
- ERPC アカウント。このマシンで
erpc loginでログインしておきます(ログインと鍵)。 - ERPC Credit。新しい時間課金の VPS に要ります。時間課金の商品は、先に購入しておく ERPC Credit から支払われ、残高で足りない開始は受け付けられません。料金は料金表と ERPC Web Dashboard にあります。
- SSH の鍵がこのマシンにあること。
ssh-keygen -t ed25519で作るか、手持ちの鍵ならerpc config set ssh_key <path>.pubで指定します。 - Linux 向けにビルドする手段。Mac や Windows からは、サーバー向けの Rust のターゲット(
rustup target add x86_64-unknown-linux-gnu)、zig(macOS ではbrew install zig)、cargo-zigbuild(cargo install cargo-zigbuild --locked)が要ります。サーバーと同じ種類の Linux マシン(ERPC のサーバーはすべて x86-64)からなら、cargo のほかには何も要りません。クロスビルドのツールがない場合、アプリはこのマシン自身のツールチェーンでビルドされ、そのバイナリはリンクした glibc を必要とします(buildとdeployがその版を示します)。ツールがあれば、glibc 2.31 以降向けにビルドされます。
HelloWorld をデプロイする
HelloWorld は Rust で書かれた小さな HTTP API で、鍵もシークレットもデータの回線も要りません。
GET /、GET /hello/{name}、GET /healthz に応答します。bash
initは、./hello-worldにアプリをerpc.tomlごと作ります。runはアプリをビルドして自分のマシンで動かすので、先に curl で呼んで確かめられます。deployはサーバー向けにビルドしてデプロイします。お金のかかるものは、1 時間あたりの料金・残高・その残高で持つ時間を先に表示し、ターミナルでは「はい」と答えた後にだけ開始します。apiは、デプロイしたアプリの API を自分のマシンから呼び出します。API はサーバーのループバックに置いたままです。
erpc worker check はアプリに足りないものを一覧にし、足りないものがあれば deploy は何かを購入する前に止まります。erpc worker build はビルドだけを実行します。サーバーを購入する前に、ビルドが失敗するかどうかを確かめる方法です。テンプレートを選ぶ
erpc worker init が聞くのは 1 つだけ、何を作るかです。矢印キーで選びます。- HelloWorld は、最初に始めるためのテンプレートです。
- HFT と pumpfun-bot は、今はどちらも pumpfun テンプレートから作られます。ValidatorsDAO/solana-stream から移植した、pump.fun(PumpSwap)の取引 bot です。
--template hft(または helloworld、pumpfun-bot、テンプレートの ID)を付けると選択画面を飛ばし、--name でアプリに名前を付けます。名前がなければ、アプリは選んだものにちなんで名付けられます(hello-world、hft-bot、pumpfun-bot)。同じ名前のディレクトリがあるときは、人が選んでいれば -2、-3 と続く名前になり、スクリプト(--yes、--json、ターミナルなし)ではエラーになります。聞く相手がおらず --template もなければ、HelloWorld が作られます。取引 bot は、動かす前に鍵といくつかの設定が要ります。その順番は次のとおりです。
bash
init は、作ったアプリに合わせてこの順番を表示します。鍵とシークレットをどこに置くかは鍵とシークレットで説明しています。サーバーを選ぶ
deploy は、次のうち最初に当てはまるものを使います。- アプリの
[env.<name>]にすでに書かれているサーバー --vps <id>。アカウントの ERPC の VPS--new-vps。このマシンのタイムゾーンから見て最も近いリージョンにある、最も安い時間課金の VPS(--regionと--planで別のものを選べます)--host <address>。自分のサーバー。systemd、nftables、sudo、/usr/bin/python3の Python 3 がある Ubuntu か Debian で、root か、パスワードなしで sudo できるユーザーで接続できること- どれでもなければ、ターミナルではアカウントの稼働中の VPS が一覧で表示され、最後に「新しく開始する」が並びます
自分のサーバーでは、ワーカーのファイアウォールが SSH とアプリのポート以外の受信接続をすべて落とします。ほかのサービスを提供しているサーバーは使わないでください。
スクリプトやエージェントからデプロイする
スクリプトや、
erpc ai のようなエージェントには、答えるためのターミナルがありません。2 つのフラグを付ければ、それでも作業を進められます。bash
--yesは、コマンドが名指す時間課金の商品(--new-vps、--grpc、--shreds、--unlimited)それぞれの料金の確認に答えます。erpc がまだ鍵だけでログインする形にしていないサーバー(新しいサーバーか、--vps <ID>で指定したサーバー)への最初のログインにも答えます。このとき erpc はサーバーのパスワードで 1 回だけログインし、自分の鍵を置いて、パスワードでのログインを無効にします。--yesもターミナルもなければ、開始は何も購入する前に終了ステータス 3 で断られます。- 自分のサーバーの中から選ぶには、今も人が要ります。 サーバーは
--new-vps、--vps <ID>、--hostのどれかで指定してください。 --prepareは、取引用の鍵もシークレットも要らない作業をすべて済ませ、何も開始・停止・再起動しません。次にターミナルでerpc worker deployを実行すると、鍵とシークレットを渡してアプリを開始します。取引用の鍵は、ターミナルにいる人のためにだけ読み出されます。
アプリを gRPC・Shreds・Unlimited RPC につなぐ
ERPC の時間課金の回線は、サーバーをアドレスで受け入れ、トークンを取りません。
deploy にフラグを 1 つ付けると、そのサーバー向けに回線が 1 つずつ開始し、アプリはそのエンドポイントを設定として受け取ります。--grpc-plan、--shreds-plan、--unlimited-planでプランを指定しなければ、各回線はその種類で最も安いプランになります。- Unlimited RPC は専有のサーバーで動き、用意に最大 45 分かかります。
sendTransactionと、短い一覧の読み取りメソッドに応答し、getProgramAccountsとgetTokenAccountsByOwnerには応答しません。エンドポイントは素の HTTP(TLS なし)で、許可リストに入れたアドレスだけを受け入れます。
自分のマシンで動かすときの回線
erpc worker run も --grpc と --shreds を受け付けます。アプリをサーバーに載せる前に、ここで本物のデータを相手に試すためです。- アドレス: 回線が受け入れるのは、このマシンのパブリック IPv4 アドレスで、
--ipで渡します。erpc が自分で調べることはありません。 - 購入: 新しい回線を購入するのは、ターミナルで料金を表示した後だけです。
runには--yesがありません。 - 利用終了: 実行が終わると、時間課金の回線はそれぞれ確認の後に利用を終了します。
--keep-linesを付けると回線は残り、課金も続きます。ほかの終わり方(ターミナルを閉じた、Ctrl-C を 2 回押した)をした場合、回線は残り、課金されます。 - 数値: ここでアプリが測る値には、このマシンから回線までの距離が含まれます。そのため、回線の近くのサーバーで動く同じアプリより遅くなります。
次のステップ
- アプリの取り込み: 手持ちのアプリを、言語を問わずデプロイします。
- 鍵とシークレット: 取引用の鍵とシークレットを、サーバーのディスクに置かずに扱います。
- ファイアウォールと WAF: 公開する API を WAF の後ろに置きます。
- 稼働状況と課金: アプリを見守り、1 時間あたりの費用を確かめます。






