deploy แอปที่คุณมีอยู่แล้วด้วย erpc worker import

erpc worker import รับแอปที่คุณมีอยู่แล้วเข้ามาตามสภาพเดิม โดยเขียน erpc.toml ของแอป และไม่เปลี่ยนแปลงโค้ดใด ๆ ของแอป
หน้านี้อธิบาย ERPC CLI v0.1.0-rc.4 ซึ่งเป็นเวอร์ชัน pre-release

นำเข้าและ deploy

แอปอาจเป็นบอทที่ปัจจุบันรันภายใต้ systemd หรือ Docker หรือบริการที่เขียนด้วยภาษาอื่น import จะอ่านไดเรกทอรีของแอปแล้วเขียน erpc.toml ตามที่ไดเรกทอรีนั้นบ่งบอก ไม่มีสิ่งอื่นถูกเขียนลงในแอป ไม่มีสิ่งใดในแอปถูกรัน และโค้ดของแอปไม่ถูกเปลี่ยนแปลง erpc จะเพิ่มแอปลงในรายการของตัวเอง เช่นเดียวกับที่ init ทำ
bash
cd my-bot                                   # a Cargo package
erpc worker import                          # writes erpc.toml from what is there
erpc worker check                           # what it describes, and what is missing
erpc worker deploy                          # your VPS, or a new hourly one

cd my-go-service && make linux              # any other toolchain: build the Linux binary your way
erpc worker import --binary dist/service --port 8080 --health /healthz
erpc worker deploy
  • Cargo package จะถูก build ด้วย cargo build --release เช่นเดียวกับแอปที่สร้างด้วย init แอปจะได้ชื่อตาม package เว้นแต่ --name จะระบุเป็นอย่างอื่น และ --bin ใช้เลือก binary เมื่อ package มีหลายตัว ส่วน workspace root จะถูกปฏิเสธ: ให้ชี้ import ไปที่ package
  • Linux binary ที่ build จากที่ใดก็ได้ ด้วยภาษาใดก็ได้ deploy ได้ในแบบเดียวกันด้วย --binary <PATH> โดยส่งไปตามสภาพเดิม erpc จะอ่าน header ของ binary และปฏิเสธ binary ที่เซิร์ฟเวอร์รันไม่ได้ ได้แก่ binary ของ macOS หรือ Windows, สคริปต์, shared library, ไฟล์ที่ถูกตัดจนไม่ครบ หรือสถาปัตยกรรมอื่นที่ไม่ใช่ build.target โดย binary ต้องเป็นแบบ static หรือ link กับ glibc โดยมี loader อยู่ที่ path ปกติ binary นี้เป็นไฟล์ของแอป: link ภายใต้ชื่อนั้นที่ชี้ออกไปนอกไดเรกทอรีของแอปจะถูกปฏิเสธ การ deploy จะหยุดเมื่อพบ binary ที่ใช้ไม่ได้ ก่อนที่จะซื้อเซิร์ฟเวอร์ หากต้องการให้การ deploy นำการเปลี่ยนแปลงไปด้วย ให้ build binary ใหม่ก่อน deploy

สิ่งที่ import อ่าน

ในไดเรกทอรีสิ่งที่ import ทำ
.env.example และไฟล์ตัวอย่างที่คล้ายกันแต่ละชื่อจะกลายเป็นการตั้งค่าเมื่อเป็นได้: ชื่อที่ไม่ได้ประกอบด้วยตัวพิมพ์ใหญ่ ตัวเลข และ _ (หรือที่ขึ้นต้นด้วยตัวเลข) หรือชื่อที่ erpc หรือเซิร์ฟเวอร์ตั้งเอง (ERPC_WORKER_…, LD_…) จะถูกละไว้ ชื่อทั่วไปจะเข้าไปใน [vars] พร้อมค่าจากไฟล์ตัวอย่าง ส่วนชื่อที่ดูจากชื่อแล้วเหมือน secret หรือมีค่าที่มีข้อมูลรับรองอยู่ จะถูกระบุพร้อมคำสั่งที่ใช้เก็บ และค่าของชื่อนั้นจะไม่ถูกคัดลอก
.envอ่านเฉพาะชื่อ ยกเว้นหมายเลขพอร์ต
PORT, API_PORT, EXPOSE ของ Dockerfileใช้เป็น run.port เว้นแต่ --port จะระบุไว้ ส่วน --health <PATH> จะเพิ่ม health check บนพอร์ตนั้น
GRPC_ENDPOINT, SHREDS_ENDPOINT และการตั้งค่าอื่นที่สายข้อมูลให้มาถูกละไว้จาก [vars]: flag ของสายข้อมูลบน deploy จะตั้งค่าเหล่านี้
wallet.json, id.json, *keypair.jsonถูกระบุไว้พร้อม erpc worker key import <FILE> --wipe ซึ่งเก็บคีย์ไว้ในที่ที่ erpc worker อ่าน แล้วล้างไฟล์นั้นทิ้ง
compose file ที่มี Redis หรือ PostgreSQLกลายเป็น [services] เพื่อให้ deploy นำบริการเหล่านั้นไปไว้บนเซิร์ฟเวอร์
Dockerfile, ตัว compose file เองไม่ได้ใช้เพื่อรันแอป: erpc worker รัน binary เอง ภายใต้ systemd unit ที่เสริมความปลอดภัย
import --chain ระบุเชนที่แอปใช้ โดยค่าเริ่มต้นคือ solana

