erpc worker ile ilk uygulamanızı bir sunucuya dağıtın

erpc worker ile Rust'ta küçük bir HTTP API oluşturun, makinenizde çalıştırın ve dört komutla bir sunucuya dağıtın.
Bu sayfada bir ön sürüm olan ERPC CLI v0.1.0-rc.4 anlatılır.
erpc worker (takma adı erpc w) uygulamanızı native bir Linux binary'sine derler ve onu bir ERPC VPS'te, yeni bir saatlik VPS'te ya da kendi sunucunuzda, arada Docker ve çalışma zamanı olmadan, sıkılaştırılmış bir systemd birimi altında çalıştırır.
Sağlık kontrolünden geçerek ayağa kalkmayan bir release, bir öncekine geri alınır ve birden çok uygulama, her biri kendi bağlantı noktasında olmak üzere tek bir sunucuyu paylaşabilir. Uygulamaya dair her şey, uygulamanın kökündeki erpc.toml dosyasındadır; bu dosya hiçbir gizli değer içermez ve commit edilebilir.

Ön koşullar

  • Bir ERPC hesabı; bu makinede erpc login ile oturum açılmış olmalıdır (Oturum açma ve anahtarlar).
  • ERPC Credit, yeni bir saatlik VPS için. Saatlik bir ürün, önceden satın alınan ERPC Credit'ten ödenir ve kredinin karşılamadığı bir başlatma reddedilir. Fiyatlar Fiyatlandırma sayfasında ve ERPC Web Dashboard üzerinde yer alır.
  • Bir SSH anahtarı, bu makinede: ssh-keygen -t ed25519 ya da elinizde olan bir anahtar için erpc config set ssh_key <path>.pub.
  • Linux için derleme yapmanın bir yolu. Mac veya Windows'tan: sunucunun Rust hedefi (rustup target add x86_64-unknown-linux-gnu), zig (macOS'ta brew install zig) ve cargo-zigbuild (cargo install cargo-zigbuild --locked). Sunucuyla aynı türden bir Linux makinesinden (her ERPC sunucusu x86-64'tür): cargo'dan başka bir şey gerekmez. Çapraz derleme araçları olmadan uygulama bu makinenin kendi araç zinciriyle derlenir ve bu durumda binary, bağlandığı glibc'ye ihtiyaç duyar; build ve deploy bu glibc'yi belirtir. Bu araçlarla, glibc 2.31 ve üzeri için derlenir.

HelloWorld'ü dağıtın

HelloWorld, hiçbir anahtar, gizli değer veya veri hattı gerektirmeyen, Rust'ta yazılmış küçük bir HTTP API'dir. GET /, GET /hello/{name} ve GET /healthz isteklerine yanıt verir.
bash
erpc worker init --template helloworld   # makes ./hello-world
erpc worker run hello-world              # here: curl http://127.0.0.1:3000/
erpc worker deploy hello-world           # your VPS, or a new hourly one (price asked first)
erpc worker api / --dir hello-world      # {"message":"Hello, World!",…} from the server
  1. init, uygulamayı erpc.toml dosyasıyla birlikte ./hello-world içinde oluşturur.
  2. run, uygulamayı derler ve makinenizde çalıştırır; böylece onu önce curl ile çağırabilirsiniz.
  3. deploy, uygulamayı sunucu için derler ve dağıtır. Para gerektiren her şey önce saatlik fiyatıyla, bakiyenizle ve kredinin ne kadar süre yeteceğiyle birlikte gösterilir; terminalde ise yalnızca bir evet yanıtından sonra başlar.
  4. api, dağıtılan uygulamanın API'sini makinenizden çağırır; API bu sırada sunucunun loopback'inde kalır.
erpc worker check uygulamada eksik olanları listeler ve bir şey eksikse deploy herhangi bir şey satın almadan önce çalışmayı reddeder. erpc worker build yalnızca derlemeyi çalıştırır; bir sunucu satın alınmadan önce derlemenin başarısız olduğunu görmenin yolu budur.

Şablon seçin

erpc worker init tek bir şey sorar: ne oluşturulacağı. Seçim ok tuşlarıyla yapılır.
  • HelloWorld, başlangıç için kullanılacak şablondur.
  • HFT ve pumpfun-bot şimdilik ikisi de pumpfun şablonundan oluşturulur: ValidatorsDAO/solana-stream'den taşınmış bir pump.fun (PumpSwap) trading botu.
--template hft (ya da helloworld, pumpfun-bot veya bir şablon kimliği) seçiciyi atlar, --name ise uygulamaya ad verir. Ad verilmezse uygulama seçime göre adlandırılır (hello-world, hft-bot, pumpfun-bot). Bu adda bir dizin varsa, seçimi yapan bir kişiye -2, -3 vb. verilir; bir betik (--yes, --json, terminal yok) ise hata alır. Sorulacak kimse yoksa ve --template verilmemişse, oluşturulan HelloWorld olur.
Bir trading botu çalışmadan önce bir anahtara ve birkaç ayara ihtiyaç duyar. Sırası şöyledir:
bash
erpc login                             # once per machine: the session in 1Password or the keychain
erpc worker init                       # pick with the arrow keys; makes ./<name> with erpc.toml
cd <name>
erpc worker key new                    # the trading key, in 1Password, the keychain or the keystore; prints the public key to fund
erpc worker secret put API_TOKEN --generate          # the bot's own API token, made for you and shown to nobody
erpc worker secret put ERPC_API_KEY --from-account   # the account's RPC key, read from your account (or SOLANA_RPC_ENDPOINT in [vars])
erpc worker check                      # what erpc.toml describes, and what is missing
erpc worker run --grpc --ip <IPV4>     # build and run here, with an hourly gRPC line letting this machine in
erpc worker run --check --grpc --ip <IPV4>   # the same, stopped once healthy
erpc worker deploy --new-vps --grpc    # a new hourly VPS and gRPC line, prices asked first
init, oluşturduğu uygulama için bu sırayı yazdırır. Anahtarın ve gizli değerlerin nerede saklandığı Anahtarlar ve gizli değerler sayfasında anlatılır.

Sunucuyu seçin

deploy, aşağıdakilerden ilkini kullanır:
  1. uygulamanın [env.<name>] bölümünün zaten belirttiği sunucu;
  2. --vps <id>, hesabınızdaki bir ERPC VPS;
  3. --new-vps, saat dilimine göre bu makineye en yakın bölgedeki en ucuz saatlik VPS (--region ve --plan başka bir seçim yapar);
  4. --host <address>, kendi sunucunuz: systemd, nftables, sudo ve /usr/bin/python3 konumunda Python 3 bulunan Ubuntu veya Debian; root olarak ya da parolasız sudo yetkisine sahip bir kullanıcıyla erişilir;
  5. bunların hiçbiri yoksa, terminalde, hesabınızın çalışan VPS'lerinin bir listesi; listenin sonunda "start a new one" yer alır.
Kendi sunucunuzda worker'ın güvenlik duvarı, SSH ve uygulamanın bağlantı noktası dışındaki her gelen bağlantıyı düşürür; bu nedenle başka bir şey sunan bir sunucu, kullanılacak sunucu değildir.

Terminal başında kimse olmadan dağıtın

Bir betiğin ya da erpc ai gibi bir ajanın yanıt verebileceği bir terminali yoktur. İki bayrak, yine de işi yapmasını sağlar:
bash
erpc worker deploy hello-world --new-vps --yes                     # no key: all the way, unattended
erpc worker deploy pump-sniper --new-vps --grpc --yes --prepare    # a bot: everything but its key
erpc worker deploy pump-sniper                                     # then you, at a terminal: the key, and the start
  • --yes, komutun adını verdiği her saatlik ürünün fiyat sorusunu yanıtlar (--new-vps, --grpc, --shreds, --unlimited). Ayrıca erpc'nin henüz yalnızca anahtarla girişe geçirmediği bir sunucuya (yeni bir sunucu ya da --vps <ID> ile adı verilen bir sunucu) yapılan ilk girişi de yanıtlar: erpc sunucunun parolasıyla bir kez giriş yapar, anahtarınızı yerleştirir ve parolayla girişleri kapatır. --yes olmadan ve terminal olmadan bir başlatma, herhangi bir şey satın alınmadan önce çıkış kodu 3 ile reddedilir.
  • Sunucularınız arasından seçim yapmak yine de bir kişi gerektirir. Sunucuyu --new-vps, --vps <ID> veya --host ile belirtin.
  • --prepare, ne trading anahtarını ne de bir gizli değeri gerektiren her şeyi yapar; hiçbir şeyi başlatmaz, durdurmaz veya yeniden başlatmaz. Terminalde çalıştırılan bir sonraki erpc worker deploy, anahtarı ve gizli değerleri teslim eder ve uygulamayı başlatır. Trading anahtarı yalnızca terminal başındaki bir kişi için okunur.

Uygulamanızı gRPC, Shreds ve Unlimited RPC'ye bağlayın

ERPC'nin saatlik hatları sunucuyu adresine göre kabul eder ve hiçbir token kabul etmez. Her hat, deploy üzerindeki kendi bayrağıyla sunucu için başlatılır ve uygulama, hattın endpoint'ini bir ayar olarak alır:
BayrakHatUygulamanın aldığı
--grpcGeyser gRPCGRPC_ENDPOINT
--shredsShreds (Shredstream gRPC)SHREDS_ENDPOINT
--unlimitedSunucunun bölgesindeki Unlimited RPCSOLANA_SEND_RPC_ENDPOINT
  • --grpc-plan, --shreds-plan veya --unlimited-plan bir plan belirtmedikçe her hat, kendi ailesinin en ucuzudur.
  • Unlimited RPC, kurulumu 45 dakikaya kadar süren özel bir sunucuda çalışır. sendTransaction ve kısa bir okuma listesi sunar; getProgramAccounts veya getTokenAccountsByOwner sunmaz. Endpoint'i düz HTTP'dir (TLS yok) ve yalnızca allowlist'teki adresi kabul eder.

Makinenizdeki bir çalıştırma için hatlar

erpc worker run de --grpc ve --shreds alır; böylece uygulamayı bir sunucuya gitmeden önce burada gerçek verilerle deneyebilirsiniz.
  • Adres: hatlar, bu makinenin --ip ile verdiğiniz genel IPv4 adresini kabul eder. erpc bu adresi kendisi bulmaz.
  • Satın alma: yeni bir hat yalnızca terminalde, fiyatı gösterildikten sonra satın alınır. run komutunda --yes yoktur.
  • Sonlandırma: çalıştırma sona erdiğinde her saatlik hat, sorulduktan sonra sonlandırılır. --keep-lines hatları tutar; ücretlendirilmeye devam ederler. Çalıştırma başka bir şekilde sona ererse (terminal kapanırsa, ikinci bir Ctrl-C), hatlar kalır ve ücretlendirilir.
  • Ölçümler: uygulamanın burada ölçtükleri, bu makine ile hat arasındaki mesafeyi de içerir; bu yüzden aynı uygulamanın hattın yakınındaki bir sunucuda çalışan hâlinden daha yavaştır.

Sonraki adımlar