---
title: "deploy แอปแรกของคุณไปยังเซิร์ฟเวอร์ด้วย erpc worker"
description: "สร้างแอป HelloWorld ด้วย erpc worker รันบนเครื่องของคุณ แล้ว deploy ไปยัง ERPC VPS หรือเซิร์ฟเวอร์ของคุณเอง"
canonical: "https://erpc.global/th/doc/erpc-cli/worker-quickstart/"
locale: "th"
---

# deploy แอปแรกของคุณไปยังเซิร์ฟเวอร์ด้วย erpc worker

สร้าง HTTP API ขนาดเล็กด้วย Rust โดยใช้ `erpc worker` รันบนเครื่องของคุณ แล้ว deploy ไปยังเซิร์ฟเวอร์ด้วยคำสั่งสี่คำสั่ง

หน้านี้อธิบาย ERPC CLI `v0.1.0-rc.4` ซึ่งเป็นเวอร์ชัน pre-release

`erpc worker` (ชื่อย่อ `erpc w`) คอมไพล์แอปของคุณเป็น native Linux binary แล้วรันบน ERPC VPS, VPS รายชั่วโมงเครื่องใหม่ หรือเซิร์ฟเวอร์ของคุณเอง ภายใต้ systemd unit ที่เสริมความปลอดภัย โดยไม่มี Docker และไม่มี runtime คั่นกลาง

release ที่ไม่ทำงานปกติหลังเริ่มจะถูก rollback กลับไปยัง release ก่อนหน้า และหลายแอปใช้เซิร์ฟเวอร์เดียวกันได้ โดยแต่ละแอปมีพอร์ตของตัวเอง ทุกอย่างเกี่ยวกับแอปอยู่ใน `erpc.toml` ที่ root ของแอป ซึ่งไม่มี secret อยู่ภายในและ commit ได้

## ข้อกำหนดเบื้องต้น

