Despliega tu primera aplicación en un servidor con erpc worker

Crea una pequeña API HTTP en Rust con erpc worker, ejecútala en tu máquina y despliégala en un servidor con cuatro comandos.
Esta página describe ERPC CLI v0.1.0-rc.4, una versión preliminar.
erpc worker (alias erpc w) compila tu aplicación en un binario nativo de Linux y la ejecuta en un ERPC VPS, en uno nuevo por horas o en un servidor propio, bajo una unidad systemd reforzada, sin Docker ni ningún runtime de por medio.
Una release que no arranca sana se revierte a la anterior, y varias aplicaciones pueden compartir un servidor, cada una en su propio puerto. Todo lo relativo a la aplicación está en erpc.toml, en su raíz; ese archivo no contiene ningún secreto y se puede incluir en un commit.

Requisitos previos

  • Una cuenta de ERPC, con la sesión iniciada en esta máquina mediante erpc login (Inicio de sesión y claves).
  • ERPC Credit, para un VPS nuevo por horas. Un producto por horas se paga con ERPC Credit, que se compra por adelantado, y se rechaza un inicio que el crédito no cubre. Los precios están en la página Precios y en el ERPC Web Dashboard.
  • Una clave SSH en esta máquina: ssh-keygen -t ed25519, o erpc config set ssh_key <path>.pub para una clave que ya tengas.
  • Una forma de compilar para Linux. Desde un Mac o Windows, el target de Rust para el servidor (rustup target add x86_64-unknown-linux-gnu), zig (brew install zig en macOS) y cargo-zigbuild (cargo install cargo-zigbuild --locked). Desde una máquina Linux del mismo tipo que el servidor (x86-64 en todos los servidores de ERPC), basta con cargo. Sin las herramientas de compilación cruzada, la aplicación se compila con la toolchain de esta máquina, y el binario necesita entonces la glibc con la que se enlazó, que build y deploy indican. Con ellas, se compila para glibc 2.31 o superior.

Desplegar HelloWorld

HelloWorld es una pequeña API HTTP en Rust que no necesita ninguna clave, ningún secreto ni ninguna línea de datos. Responde a GET /, GET /hello/{name} y 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 crea la aplicación en ./hello-world, con su erpc.toml.
  2. run compila la aplicación y la ejecuta en tu máquina, para que puedas llamarla primero con curl.
  3. deploy la compila para el servidor y la despliega. Todo lo que cuesta dinero se muestra antes con su precio por hora, tu saldo y cuánto dura el crédito, y en un terminal solo se inicia tras un sí.
  4. api invoca desde tu máquina la API de la aplicación desplegada, mientras la API sigue en el loopback del servidor.
erpc worker check enumera lo que le falta a la aplicación, y deploy se niega antes de comprar nada cuando falta algo. erpc worker build ejecuta solo la compilación: así puedes ver fallar una compilación antes de comprar un servidor.

Elegir una plantilla

erpc worker init pregunta una sola cosa: qué crear, que eliges con las flechas.
  • HelloWorld es la plantilla con la que empezar.
  • HFT y pumpfun-bot se crean, por ahora, a partir de la plantilla pumpfun: un bot de trading de pump.fun (PumpSwap) portado desde ValidatorsDAO/solana-stream.
--template hft (o helloworld, pumpfun-bot, o un id de plantilla) omite el selector, y --name da nombre a la aplicación. Sin nombre, la aplicación recibe el nombre de la opción elegida (hello-world, hft-bot, pumpfun-bot). Cuando ya existe un directorio con ese nombre, una persona que elige obtiene -2, -3, etc., y un script (--yes, --json, sin terminal) obtiene un error. Sin nadie a quien preguntar y sin --template, se crea HelloWorld.
Un bot de trading necesita una clave y algunos ajustes antes de ejecutarse. Este es su orden:
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 imprime este orden para la aplicación que ha creado. Claves y secretos explica dónde se guardan la clave y los secretos.

