รัน ติดตาม และชำระค่าแอปด้วย erpc worker

erpc worker status แสดงว่าแอปของคุณทำงานอยู่หรือไม่ และมีค่าใช้จ่ายรายชั่วโมงเท่าใด การเริ่มทุกครั้งจะแสดงราคาก่อน และ erpc worker delete --release-server จะยุติ gRPC, Shreds และ Unlimited RPC ที่แอปใช้แบบรายชั่วโมง แล้วจึงยุติเซิร์ฟเวอร์รายชั่วโมงของแอป
หน้านี้อธิบาย ERPC CLI v0.1.0-rc.4 ซึ่งเป็นเวอร์ชัน pre-release

ตรวจสอบแอป

$ erpc worker status --env prod
api-prod on 203.0.113.10: running, release 20261101T093000Z-1a2b3c4d, pid 4217, up 2h 14m
  current 20261101T093000Z-1a2b3c4d, previous 20261028T171500Z-9f8e7d6c, 2 releases kept
  WAF: listening on port 8080, forwarding to 127.0.0.1:3000, since 2026-11-01T09:30:12Z; requests 5120, forwarded 5043, blocked 71, connections refused 12, app errors 6, addresses banned now 1
  `erpc worker delete --release-server --env prod` ends what this app is charged for.
status แสดงว่าแอปถูกล็อกหรือทำงานอยู่ เป็น release ใด และตั้งแต่เมื่อใด เมื่อคุณลงชื่อเข้าใช้อยู่ คำสั่งนี้ยังแสดงค่าใช้จ่ายรายชั่วโมงของสภาพแวดล้อมนั้น โดยแต่ละรายการแสดงราคาที่บัญชีของคุณถูกเรียกเก็บ และแสดง credit ของบัญชีคุณพร้อมระยะเวลาที่ credit จะใช้ได้ --json มีข้อมูลเดียวกันภายใต้ hourly.charged
รายการที่ไม่อยู่ในสิ่งที่บัญชีถูกเรียกเก็บเงิน จะถูกระบุว่าไม่อยู่ในนั้น และไม่ถูกเรียกว่ายุติแล้ว เพราะรายการเรียกเก็บนั้นอาจตามหลังการเริ่มได้หนึ่งนาที หากไม่มีเซสชัน หรือเมื่ออ่านรายการเรียกเก็บของบัญชีไม่ได้ status จะแสดงสิ่งที่อยู่ในบันทึก

ควบคุมแอป

คำสั่งสิ่งที่ทำ
erpc worker logs -n 200, logs -flog ของแอปและของเอเจนต์ อักขระควบคุมในบรรทัดจะแสดงเป็น ?
erpc worker startรันแอป โดยส่งคีย์ไปด้วยเมื่อ worker ถูกล็อกอยู่
erpc worker stop, stop --lockหยุดแอป และ --lock จะลบคีย์ออกจากหน่วยความจำด้วย
erpc worker restartหยุดแล้วเริ่มแอปอีกครั้ง
erpc worker releasesrelease ที่เก็บไว้บนเซิร์ฟเวอร์ (deploy.keep_releases)
erpc worker rollback, rollback --to <release>rollback กลับไปยัง release ก่อนหน้า หรือ release ที่ระบุ คำสั่งนี้จะถูกปฏิเสธโดยคง release ที่ใช้อยู่ไว้ตามเดิม เมื่อพอร์ต health check ของ release นั้นตอนนี้เป็นของ worker อื่นที่กำลังทำงานอยู่
erpc worker api <PATH>อ่าน API ของแอปจากเครื่องนี้ โดยที่ API ยังคงอยู่บน loopback ของเซิร์ฟเวอร์ (-X POST, -d '{...}' สำหรับการเปลี่ยนแปลง)
erpc worker trades [--profit]การเทรดของแอปบนเซิร์ฟเวอร์ของแอป
erpc worker listแอปบนเครื่องนี้และตำแหน่งที่แต่ละแอปถูก deploy ส่วน --prune จะนำแอปที่ erpc.toml หายไปแล้วออกจากรายการ
API_TOKEN ของแอปถูกอ่านที่นี่ และส่งถึงเซิร์ฟเวอร์ผ่าน standard input โดยไม่อยู่ในบรรทัดคำสั่งใด และไม่อยู่ใน journal ใด คำสั่ง worker ทุกคำสั่งรับ --env <name> (ค่าเริ่มต้น default) และ --json ยกเว้น secret unlock และ secret lock ซึ่งเกี่ยวกับ keystore ของเครื่องนี้ ไม่ใช่แอป จึงไม่รับ --env ไม่ว่าจะรันจากที่ใด คำสั่งจะหาแอปจากชื่อที่ erpc รู้จักแอปนั้น ส่วน secret put, secret rm, key import, firewall allow และ firewall deny ระบุแอปด้วย --dir เท่านั้น

