---
title: "deploy แอปที่คุณมีอยู่แล้วด้วย erpc worker import"
description: "erpc worker import อ่านไดเรกทอรีของแอปแล้วเขียน erpc.toml ทำให้ Cargo package หรือ Linux binary ที่เขียนด้วยภาษาใดก็ได้ deploy ได้โดยไม่ต้องแก้โค้ด"
canonical: "https://erpc.global/th/doc/erpc-cli/worker-import/"
locale: "th"
---

# 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` ระบุไว้** สิ่งอื่นที่แอปเปิดขณะรันต้องอยู่ในรายการนั้น

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

- [คีย์และ secret](https://erpc.global/th/doc/erpc-cli/worker-secrets/): เก็บการตั้งค่าที่ `import` กันไว้ และคีย์เทรด
- [ไฟร์วอลล์และ WAF](https://erpc.global/th/doc/erpc-cli/worker-firewall-and-waf/): เลือกว่าใครเข้าถึงแอปได้
- [คู่มือ worker](https://github.com/elsoul/erpc-cli/blob/v0.1.0-rc.4/docs/worker.md): ทุกไฟล์ที่ `import` อ่าน และรูปแบบของข้อมูลรับรองที่ค้นหา
