erpc worker로 첫 앱을 서버에 배포하기
erpc worker를 사용해 Rust로 작은 HTTP API를 만들어 이 머신에서 실행하고, 명령 네 개로 서버에 배포합니다.이 페이지는 프리릴리스인 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으로 결제되며, 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(macOS에서는brew install zig),cargo-zigbuild(cargo install cargo-zigbuild --locked)가 필요합니다. 서버와 같은 종류의 Linux 머신(ERPC 서버는 모두 x86-64)에서는 cargo 외에 아무것도 필요 없습니다. 크로스 빌드 도구가 없으면 앱은 이 머신의 툴체인으로 빌드되며, 이때 바이너리는 링크될 때 사용한 glibc를 필요로 합니다. 그 glibc는build와deploy가 알려 줍니다. 크로스 빌드 도구가 있으면 glibc 2.31 이상용으로 빌드됩니다.
HelloWorld 배포하기
HelloWorld는 키도, 시크릿도, 데이터 회선도 필요 없는, Rust로 작성한 작은 HTTP API입니다.
GET /, GET /hello/{name}, GET /healthz에 응답합니다.bash
init은./hello-world에 앱을 만들고, 그erpc.toml도 함께 만듭니다.run은 앱을 빌드해 이 머신에서 실행하므로, 먼저 curl로 호출해 볼 수 있습니다.deploy는 앱을 서버용으로 빌드해 배포합니다. 비용이 드는 것은 모두 시간당 가격, 잔액, Credit으로 얼마 동안 쓸 수 있는지와 함께 먼저 표시되며, 터미널에서는 yes로 답한 뒤에만 시작합니다.api는 API를 서버의 loopback에 그대로 둔 채, 배포된 앱의 API를 이 머신에서 호출합니다.
erpc worker check는 앱에 빠진 것을 나열하며, 빠진 것이 있으면 deploy는 무엇이든 구매하기 전에 거부합니다. erpc worker build는 빌드만 실행합니다. 서버를 구매하기 전에 빌드가 실패하는지 확인하는 방법입니다.템플릿 선택하기
erpc worker init이 묻는 것은 무엇을 만들지 하나뿐이며, 화살표 키로 고릅니다.- HelloWorld는 처음 시작하기에 알맞은 템플릿입니다.
- HFT와 pumpfun-bot은 현재로서는 둘 다 pumpfun 템플릿으로 만들어집니다. ValidatorsDAO/solana-stream에서 이식한 pump.fun(PumpSwap) 트레이딩 봇입니다.
--template hft(또는 helloworld, pumpfun-bot, 템플릿 id)를 지정하면 선택 화면을 건너뛰며, --name은 앱의 이름을 정합니다. 이름이 없으면 앱은 선택한 항목의 이름(hello-world, hft-bot, pumpfun-bot)을 따릅니다. 같은 이름의 디렉터리가 이미 있으면 사람이 고르는 경우에는 -2, -3 등이 붙고, 스크립트(--yes, --json, 터미널 없음)에서는 오류가 발생합니다. 물어볼 사람이 없고 --template도 없으면 HelloWorld가 만들어집니다.트레이딩 봇은 실행하기 전에 키와 몇 가지 설정이 필요합니다. 순서는 다음과 같습니다.
bash
init은 만든 앱에 맞춰 이 순서를 출력합니다. 키와 시크릿을 어디에 보관하는지는 키 및 시크릿에서 다룹니다.서버 선택하기
deploy는 다음 중 첫 번째로 해당하는 것을 사용합니다.- 앱의
[env.<name>]에 이미 지정된 서버 --vps <id>: 계정의 ERPC VPS--new-vps: 이 머신의 시간대로 판단해 가장 가까운 리전에서 가장 저렴한 시간별 과금 VPS(--region과--plan으로 다르게 고를 수 있습니다)--host <address>: 직접 보유한 서버. systemd, nftables,sudo, 그리고/usr/bin/python3의 Python 3이 있는 Ubuntu 또는 Debian이어야 하며, root 또는 비밀번호 없이 sudo를 쓸 수 있는 사용자로 접속합니다.- 그 밖의 경우, 터미널에서는 계정에서 실행 중인 VPS 목록이 표시되고 맨 끝에 "start a new one"이 있습니다.
직접 보유한 서버에서는 worker의 방화벽이 SSH와 앱의 포트를 제외한 모든 들어오는 연결을 드롭하므로, 그 밖의 서비스를 제공하는 서버는 사용하기에 적합하지 않습니다.
터미널 앞에 사람이 없을 때 배포하기
스크립트나
erpc ai 같은 에이전트에는 응답할 터미널이 없습니다. 그래도 플래그 두 개로 작업을 진행할 수 있습니다.bash
--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의 플래그가 하나씩 있어 그 플래그로 해당 서버용 회선이 시작되고, 앱은 그 엔드포인트를 설정으로 받습니다.--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를 한 번 더 누른 경우) 회선은 남아 있고 과금됩니다. - 수치: 여기서 앱이 측정하는 값에는 이 머신에서 회선까지의 거리가 포함되므로, 회선 가까이에 있는 서버에서 실행하는 같은 앱보다 느립니다.
다음 단계
- 앱 가져오기: 이미 가지고 있는 앱을 언어에 관계없이 배포합니다.
- 키 및 시크릿: 트레이딩 키와 시크릿을 서버의 디스크에 두지 않습니다.
- 방화벽 및 WAF: 공개 API를 WAF 뒤에 둡니다.
- 상태 및 요금 청구: 앱을 지켜보고 시간당 비용을 확인합니다.