import อ่านไดเรกทอรีอย่างไร

ไดเรกทอรีนั้นอาจเป็นไดเรกทอรีที่คุณเพิ่ง clone มาเมื่อนาทีก่อน import จึงอ่านอย่างระมัดระวัง
  • erpc.toml ถูกสร้างขึ้นใหม่ เมื่อมีสิ่งใดอยู่ที่ path นั้นแล้ว import จะปฏิเสธ: ไม่เขียนทับไฟล์และไม่เขียนผ่าน link ในทุกกรณี
  • อ่านไฟล์ปกติที่อยู่ภายในไดเรกทอรี ไฟล์ละไม่เกิน 1 MiB link ที่ชี้ออกไปนอกไดเรกทอรี, pipe, device, ไฟล์ที่ใหญ่กว่านั้น และไฟล์ที่ไม่ใช่ UTF-8 จะไม่ถูกอ่าน และจะแจ้งให้ทราบทีละรายการ
  • ค่าที่ถูกมองว่าเป็น secret จะไม่ถูกคัดลอก การค้นหาข้อมูลรับรองดูจากรูปแบบของค่า การตรวจนี้จึงเป็นเพียงตาข่ายดัก ไม่ใช่สิ่งพิสูจน์: secret ในรูปแบบที่ไม่รู้จักจะถูกคัดลอกเหมือนค่าทั่วไป erpc.toml เป็นไฟล์ของคุณที่ต้องอ่านเองก่อน commit
  • erpc worker check เตือนได้น้อยประเภทกว่าที่ import กันไว้ คำสั่งนี้ไม่แจ้งอะไรเลยเกี่ยวกับ RPC URL ที่มีคีย์อยู่ใน path หรือวลีกู้คืน ที่อยู่ใต้ [vars]: ให้เก็บค่าเหล่านั้นด้วย erpc worker secret put

สิ่งที่แอปของคุณพบบนเซิร์ฟเวอร์

  • การตั้งค่ามาถึงในรูปของตัวแปรสภาพแวดล้อม ทั้ง [vars] และ [secrets] บนเซิร์ฟเวอร์ไม่มี .env และแอปที่อ่านไฟล์ .env ด้วยไลบรารี dotenv ก็ยังทำงานได้ต่อไป
  • ไดเรกทอรีของแอปเองเป็นแบบอ่านอย่างเดียว ไฟล์ที่แอปเขียนจะอยู่ใต้ไดเรกทอรีที่ ERPC_WORKER_STATE_DIR ระบุ (ซึ่งเป็น HOME ของแอปด้วย) โดยการ deploy จะเก็บไดเรกทอรีนี้ไว้ และ erpc worker backup จะสำรองข้อมูลไดเรกทอรีนี้
  • คีย์เทรดมาถึงทาง pipe ไม่ใช่ในไฟล์: ข้อมูล 64 ไบต์ส่งมาทาง file descriptor ที่ ERPC_WORKER_KEY_FD ระบุ ครั้งเดียวเมื่อแอปเริ่มทำงาน พร้อมคีย์สาธารณะใน ERPC_WORKER_PUBKEY แอปที่อ่านไฟล์คีย์ต้องแก้เฉพาะจุดที่อ่านคีย์นั้นจุดเดียว ดูตัวอย่างได้ใน src/wallet.rs ของเทมเพลต pumpfun
  • แอปคือ binary หนึ่งตัวและไฟล์ที่ run.files ระบุไว้ สิ่งอื่นที่แอปเปิดขณะรันต้องอยู่ในรายการนั้น

ขั้นตอนถัดไป