انشر أول تطبيق لك على خادم باستخدام erpc worker

أنشئ واجهة HTTP API صغيرة بلغة Rust باستخدام erpc worker، وشغّلها على جهازك، ثم انشرها على خادم بأربعة أوامر.
تصف هذه الصفحة ERPC CLI v0.1.0-rc.4، وهو إصدار تمهيدي.
يُصرِّف erpc worker (واسمه المستعار erpc w) تطبيقك إلى ملف ثنائي أصلي لنظام Linux، ويشغّله على ERPC VPS، أو على VPS جديد بالساعة، أو على خادم خاص بك، ضمن وحدة systemd محصنة دون Docker ودون أي بيئة تشغيل وسيطة.
أي إطلاق لا يجتاز فحص الصحة عند بدء تشغيله يُتراجَع عنه إلى الإطلاق السابق، ويمكن لعدة تطبيقات أن تتشارك خادمًا واحدًا، لكل منها منفذه الخاص. كل ما يخص التطبيق موجود في erpc.toml في جذره، وهو ملف لا يحتوي أي سر ويمكن إيداعه في المستودع.

المتطلبات المسبقة

  • حساب ERPC، مسجَّل الدخول إليه على هذا الجهاز باستخدام erpc login (تسجيل الدخول والمفاتيح).
  • ERPC Credit، لإنشاء VPS جديد بالساعة. يُدفع ثمن المنتج بالساعة من ERPC Credit الذي يُشترى مسبقًا، ويُرفض أي بدء لا يغطيه 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 (brew install zig على macOS)، وcargo-zigbuild (cargo install cargo-zigbuild --locked). ومن جهاز Linux من نوع الخادم نفسه (x86-64 لكل خوادم ERPC)، لا تحتاج إلى أكثر من cargo. بدون أدوات البناء المتقاطع، يُبنى التطبيق بمجموعة أدوات هذا الجهاز نفسه، ويحتاج الملف الثنائي حينها إلى إصدار glibc الذي رُبط به، ويذكره build وdeploy. ومع هذه الأدوات، يُبنى لإصدار glibc 2.31 فما فوق.

نشر HelloWorld

HelloWorld واجهة HTTP API صغيرة بلغة Rust لا تحتاج إلى مفتاح ولا إلى سر ولا إلى خط بيانات. وهي تجيب على 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 التطبيق في ./hello-world، مع ملف erpc.toml الخاص به.
  2. يبني run التطبيق ويشغّله على جهازك، لتتمكن من استدعائه باستخدام curl أولًا.
  3. يبني deploy التطبيق للخادم وينشره. كل ما يكلّف مالًا يُعرض أولًا مع سعره بالساعة ورصيدك والمدة التي يكفيها ERPC Credit، وفي الطرفية لا يبدأ إلا بعد إجابتك بنعم.
  4. يستدعي api واجهة API الخاصة بالتطبيق المنشور من جهازك، مع بقاء الـ API على واجهة loopback في الخادم.
يسرد erpc worker check ما ينقص التطبيق، ويرفض deploy العمل قبل أن يشتري أي شيء إذا كان هناك نقص. ويشغّل erpc worker build البناء وحده، وهو الطريقة لرؤية فشل البناء قبل شراء خادم.

اختيار قالب

يسأل erpc worker init عن شيء واحد: ما الذي تريد إنشاءه، وتختاره بمفاتيح الأسهم.
  • HelloWorld هو القالب الذي تبدأ منه.
  • HFT وpumpfun-bot كلاهما مبنيّ من قالب pumpfun في الوقت الحالي: بوت تداول لـ pump.fun (PumpSwap) منقول من ValidatorsDAO/solana-stream.
