Разверните уже имеющееся приложение с помощью 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 собирается командой cargo build --release, так же как приложение, созданное init. Приложение называется по имени пакета, если --name не задаёт другое, а --bin выбирает бинарный файл, когда в пакете их несколько. Корень workspace отклоняется: направьте import на сам пакет.
  • Бинарный файл Linux, собранный где угодно и на любом языке, развёртывается так же — с --binary <PATH> — и поставляется как есть. erpc читает его заголовок и отклоняет файл, который сервер не может запустить: бинарный файл macOS или Windows, скрипт, разделяемую библиотеку, обрезанный файл или файл для архитектуры, отличной от build.target. Бинарный файл должен быть статическим или слинкованным с glibc, с загрузчиком по обычному пути. Это файл приложения: ссылка под этим именем, ведущая за пределы каталога приложения, отклоняется. Развёртывание останавливается на непригодном бинарном файле ещё до покупки сервера. Пересоберите бинарный файл перед развёртыванием, которое должно включать изменение.

Что читает import

В каталогеЧто import с этим делает
.env.example и похожие файлы-примерыКаждое имя становится настройкой, если может ею быть: имя, которое не состоит из заглавных букв, цифр и _ (без цифры в начале), или имя, которое erpc или сервер задают сами (ERPC_WORKER_…, LD_…), пропускается. Обычное имя попадает в [vars] со значением из примера. Имя, которое само похоже на имя секрета или значение которого содержит учётные данные, указывается вместе с командой, которая его сохранит, а его значение не копируется
.envЧитаются только имена, кроме номера порта
PORT, API_PORT, EXPOSE из Dockerfilerun.port, если его не задаёт --port. --health <PATH> добавляет проверку работоспособности на этом порту
GRPC_ENDPOINT, SHREDS_ENDPOINT и другие настройки, которые предоставляет линия данныхНе попадают в [vars]: их задаёт флаг линии в deploy
wallet.json, id.json, *keypair.jsonУказываются вместе с командой erpc worker key import <FILE> --wipe, которая помещает ключ туда, откуда его читает erpc worker, и стирает файл
Compose-файл с Redis или PostgreSQL[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. Он ничего не сообщает об RPC URL с ключом в пути или о фразе восстановления в [vars]: храните такие значения с помощью erpc worker secret put.

Что ваше приложение находит на сервере

  • Настройки поступают как переменные окружения — и [vars], и [secrets]. На сервере нет .env, и приложение, которое читает файл .env библиотекой dotenv, продолжает работать.
  • Его собственный каталог доступен только для чтения. Файлы, которые оно записывает, попадают в каталог, указанный в ERPC_WORKER_STATE_DIR (он же его HOME); развёртывание этот каталог сохраняет, а erpc worker backup создаёт его резервную копию.
  • Торговый ключ поступает через канал, а не в файле: 64 байта через файловый дескриптор, указанный в ERPC_WORKER_KEY_FD, один раз, при запуске приложения, а открытый ключ — в ERPC_WORKER_PUBKEY. В приложении, которое читает файл ключа, нужно изменить это одно чтение; как это сделать, показывает src/wallet.rs шаблона pumpfun.
  • Это один бинарный файл и файлы, перечисленные в run.files. Всё остальное, что оно открывает во время работы, должно быть в этом списке.

Дальнейшие шаги