erpc worker से अपना पहला app सर्वर पर deploy करें

erpc worker से Rust में एक छोटा HTTP API बनाएँ, उसे अपनी मशीन पर चलाएँ, और चार कमांड से उसे सर्वर पर deploy करें।
यह पेज ERPC CLI v0.1.0-rc.4 के बारे में है, जो एक प्री-रिलीज़ है।
erpc worker (alias erpc w) आपके app को native Linux binary में compile करता है और उसे किसी ERPC VPS, किसी नए प्रति-घंटा VPS, या आपके अपने सर्वर पर, हार्डन की गई systemd यूनिट के तहत चलाता है, बीच में न Docker और न कोई runtime।
जो रिलीज़ हेल्थ चेक पास करते हुए शुरू नहीं होती, उसे पिछली रिलीज़ पर रोलबैक कर दिया जाता है, और कई apps एक सर्वर साझा कर सकते हैं, हर एक अपने अलग पोर्ट पर। App के बारे में सब कुछ उसके root पर मौजूद erpc.toml में है, जिसमें कोई secret नहीं होता और जिसे commit किया जा सकता है।

पूर्व-आवश्यकताएँ

  • एक ERPC account, जिसमें इस मशीन पर erpc login के साथ लॉग इन किया गया हो (लॉग इन और keys)।
  • ERPC Credit, नए प्रति-घंटा VPS के लिए। प्रति-घंटा product का भुगतान ERPC Credit से होता है, जो पहले से खरीदा जाता है, और जिस start को credit कवर नहीं करता, वह अस्वीकार होता है। कीमतें मूल्य और ERPC Web Dashboard पर हैं।
  • एक SSH key इस मशीन पर: ssh-keygen -t ed25519, या आपके पास पहले से मौजूद key के लिए erpc config set ssh_key <path>.pub।
  • Linux के लिए build करने का कोई तरीका। Mac या Windows से: सर्वर का Rust target (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 के अलावा और कुछ नहीं। Cross-build tools के बिना, app इस मशीन के अपने toolchain से build होता है, और तब binary को वही glibc चाहिए जिसके साथ वह link हुआ था, जिसका नाम build और deploy बताते हैं। उनके साथ, वह glibc 2.31 और उससे नए के लिए build होता है।

HelloWorld deploy करें

HelloWorld, Rust में एक छोटा HTTP API है जिसे न कोई key चाहिए, न कोई secret और न कोई डेटा लाइन। यह GET /, GET /hello/{name} और GET /healthz का जवाब देता है।
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 app को ./hello-world में, उसके erpc.toml के साथ बनाता है।
  2. run app को build करता है और आपकी मशीन पर चलाता है, ताकि आप पहले उसे curl से call कर सकें।
  3. deploy उसे सर्वर के लिए build करता है और deploy करता है। जिस चीज़ पर पैसा लगता है, वह पहले उसके प्रति घंटे के मूल्य, आपके balance और credit कितने समय चलेगा, इनके साथ दिखाई जाती है, और टर्मिनल पर वह सिर्फ़ "हाँ" के बाद शुरू होती है।
  4. api आपकी मशीन से deploy किए गए app का API call करता है, जबकि API सर्वर के loopback पर ही रहता है।
erpc worker check बताता है कि app में क्या कमी है, और कुछ कमी हो तो deploy कुछ भी खरीदने से पहले ही अस्वीकार कर देता है। erpc worker build सिर्फ़ build चलाता है; सर्वर खरीदे जाने से पहले build की विफलता देखने का यही तरीका है।

Template चुनें

erpc worker init एक ही बात पूछता है: क्या बनाना है, जिसे arrow keys से चुना जाता है।
  • HelloWorld वह है जिससे शुरुआत करनी चाहिए।
  • HFT और pumpfun-bot फ़िलहाल दोनों pumpfun template से बनते हैं: एक pump.fun (PumpSwap) trading bot, जिसे ValidatorsDAO/solana-stream से port किया गया है।
--template hft (या helloworld, pumpfun-bot, या कोई template id) picker को छोड़ देता है, और --name app का नाम रखता है। नाम के बिना, app का नाम चुनाव के अनुसार रखा जाता है (hello-world, hft-bot, pumpfun-bot)। जब उस नाम की directory पहले से मौजूद हो, तो चुनने वाले व्यक्ति को -2, -3 आदि मिलते हैं, और किसी script (--yes, --json, कोई टर्मिनल नहीं) को error मिलता है। पूछने के लिए कोई न हो और --template भी न हो, तो HelloWorld बनाया जाता है।
Trading bot को चलने से पहले एक key और कुछ सेटिंग चाहिए। उसका क्रम:
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 अपने बनाए app के लिए यही क्रम छापता है। Key और secrets कहाँ रखे जाते हैं, यह keys और secrets में बताया गया है।

सर्वर चुनें

deploy इनमें से पहला इस्तेमाल करता है:
  1. वह सर्वर जिसका नाम app का [env.<name>] पहले से लेता है;
  2. --vps <id>, आपके account का कोई ERPC VPS;
  3. --new-vps, इस मशीन के time zone के हिसाब से सबसे नज़दीकी region में सबसे सस्ता प्रति-घंटा VPS (--region और --plan से कुछ और चुना जाता है);
  4. --host <address>, आपका अपना सर्वर: systemd, nftables, sudo और /usr/bin/python3 पर Python 3 वाला Ubuntu या Debian, जिस तक root के रूप में या passwordless sudo वाले user के रूप में पहुँचा जाता है;
  5. वरना, टर्मिनल पर, आपके account के चल रहे VPSs की सूची, जिसके अंत में "start a new one" होता है।
अपने खुद के सर्वर पर, worker का फ़ायरवॉल SSH और app के पोर्ट को छोड़कर हर आने वाला कनेक्शन ड्रॉप करता है, इसलिए जो सर्वर कुछ और भी serve करता है, वह इसके लिए सही सर्वर नहीं है।

टर्मिनल पर किसी व्यक्ति के बिना deploy करें

किसी script के पास, या erpc ai जैसे एजेंट के पास, जवाब देने के लिए कोई टर्मिनल नहीं होता। दो flags फिर भी उसे यह काम करने देते हैं:
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 कमांड में नामित हर प्रति-घंटा product (--new-vps, --grpc, --shreds, --unlimited) के मूल्य का जवाब देता है। यह ऐसे सर्वर पर पहले लॉग इन का भी जवाब देता है जिसे erpc ने अभी तक key-only नहीं बनाया है, चाहे वह नया हो या --vps <ID> से नामित: erpc सर्वर के पासवर्ड से एक बार लॉग इन करता है, आपकी key डालता है और पासवर्ड से लॉग इन बंद कर देता है। --yes के बिना और टर्मिनल के बिना, start कुछ भी खरीदे जाने से पहले अस्वीकार होता है, एग्ज़िट कोड 3 के साथ।
  • अपने सर्वरों में से चुनने के लिए अब भी किसी व्यक्ति की ज़रूरत होती है। सर्वर को --new-vps, --vps <ID> या --host से नामित करें।
  • --prepare वह सब करता है जिसके लिए न trading key चाहिए न कोई secret, और न कुछ शुरू करता है, न रोकता है, न restart करता है। टर्मिनल पर अगला erpc worker deploy key और secrets सौंपता है और app शुरू करता है। Trading key सिर्फ़ टर्मिनल पर मौजूद व्यक्ति के लिए पढ़ी जाती है।

अपने app को gRPC, Shreds और Unlimited RPC से जोड़ें

ERPC की प्रति-घंटा लाइनें सर्वर को उसके address से अंदर आने देती हैं और कोई token नहीं लेतीं। हर लाइन deploy पर अपने अलग flag से सर्वर के लिए शुरू होती है, और app को उसका endpoint एक सेटिंग के रूप में मिलता है:
FlagलाइनApp को मिलता है
--grpcGeyser gRPCGRPC_ENDPOINT
--shredsShreds (Shredstream gRPC)SHREDS_ENDPOINT
--unlimitedसर्वर के region में Unlimited RPCSOLANA_SEND_RPC_ENDPOINT
  • हर लाइन अपने परिवार की सबसे सस्ती लाइन होती है, जब तक --grpc-plan, --shreds-plan या --unlimited-plan किसी और का नाम न दे।
  • Unlimited RPC एक dedicated सर्वर पर चलता है, जिसे सेट होने में 45 मिनट तक लगते हैं। यह sendTransaction और reads की एक छोटी सूची serve करता है, getProgramAccounts या getTokenAccountsByOwner नहीं। इसका endpoint सादा HTTP है (TLS नहीं) और सिर्फ़ whitelist किए गए address को अंदर आने देता है।

अपनी मशीन पर run के लिए लाइनें

erpc worker run भी --grpc और --shreds लेता है, ताकि app सर्वर पर जाने से पहले उसे यहाँ असली डेटा पर आज़माया जा सके।
  • Address: लाइनें इस मशीन के public IPv4 address को अंदर आने देती हैं, जिसे आप --ip से देते हैं। erpc इसे खुद नहीं ढूँढता।
  • खरीदना: नई लाइन सिर्फ़ टर्मिनल पर, उसका मूल्य दिखाए जाने के बाद खरीदी जाती है। run में --yes नहीं है।
  • समाप्त करना: जब run समाप्त होता है, तो हर प्रति-घंटा लाइन पूछकर समाप्त की जाती है। --keep-lines उन्हें बनाए रखता है, और उनका शुल्क लगता रहता है। अगर run किसी और तरह समाप्त हो (टर्मिनल बंद हो गया, दूसरा Ctrl-C), तो लाइनें बनी रहती हैं और उनका शुल्क लगता है।
  • संख्याएँ: app यहाँ जो मापता है, उसमें इस मशीन से लाइन तक की दूरी शामिल है, इसलिए यह उसी app से धीमा है जो लाइन के पास किसी सर्वर पर चलता है।

अगले चरण