---
title: "Разверните первое приложение на сервере с помощью erpc worker"
description: "Создайте приложение HelloWorld с помощью erpc worker, запустите его на своей машине и разверните на ERPC VPS или на собственном сервере."
canonical: "https://erpc.global/ru/doc/erpc-cli/worker-quickstart/"
locale: "ru"
---

# Разверните первое приложение на сервере с помощью erpc worker

Создайте небольшой HTTP API на Rust с помощью `erpc worker`, запустите его на своей машине и разверните на сервере четырьмя командами.

Эта страница описывает ERPC CLI `v0.1.0-rc.4` — пререлиз.

`erpc worker` (псевдоним `erpc w`) компилирует ваше приложение в нативный бинарный файл Linux и запускает его на ERPC VPS, на новом почасовом VPS или на вашем собственном сервере — в усиленном юните systemd, без Docker и без какой-либо среды выполнения между ними.

Релиз, который после запуска не прошёл проверку работоспособности, откатывается к предыдущему, а несколько приложений могут работать на одном сервере, каждое на своём порту. Всё, что касается приложения, находится в `erpc.toml` в его корне: в этом файле нет ни одного секрета, и его можно закоммитить.

## Что понадобится

- **Аккаунт ERPC**, в который выполнен вход на этой машине с помощью `erpc login` ([Вход и ключи](https://erpc.global/ru/doc/erpc-cli/sign-in-and-keys/)).
- **ERPC Credit** — для нового почасового VPS. Почасовой продукт оплачивается из ERPC Credit, который покупается заранее, а запуск, который кредит не покрывает, отклоняется. Цены — на странице [Цены](https://erpc.global/ru/price/) и в [ERPC Web Dashboard](https://dashboard.erpc.global/ru).
- **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` (`brew install zig` на macOS) и `cargo-zigbuild` (`cargo install cargo-zigbuild --locked`). С машины Linux того же типа, что и сервер (у всех серверов ERPC — x86-64), не нужно ничего, кроме cargo. Без инструментов кросс-сборки приложение собирается собственным тулчейном этой машины, и тогда бинарному файлу нужна та glibc, с которой он был слинкован; её называют `build` и `deploy`. С ними приложение собирается для glibc 2.31 и новее.

## Развёртывание HelloWorld

HelloWorld — небольшой HTTP API на Rust, которому не нужны ни ключ, ни секрет, ни линия данных. Он отвечает на `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` собирает приложение и запускает его на вашей машине, чтобы сначала можно было вызвать его через curl.
3. `deploy` собирает его для сервера и развёртывает. Всё, что стоит денег, сначала показывается с почасовой ценой, вашим балансом и тем, на сколько хватит кредита, а в терминале запускается только после ответа «да».
4. `api` вызывает API развёрнутого приложения с вашей машины, при этом API остаётся на loopback сервера.

`erpc worker check` показывает, чего не хватает приложению, а `deploy`, если чего-то не хватает, отказывается работать ещё до того, как что-либо купить. `erpc worker build` выполняет только сборку — так можно увидеть, что сборка не проходит, до покупки сервера.

## Выбор шаблона

`erpc worker init` спрашивает только одно: что создать; вариант выбирается клавишами со стрелками.

- **HelloWorld** — шаблон, с которого стоит начать.
- **HFT** и **pumpfun-bot** пока оба создаются из шаблона pumpfun: это торговый бот для pump.fun (PumpSwap), перенесённый из ValidatorsDAO/solana-stream.

`--template hft` (или `helloworld`, `pumpfun-bot`, или ID шаблона) пропускает выбор, а `--name` задаёт имя приложения. Без имени приложение называется по выбранному варианту (`hello-world`, `hft-bot`, `pumpfun-bot`). Если каталог с таким именем уже существует, человек, который выбирает вариант, получает `-2`, `-3` и так далее, а скрипт (`--yes`, `--json`, нет терминала) получает ошибку. Если спросить некого и `--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` выводит этот порядок для созданного приложения. Где хранятся ключ и секреты, описано на странице [Ключи и секреты](https://erpc.global/ru/doc/erpc-cli/worker-secrets/).

## Выбор сервера

`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».

На вашем собственном сервере брандмауэр воркера отбрасывает все входящие соединения, кроме SSH и порта приложения, поэтому сервер, который обслуживает что-то ещё, для этого не подходит.

## Развёртывание без человека за терминалом

У скрипта или агента, например `erpc ai`, нет терминала, в котором можно ответить. Два флага позволяют всё равно выполнить работу:

```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` и без терминала запуск отклоняется ещё до какой-либо покупки, с кодом завершения 3.
- **Выбор среди ваших серверов по-прежнему требует человека.** Укажите сервер через `--new-vps`, `--vps <ID>` или `--host`.
- **`--prepare`** делает всё, для чего не нужны ни торговый ключ, ни секрет, и ничего не запускает, не останавливает и не перезапускает. Следующий `erpc worker deploy` в терминале передаёт ключ и секреты и запускает приложение. Торговый ключ читается только для человека за терминалом.

## Подключение приложения к gRPC, Shreds и Unlimited RPC

Почасовые линии ERPC пропускают сервер по его адресу и не принимают никакого токена. Каждую линию для сервера запускает свой флаг в `deploy`, а приложение получает её endpoint как настройку:

| Флаг | Линия | Приложение получает |
| --- | --- | --- |
| `--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` и короткий список методов чтения, но не `getProgramAccounts` и не `getTokenAccountsByOwner`. Его endpoint — обычный HTTP (без TLS), и он пропускает только адрес, внесённый в allowlist.

### Линии для запуска на вашей машине

`erpc worker run` тоже принимает `--grpc` и `--shreds`, чтобы можно было опробовать приложение здесь на реальных данных, прежде чем оно попадёт на сервер.

- **Адрес:** линии пропускают публичный IPv4-адрес этой машины, который вы передаёте через `--ip`. erpc сам его не определяет.
- **Покупка:** новая линия покупается только в терминале, после того как показана её цена. У `run` нет `--yes`.
- **Завершение:** когда запуск заканчивается, каждая почасовая линия завершается после вопроса. `--keep-lines` оставляет их, и они по-прежнему оплачиваются. Если запуск заканчивается иначе (терминал закрыт, повторное нажатие Ctrl-C), линии остаются и оплачиваются.
- **Цифры:** то, что приложение измеряет здесь, включает расстояние от этой машины до линии, поэтому здесь оно работает медленнее, чем то же приложение на сервере рядом с линией.

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

- [Импорт приложения](https://erpc.global/ru/doc/erpc-cli/worker-import/): разверните уже имеющееся приложение на любом языке.
- [Ключи и секреты](https://erpc.global/ru/doc/erpc-cli/worker-secrets/): храните торговый ключ и секреты вне диска сервера.
- [Брандмауэр и WAF](https://erpc.global/ru/doc/erpc-cli/worker-firewall-and-waf/): поставьте публичный API за WAF.
- [Статус и оплата](https://erpc.global/ru/doc/erpc-cli/worker-status-and-billing/): следите за приложением и смотрите, сколько оно стоит в час.