การเรียกเก็บเงินรายชั่วโมงทำงานอย่างไร

  • การเริ่มทุกครั้งจะแสดงราคาก่อน ในเทอร์มินัล การเริ่มจะเกิดขึ้นหลังจากตอบ yes เท่านั้น ส่วนเมื่อใช้ --yes บรรทัดคำสั่งที่ระบุสิ่งที่จะเริ่มถือเป็นการตอบ yes
  • บริการรายชั่วโมงชำระจาก ERPC Credit ซึ่งซื้อไว้ล่วงหน้า และการเริ่มที่ credit ไม่พอครอบคลุมจะถูกปฏิเสธ ดูราคาได้ที่ ราคา และ ERPC Web Dashboard
  • VPS ใหม่จะอยู่ในบันทึกทันทีที่ได้รับชื่อ ก่อนที่จะพร้อมใช้งาน การ deploy ครั้งถัดไปจะรับ VPS นั้นมาใช้แทนการซื้อเครื่องใหม่
  • สำหรับ deploy การเริ่มที่ไม่ได้รับคำตอบจะถูกส่งซ้ำ และไม่ถูกส่งเป็นการเริ่มใหม่เลย request key ของการเริ่มนั้นจะอยู่ในบันทึก ([env.<name>.starting]) การรันคำสั่งเดิมอีกครั้งจึงส่งคำขอเดิม หลังได้รับคำตอบบางแบบ request key จะคงอยู่จนกว่าคุณจะลบด้วยตนเอง (การซื้อที่ erpc บันทึกไว้ไม่ได้) erpc worker run ไม่เก็บบันทึก การรันครั้งถัดไปจึงสร้างคำขอใหม่
  • โปรด deploy ทีละสภาพแวดล้อม การ deploy สภาพแวดล้อมเดียวกันสองครั้งที่เริ่มพร้อมกันอาจซื้อเป็นสองรายการ และไม่รองรับกรณีนี้
  • สายข้อมูลยังคงอยู่หรือไม่ ตัดสินจากสิ่งที่บัญชีถูกเรียกเก็บเงิน erpc จะไม่ยุติสายข้อมูลที่ไม่ได้เรียกเก็บเงินรายชั่วโมงเลย โปรดยุติสายข้อมูลนั้นในแดชบอร์ด

ลบแอป

erpc worker delete จะลบ worker ส่วน erpc worker delete --release-server จะยุติสายข้อมูลของ worker ด้วย แล้วจึงยุติเซิร์ฟเวอร์รายชั่วโมง สิ่งที่ยุติไม่ได้จะยังคงอยู่ในบันทึก และสายข้อมูลที่ไม่ได้เรียกเก็บเงินรายชั่วโมงจะถูกระบุชื่อไว้ เพื่อให้คุณยุติในแดชบอร์ด
  • การ delete แบบธรรมดาจะปฏิเสธ VPS ที่ซื้อแล้วแต่ไม่เคยเชื่อมต่อถึงได้ เพราะจะทำให้ลืม VPS นั้นไปทั้งที่ยังถูกเรียกเก็บเงินอยู่ ส่วนการ delete แบบธรรมดาของ VPS รายชั่วโมงที่เชื่อมต่อถึงแล้ว จะนำ VPS นั้นออกจากบันทึกทั้งที่ยังถูกเรียกเก็บเงินอยู่ และจะเตือนเรื่องนี้
  • --forget จะปล่อยเซิร์ฟเวอร์ที่เชื่อมต่อถึงไม่ได้อีกต่อไปไว้โดยไม่เชื่อมต่อถึง และ --forget-line <id> จะนำสายข้อมูลที่ถูกยุตินอก erpc ออกจากบันทึก

วัดเวลาแฝงของ RPC จากเซิร์ฟเวอร์

erpc worker bench จับเวลาการเรียก RPC จากเซิร์ฟเวอร์ของสภาพแวดล้อม โดยเทียบ shared RPC ของ ERPC, Unlimited RPC ของ ERPC และ RPC อื่นใดก็ได้แบบเคียงข้างกัน เอเจนต์บนเซิร์ฟเวอร์เป็นผู้จับเวลาการเรียกแต่ละครั้ง ตัวเลขจึงเป็นสิ่งที่แอปได้รับ
bash
erpc worker bench                                  # getSlot: shared RPC vs the Unlimited RPC
erpc worker bench --rounds 300 --interval 150      # for a plan that limits calls per second
erpc worker bench --url other=op://<vault-id>/<item-id>/url   # another provider's RPC
  • --method รับ getSlot, getBlockHeight, getLatestBlockhash หรือ getHealth
  • --no-shared จะไม่รวม shared RPC ค่าของ --url อาจเป็น URL โดยตรง การอ้างอิงแบบ op://…, keychain:… หรือ keystore:… (ชี้ไปยังตำแหน่งที่เก็บ URL ที่มีคีย์อยู่ข้างใน แต่ไม่ชี้ไปยังรายการของคีย์เทรดเด็ดขาด ซึ่งจะถูกปฏิเสธ) หรือ - (อ่านจาก standard input หรือถามให้พิมพ์แบบไม่แสดงบนจอ) การระบุ endpoint มากกว่าหกรายการจะถูกปฏิเสธ
  • bench จะแสดง p50, p90, p99, min และ max จำนวนครั้งที่ล้มเหลวพร้อมสาเหตุแรก และจำนวน slot ที่แต่ละคำตอบตามหลังคำตอบที่ใหม่ที่สุดในรอบเดียวกัน
  • คีย์ส่งถึงเซิร์ฟเวอร์ผ่าน standard input เท่านั้น และตารางจะแสดง scheme, โฮสต์ และพอร์ต