Elegir el servidor

deploy usa la primera de estas opciones:
  1. el servidor que ya indica el [env.<name>] de la aplicación;
  2. --vps <id>, un ERPC VPS de tu cuenta;
  3. --new-vps, el VPS por horas más barato de la región más cercana a esta máquina según su zona horaria (--region y --plan eligen otra cosa);
  4. --host <address>, un servidor propio: Ubuntu o Debian con systemd, nftables, sudo y Python 3 en /usr/bin/python3, al que se accede como root o como un usuario con sudo sin contraseña;
  5. si no, en un terminal, una lista de los VPS en ejecución de tu cuenta, con "start a new one" al final.
En un servidor propio, el firewall del worker descarta todas las conexiones entrantes excepto SSH y el puerto de la aplicación, así que un servidor que sirve cualquier otra cosa no es el adecuado.

Desplegar sin una persona ante el terminal

Un script, o un agente como erpc ai, no tiene un terminal en el que responder. Dos opciones le permiten hacer el trabajo de todos modos:
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 responde a la pregunta del precio de cada producto por horas que indica el comando (--new-vps, --grpc, --shreds, --unlimited). También responde al primer inicio de sesión en un servidor que erpc aún no ha dejado con acceso solo por clave, ya sea uno nuevo o uno indicado con --vps <ID>: erpc inicia sesión una vez con la contraseña del servidor, añade tu clave y desactiva el inicio de sesión con contraseña. Sin --yes y sin terminal, un inicio se rechaza antes de comprar nada, con el estado de salida 3.
  • Elegir entre tus servidores sigue necesitando a una persona. Indica el servidor con --new-vps, --vps <ID> o --host.
  • --prepare hace todo lo que no necesita ni la clave de trading ni un secreto, y no inicia, detiene ni reinicia nada. El siguiente erpc worker deploy en un terminal entrega la clave y los secretos e inicia la aplicación. La clave de trading solo se lee para una persona ante el terminal.

Conectar tu aplicación a gRPC, Shreds y Unlimited RPC

Las líneas por horas de ERPC admiten al servidor por su dirección y no aceptan ningún token. Cada línea se inicia para el servidor con su propia opción de deploy, y la aplicación recibe su endpoint como un ajuste:
OpciónLíneaLa aplicación recibe
--grpcGeyser gRPCGRPC_ENDPOINT
--shredsShreds (Shredstream gRPC)SHREDS_ENDPOINT
--unlimitedUnlimited RPC en la región del servidorSOLANA_SEND_RPC_ENDPOINT
  • Cada línea es la más barata de su familia, salvo que --grpc-plan, --shreds-plan o --unlimited-plan indiquen otra.
  • El Unlimited RPC se ejecuta en un servidor dedicado que tarda hasta 45 minutos en configurarse. Sirve sendTransaction y una lista corta de lecturas, no getProgramAccounts ni getTokenAccountsByOwner. Su endpoint es HTTP plano (sin TLS) y solo admite la dirección en la lista blanca.

Líneas para una ejecución en tu máquina

erpc worker run también acepta --grpc y --shreds, para probar aquí la aplicación con datos reales antes de que pase a un servidor.
  • La dirección: las líneas admiten la dirección IPv4 pública de esta máquina, que indicas con --ip. erpc no la busca por sí mismo.
  • La compra: una línea nueva solo se compra en un terminal, después de que se muestre su precio. run no tiene --yes.
  • El final: cuando termina la ejecución, cada línea por horas se finaliza tras preguntar. --keep-lines las mantiene, y se siguen cobrando. Si la ejecución termina de cualquier otra forma (se cierra el terminal, un segundo Ctrl-C), las líneas se mantienen y se cobran.
  • Las cifras: lo que la aplicación mide aquí incluye la distancia de esta máquina a la línea, así que la aplicación es aquí más lenta que en un servidor cercano a la línea.

Próximos pasos