يتخطى --template hft (أو helloworld أو pumpfun-bot أو معرّف قالب) أداة الاختيار، ويحدد --name اسم التطبيق. وبدون اسم، يُسمّى التطبيق باسم الاختيار (hello-world أو hft-bot أو pumpfun-bot). عندما يوجد مجلد بهذا الاسم، يحصل الشخص الذي يختار على -2 و-3 وهكذا، بينما يحصل السكربت (--yes أو --json أو عدم وجود طرفية) على خطأ. وعندما لا يوجد من يُسأل ولا يوجد --template، يُنشأ HelloWorld.
يحتاج بوت التداول إلى مفتاح وبعض الإعدادات قبل أن يعمل. ترتيب خطواته:
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 هذا الترتيب للتطبيق الذي أنشأه. وتشرح صفحة المفاتيح والأسرار أين يُحفظ المفتاح والأسرار.

اختيار الخادم

يستخدم deploy أول ما ينطبق مما يلي:
  1. الخادم الذي يذكره [env.<name>] الخاص بالتطبيق مسبقًا؛
  2. --vps <id>، وهو ERPC VPS في حسابك؛
  3. --new-vps، وهو أرخص VPS بالساعة في المنطقة الأقرب إلى هذا الجهاز بحسب منطقته الزمنية (ويختار --region و--plan غير ذلك)؛
  4. --host <address>، وهو خادم خاص بك: Ubuntu أو Debian مع systemd وnftables وsudo وPython 3 في /usr/bin/python3، يُتصل به بصفة root أو بمستخدم لديه sudo دون كلمة مرور؛
  5. وإلا، في الطرفية، قائمة بخوادم VPS العاملة في حسابك، وفي آخرها «start a new one».
على خادم خاص بك، يُسقط جدار حماية الـ worker كل اتصال وارد باستثناء SSH ومنفذ التطبيق، لذا فإن الخادم الذي يخدم أي شيء آخر ليس الخادم المناسب للاستخدام.

النشر دون وجود شخص أمام الطرفية

لا يملك السكربت، أو الوكيل مثل erpc ai، طرفية يجيب فيها. ويتيح له خياران إنجاز العمل رغم ذلك:
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 يجيب عن سعر كل منتج بالساعة يذكره الأمر (--new-vps و--grpc و--shreds و--unlimited). ويجيب أيضًا عن أول تسجيل دخول إلى خادم لم يجعله erpc بعدُ مقتصرًا على المفاتيح، سواء كان خادمًا جديدًا أو خادمًا محددًا بـ --vps <ID>: يسجّل erpc الدخول مرة واحدة بكلمة مرور الخادم، ويضع مفتاحك، ثم يوقف تسجيل الدخول بكلمة المرور. وبدون --yes وبدون طرفية، يُرفض البدء قبل شراء أي شيء، برمز الخروج 3.
  • اختيار خادم من بين خوادمك لا يزال يحتاج إلى شخص. حدّد الخادم بـ --new-vps أو --vps <ID> أو --host.
  • --prepare ينجز كل ما لا يحتاج إلى مفتاح التداول ولا إلى سر، ولا يبدأ شيئًا ولا يوقفه ولا يعيد تشغيله. ثم يسلّم أمر erpc worker deploy التالي في الطرفية المفتاح والأسرار ويبدأ التطبيق. لا يُقرأ مفتاح التداول إلا لشخص أمام الطرفية.

ربط تطبيقك بـ gRPC وShreds وUnlimited RPC

تسمح خطوط ERPC بالساعة للخادم بالدخول بحسب عنوانه، ولا تقبل أي رمز. ولكل خط خيار واحد على deploy يبدؤه للخادم، ويحصل التطبيق على نقطة النهاية الخاصة بالخط كإعداد:
الخيارالخطما يحصل عليه التطبيق
--grpcGeyser gRPCGRPC_ENDPOINT
--shredsShreds (Shredstream gRPC)SHREDS_ENDPOINT
--unlimitedUnlimited RPC في منطقة الخادمSOLANA_SEND_RPC_ENDPOINT
  • كل خط هو الأرخص في فئته ما لم يحدد --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 مرة ثانية)، تبقى الخطوط وتُحتسب رسومها.
  • الأرقام: ما يقيسه التطبيق هنا يشمل المسافة من هذا الجهاز إلى الخط، لذا فهو أبطأ من التطبيق نفسه على خادم قريب من الخط.

الخطوات التالية