สำรองข้อมูล state ของแอป

erpc worker backup on จะสำรองข้อมูล state ของแอปทุกวันไปยัง ERPC Global Storage โดยเข้ารหัสด้วย restic ที่เวลา --at ตามเวลาของเซิร์ฟเวอร์ และภายใน 30 นาทีหลังจากนั้น ต้องมีแพ็กเกจพื้นที่จัดเก็บ (erpc storage buy 5)
  • สิ่งที่ถูกสำรองข้อมูล คือ state ของแอป /var/lib/private/erpc-worker-<id> ส่วน release ไม่ถูกสำรองข้อมูล เพราะการ deploy จะนำกลับมาให้ ข้อมูลของ Redis และ PostgreSQL ไม่ได้รวมอยู่ด้วย
  • เซิร์ฟเวอร์ลบ snapshot ไม่ได้ เซิร์ฟเวอร์ไม่ถือเซสชันของ erpc, admin key ของบัญชี หรือรหัสผ่านหลักของบัญชีไว้เลย
  • เซิร์ฟเวอร์ที่ถูกยึดการควบคุมสามารถอ่าน snapshot ของทุกเครื่องในบัญชีได้ รวมถึงของเครื่องนี้ เก็บคีย์ของ repository ซึ่ง restic ไม่เปลี่ยนเลย ไว้ได้หลัง off เพิ่ม snapshot ภายใต้ชื่อของเครื่องอื่นได้ (หลังเกิดเหตุเช่นนั้น โปรดตรวจสอบว่า restore latest เลือก snapshot ใด) และใช้พื้นที่จัดเก็บของบัญชีจนเต็มได้ ซึ่งจะทำให้การสำรองข้อมูลของทุกเครื่องหยุดลง erpc worker backup off จะเพิกถอน access key ของเซิร์ฟเวอร์ก่อน ไม่ว่าเซิร์ฟเวอร์จะตอบหรือไม่
  • restic คัดลอกไฟล์ตามสภาพที่เป็นอยู่ขณะที่ worker ทำงาน ฐานข้อมูลจึงอาจต้องมี dump ของตัวเองเพื่อให้เรียกคืนได้อย่างสอดคล้องกัน การรันที่พลาดไประหว่างที่เซิร์ฟเวอร์ปิดอยู่จะรันเมื่อเซิร์ฟเวอร์กลับมา
  • erpc worker backup off, status และ now ใช้หยุด รายงาน และรันการสำรองข้อมูล snapshot จะยังคงอยู่หลัง off และ erpc backup prune --host จะลดจำนวน snapshot เก่าลง
เรียกคืนจากเครื่องนี้ หลังจากรัน erpc backup init บนเครื่องนี้แล้ว:
bash
erpc backup restore latest --from-host erpc-worker-<id>-<tag> --path /var/lib/private/erpc-worker-<id> --target ./restored

หลายสภาพแวดล้อมและหลายเครื่อง

  • worker หลายตัวบนเซิร์ฟเวอร์เดียวกันจะรันเป็น unit ของตัวเองแยกกัน ใช้ตารางไฟร์วอลล์ของเซิร์ฟเวอร์ร่วมกัน และแต่ละตัวเปิดเฉพาะพอร์ตของตัวเอง
  • แอปหนึ่งแอปมีได้หลายสภาพแวดล้อม ([env.staging], [env.prod]) แต่ละสภาพแวดล้อมมีเซิร์ฟเวอร์และสายข้อมูลของตัวเอง
  • สภาพแวดล้อมสามารถเก็บข้อมูลของเซิร์ฟเวอร์ไว้ใน 1Password แทน erpc.toml ได้ ในกรณีนั้น เครื่องใดก็ตามที่ลงชื่อเข้าใช้ vault นั้นและมี repository ของแอป จะรันได้ทุกคำสั่ง ส่วนการอ้างอิง keychain: และ keystore: ในแอปเช่นนี้จะถูกเตือน เพราะเครื่องอื่นอ่านไม่ได้ สภาพแวดล้อมใหม่จะเก็บข้อมูลไว้ใน 1Password เมื่อ erpc login เก็บเซสชันไว้ที่นั่น deploy --vault <vault-id> ใช้ระบุ vault อื่น และ deploy --inline จะเก็บข้อมูลไว้ใน erpc.toml