erpc worker import로 이미 가지고 있는 앱 배포하기

erpc worker import는 이미 가지고 있는 앱을 있는 그대로 가져옵니다. 앱의 erpc.toml을 작성하며, 앱의 코드는 하나도 바꾸지 않습니다.
이 페이지는 프리릴리스인 ERPC CLI v0.1.0-rc.4를 설명합니다.

가져와서 배포하기

앱은 현재 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 패키지는 init으로 만든 앱과 마찬가지로 cargo build --release로 빌드됩니다. 앱의 이름은 --name으로 따로 지정하지 않는 한 패키지 이름을 따르며, 패키지에 바이너리가 여러 개 있으면 --bin으로 고릅니다. 워크스페이스 루트는 거부되므로, import에는 패키지를 지정하세요.
  • 어디서든, 어떤 언어로든 빌드한 Linux 바이너리도 --binary <PATH>로 같은 방식으로 배포되며, 있는 그대로 전송됩니다. erpc는 바이너리의 헤더를 읽고 서버에서 실행할 수 없는 것은 거부합니다. macOS나 Windows 바이너리, 스크립트, 공유 라이브러리, 중간에 잘린 파일, build.target과 다른 아키텍처가 이에 해당합니다. 바이너리는 정적이거나, 로더가 일반적인 경로에 있는 glibc에 링크되어 있어야 합니다. 바이너리는 앱의 파일이어야 하므로, 그 이름으로 된 링크가 앱의 디렉터리 밖을 가리키면 거부됩니다. 쓸 수 없는 바이너리이면 배포는 서버를 구매하기 전에 멈춥니다. 변경 사항을 반영해야 하는 배포 전에는 바이너리를 다시 빌드하세요.

import가 읽는 것

디렉터리에 있는 것import가 하는 일
.env.example 및 비슷한 예시 파일각 이름은 설정이 될 수 있으면 설정이 됩니다. 대문자, 숫자, _로 이루어지지 않은 이름(숫자로 시작하는 이름 포함)과, erpc나 서버가 직접 설정하는 이름(ERPC_WORKER_…, LD_…)은 제외됩니다. 일반 설정은 예시의 값과 함께 [vars]에 들어갑니다. 이름으로 보아 시크릿으로 보이거나 값에 자격 증명이 들어 있는 설정은 그것을 보관하는 명령과 함께 안내되며, 값은 복사되지 않습니다
.env포트 번호를 제외하면 이름만 읽습니다
PORT, API_PORT, Dockerfile의 EXPOSE--port로 지정하지 않으면 run.port가 됩니다. --health <PATH>를 주면 그 포트에 헬스 체크가 추가됩니다
GRPC_ENDPOINT, SHREDS_ENDPOINT 및 데이터 회선이 제공하는 그 밖의 설정[vars]에서 제외됩니다. deploy에 주는 해당 회선의 플래그가 이 설정을 정합니다
wallet.json, id.json, *keypair.jsonerpc worker key import <FILE> --wipe와 함께 안내됩니다. 이 명령은 키를 erpc worker가 읽는 곳에 보관하고 파일을 지웁니다
Redis나 PostgreSQL이 있는 compose 파일[services]가 되어 deploy가 서버에 배치합니다
Dockerfile, compose 파일 자체앱 실행에는 사용하지 않습니다. erpc worker가 보안이 강화된 systemd 유닛으로 바이너리를 직접 실행합니다
import --chain은 앱이 대상으로 하는 체인을 지정하며, 기본값은 solana입니다.

import가 디렉터리를 읽는 방식

방금 클론한 디렉터리일 수도 있으므로 import는 신중하게 읽습니다.
  • erpc.toml은 새로 만듭니다. 그 경로에 무엇이든 있으면 import는 거부합니다. 파일을 덮어쓰거나 링크를 통해 쓰는 일은 절대 없습니다.
  • 디렉터리 안의 일반 파일을 각각 1 MiB까지 읽습니다. 디렉터리 밖을 가리키는 링크, 파이프, 장치, 그보다 큰 파일, UTF-8이 아닌 파일은 읽지 않으며, 각각 그 사실을 알려 줍니다.
  • 시크릿으로 판단한 값은 복사하지 않습니다. 자격 증명은 형태로 찾으므로 이 검사는 그물일 뿐 증명이 아닙니다. 알지 못하는 형태의 시크릿은 다른 값처럼 복사됩니다. 커밋하기 전에 erpc.toml을 직접 읽어 보세요.
  • erpc worker check가 경고하는 종류는 import가 보류하는 종류보다 적습니다. [vars] 아래에 경로에 키가 들어간 RPC URL이나 복구 문구가 있어도 아무 말도 하지 않습니다. 이런 값은 erpc worker secret put으로 보관하세요.

앱이 서버에서 보게 되는 것

  • 설정은 환경 변수로 전달됩니다. [vars]와 [secrets] 모두 마찬가지입니다. 서버에는 .env가 없으며, dotenv 라이브러리로 .env 파일을 읽는 앱도 계속 동작합니다.
  • 앱 자신의 디렉터리는 읽기 전용입니다. 앱이 쓰는 파일은 ERPC_WORKER_STATE_DIR이 가리키는 디렉터리(앱의 HOME이기도 함) 아래에 놓이며, 이 디렉터리는 배포 후에도 유지되고 erpc worker backup이 백업합니다.
  • 트레이딩 키는 파일이 아니라 파이프로 전달됩니다. 앱이 시작될 때 한 번, ERPC_WORKER_KEY_FD가 가리키는 파일 디스크립터로 64바이트가 전달되고, 공개 키는 ERPC_WORKER_PUBKEY에 들어 있습니다. 키 파일을 읽는 앱은 그 읽기 한 곳을 바꿔야 합니다. pumpfun 템플릿의 src/wallet.rs에 그 예가 있습니다.
  • 앱은 바이너리 하나와 run.files에 나열된 파일로 이루어집니다. 실행 중에 여는 그 밖의 파일은 모두 이 목록에 있어야 합니다.

다음 단계

  • 키 및 시크릿: import가 보류한 설정과 트레이딩 키를 보관합니다.
  • 방화벽 및 WAF: 누가 앱에 접근할 수 있는지 정합니다.
  • worker 가이드: import가 읽는 모든 파일과, 찾는 자격 증명의 형태를 다룹니다.