- **บัญชี ERPC** ที่ลงชื่อเข้าใช้บนเครื่องนี้ด้วย `erpc login` แล้ว ([ลงชื่อเข้าใช้และคีย์](https://erpc.global/th/doc/erpc-cli/sign-in-and-keys/))
- **ERPC Credit** สำหรับ VPS รายชั่วโมงเครื่องใหม่ บริการรายชั่วโมงชำระด้วย ERPC Credit ซึ่งซื้อไว้ล่วงหน้า และหาก credit ไม่พอครอบคลุมการเริ่มใด การเริ่มนั้นจะถูกปฏิเสธ ดูราคาได้ที่ [ราคา](https://erpc.global/th/price/) และ [ERPC Web Dashboard](https://dashboard.erpc.global/th)
- **SSH key** บนเครื่องนี้: `ssh-keygen -t ed25519` หรือ `erpc config set ssh_key <path>.pub` สำหรับคีย์ที่คุณมีอยู่แล้ว
- **วิธี build สำหรับ Linux** หากใช้ Mac หรือ Windows ต้องมี Rust target สำหรับเซิร์ฟเวอร์ (`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 หากไม่มีเครื่องมือ cross-build แอปจะถูก build ด้วย toolchain ของเครื่องนี้เอง และ binary จะต้องใช้ glibc ที่ใช้ link ตอน build ซึ่ง `build` และ `deploy` จะระบุไว้ หากมีเครื่องมือเหล่านี้ แอปจะถูก build สำหรับ glibc 2.31 ขึ้นไป

## การ deploy HelloWorld

HelloWorld คือ HTTP API ขนาดเล็กที่เขียนด้วย Rust ซึ่งไม่ต้องใช้คีย์ ไม่ต้องใช้ 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` สร้างแอปไว้ใน `./hello-world` พร้อม `erpc.toml` ของแอป
2. `run` build แอปแล้วรันบนเครื่องของคุณ เพื่อให้คุณเรียกด้วย curl ได้ก่อน
3. `deploy` build แอปสำหรับเซิร์ฟเวอร์แล้ว deploy แอปนั้น สิ่งใดที่มีค่าใช้จ่ายจะแสดงให้เห็นก่อน พร้อมราคารายชั่วโมง ยอดคงเหลือของคุณ และระยะเวลาที่ credit จะใช้ได้ และเมื่ออยู่ในเทอร์มินัล จะเริ่มหลังจากตอบ yes เท่านั้น
4. `api` เรียก API ของแอปที่ deploy แล้วจากเครื่องของคุณ โดย API ยังคงอยู่บน loopback ของเซิร์ฟเวอร์

`erpc worker check` แสดงรายการสิ่งที่แอปยังขาด และเมื่อยังขาดบางอย่าง `deploy` จะปฏิเสธก่อนซื้อสิ่งใด `erpc worker build` รันเฉพาะการ build ซึ่งเป็นวิธีดูว่า build ล้มเหลวก่อนที่จะซื้อเซิร์ฟเวอร์

## เลือกเทมเพลต

`erpc worker init` ถามเพียงเรื่องเดียว คือจะสร้างอะไร โดยเลือกด้วยปุ่มลูกศร

- **HelloWorld** คือเทมเพลตที่ควรใช้เริ่มต้น
- **HFT** และ **pumpfun-bot** ในตอนนี้สร้างจากเทมเพลต pumpfun ทั้งคู่ ซึ่งเป็นบอทเทรด pump.fun (PumpSwap) ที่ port มาจาก ValidatorsDAO/solana-stream

`--template hft` (หรือ `helloworld`, `pumpfun-bot` หรือ id ของเทมเพลต) จะข้ามการเลือก และ `--name` ใช้ตั้งชื่อแอป หากไม่ระบุชื่อ แอปจะได้ชื่อตามสิ่งที่เลือก (`hello-world`, `hft-bot`, `pumpfun-bot`) เมื่อมีไดเรกทอรีชื่อนั้นอยู่แล้ว คนที่เลือกเองจะได้ `-2`, `-3` ต่อไปเรื่อย ๆ ส่วนสคริปต์ (`--yes`, `--json`, ไม่มีเทอร์มินัล) จะได้ error เมื่อไม่มีใครให้ถามและไม่มี `--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` จะแสดงลำดับนี้สำหรับแอปที่สร้างขึ้น ส่วน [คีย์และ secret](https://erpc.global/th/doc/erpc-cli/worker-secrets/) อธิบายว่าคีย์และ secret ถูกเก็บไว้ที่ใด

## เลือกเซิร์ฟเวอร์

`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 จะ drop การเชื่อมต่อขาเข้าทุกรายการยกเว้น SSH และพอร์ตของแอป ดังนั้นเซิร์ฟเวอร์ที่ให้บริการอย่างอื่นอยู่จึงไม่ใช่เซิร์ฟเวอร์ที่ควรใช้

## deploy โดยไม่มีคนอยู่ที่เทอร์มินัล

สคริปต์ หรือเอเจนต์อย่าง `erpc ai` ไม่มีเทอร์มินัลให้ตอบ แต่มี flag สองตัวที่ช่วยให้ทำงานได้เช่นเดียวกัน:

```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` และไม่มีเทอร์มินัล การเริ่มจะถูกปฏิเสธก่อนซื้อสิ่งใด โดยมี exit status 3
- **การเลือกระหว่างเซิร์ฟเวอร์ของคุณยังคงต้องอาศัยคน** ให้ระบุเซิร์ฟเวอร์ด้วย `--new-vps`, `--vps <ID>` หรือ `--host`
- **`--prepare`** ทำทุกอย่างที่ไม่ต้องใช้ทั้งคีย์เทรดและ secret และไม่เริ่ม หยุด หรือรีสตาร์ทสิ่งใดเลย `erpc worker deploy` ครั้งถัดไปในเทอร์มินัลจะส่งมอบคีย์และ secret แล้วเริ่มแอป คีย์เทรดจะถูกอ่านเฉพาะเมื่อมีคนอยู่ที่เทอร์มินัลเท่านั้น

## เชื่อมต่อแอปของคุณกับ gRPC, Shreds และ Unlimited RPC

สายข้อมูลรายชั่วโมงของ ERPC อนุญาตเซิร์ฟเวอร์ตามที่อยู่ของเซิร์ฟเวอร์ และไม่รับ token โดย `deploy` มี flag หนึ่งตัวต่อสายข้อมูลหนึ่งสาย สำหรับเริ่มสายนั้นให้เซิร์ฟเวอร์ และแอปจะได้รับ endpoint ของสายข้อมูลนั้นเป็นการตั้งค่า:

| Flag | สายข้อมูล | สิ่งที่แอปได้รับ |
| --- | --- | --- |
| `--grpc` | Geyser gRPC | `GRPC_ENDPOINT` |
| `--shreds` | Shreds (Shredstream gRPC) | `SHREDS_ENDPOINT` |
| `--unlimited` | Unlimited RPC ในภูมิภาคของเซิร์ฟเวอร์ | `SOLANA_SEND_RPC_ENDPOINT` |

- สายข้อมูลแต่ละสายจะเป็นแพ็กเกจที่ถูกที่สุดในกลุ่มของตัวเอง เว้นแต่ `--grpc-plan`, `--shreds-plan` หรือ `--unlimited-plan` จะระบุแพ็กเกจไว้
- Unlimited RPC รันบนเซิร์ฟเวอร์เฉพาะที่ใช้เวลาเตรียมนานถึง 45 นาที โดยให้บริการ `sendTransaction` และ method สำหรับอ่านข้อมูลอีกจำนวนไม่มาก แต่ไม่ให้บริการ `getProgramAccounts` หรือ `getTokenAccountsByOwner` ส่วน endpoint ของ Unlimited RPC เป็น HTTP ธรรมดา (ไม่มี TLS) และอนุญาตเฉพาะที่อยู่ที่อยู่ใน whitelist เท่านั้น

### สายข้อมูลสำหรับการรันบนเครื่องของคุณ

`erpc worker run` รับ `--grpc` และ `--shreds` ได้เช่นกัน เพื่อทดลองแอปที่นี่กับข้อมูลจริงก่อนนำไปไว้บนเซิร์ฟเวอร์

- **ที่อยู่:** สายข้อมูลจะอนุญาตที่อยู่ IPv4 สาธารณะของเครื่องนี้ ซึ่งคุณส่งด้วย `--ip` โดย erpc จะไม่ค้นหาที่อยู่นี้เอง
- **การซื้อ:** สายข้อมูลใหม่จะถูกซื้อเฉพาะในเทอร์มินัล หลังจากแสดงราคาแล้วเท่านั้น `run` ไม่มี `--yes`
- **การยุติ:** เมื่อการรันจบลง สายข้อมูลรายชั่วโมงแต่ละสายจะถูกยุติหลังจากถามก่อน `--keep-lines` จะเก็บสายข้อมูลไว้ และยังคงถูกเรียกเก็บเงิน หากการรันจบลงด้วยวิธีอื่น (ปิดเทอร์มินัล หรือกด Ctrl-C ครั้งที่สอง) สายข้อมูลจะยังคงอยู่และถูกเรียกเก็บเงิน
- **ตัวเลข:** สิ่งที่แอปวัดได้ที่นี่รวมระยะทางจากเครื่องนี้ไปยังสายข้อมูลไว้ด้วย จึงช้ากว่าแอปเดียวกันที่รันบนเซิร์ฟเวอร์ที่อยู่ใกล้สายข้อมูล

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

- [นำเข้าแอป](https://erpc.global/th/doc/erpc-cli/worker-import/): deploy แอปที่คุณมีอยู่แล้ว ไม่ว่าจะเขียนด้วยภาษาใด
- [คีย์และ secret](https://erpc.global/th/doc/erpc-cli/worker-secrets/): เก็บคีย์เทรดและ secret ไว้นอกดิสก์ของเซิร์ฟเวอร์
- [ไฟร์วอลล์และ WAF](https://erpc.global/th/doc/erpc-cli/worker-firewall-and-waf/): วาง API สาธารณะไว้หลัง WAF
- [สถานะและการเรียกเก็บเงิน](https://erpc.global/th/doc/erpc-cli/worker-status-and-billing/): ติดตามแอปและดูค่าใช้จ่ายรายชั่วโมง
