MAATRIX / Блог / VPS для Rust: деплой actix-web и axum

VPS для Rust: деплой actix-web и axum

Блог MAATRIX · 2026-07-07

Rust даёт скорость C и безопасность памяти, а на выходе — компактный бинарник. Соберём release-версию, поднимем сервис на actix-web или axum под systemd и закроем его nginx с TLS.

Почему Rust хорош на сервере

['Rust-сервисы компилируются в нативный бинарник без сборщика мусора и рантайма. Производительность близка к C, а модель владения памятью исключает целый класс ошибок ещё на этапе компиляции.', 'На практике это означает предсказуемую задержку под нагрузкой и низкое потребление ресурсов. Веб-фреймворки actix-web и axum держат десятки тысяч запросов в секунду даже на скромном железе.', '
  • Нет GC — стабильная латентность без пауз.
  • Компактный бинарник — деплой как у Go.
  • Async на tokio — эффективная работа с I/O при малом числе потоков.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Rust

Установка инструментов сборки

['Собирать Rust удобнее локально или в CI, но если нужно на сервере — ставим rustup. Для сборки понадобится компоновщик и заголовки.', "
sudo apt update && sudo apt install -y build-essential pkg-config libssl-dev nginx\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env
"]

Сборка release

['Профиль release включает оптимизации и убирает отладочную информацию. Бинарник появится в target/release.', '
cargo build --release\nls -lh target/release/myapp
', 'Пример минимального сервиса на axum, который слушает локальный порт:', '
use axum::{routing::get, Router};\n\n#[tokio::main]\nasync fn main() {\n    let app = Router::new().route("/", get(|| async { "ok" }));\n    let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await.unwrap();\n    axum::serve(listener, app).await.unwrap();\n}
', 'Готовый бинарник копируем на VPS: scp target/release/myapp appuser@SERVER_IP:/opt/rustapp/. Если целевая система отличается от вашей по версии glibc, соберите статически под musl — тогда бинарник запустится на любом дистрибутиве без оглядки на системные библиотеки.', '
rustup target add x86_64-unknown-linux-musl\ncargo build --release --target x86_64-unknown-linux-musl
']

systemd для Rust-сервиса

['Как и для любого бинарника, надёжнее всего доверить запуск systemd — он поднимет процесс после сбоя и ребута.', '
[Unit]\nDescription=Rust web service\nAfter=network.target\n\n[Service]\nUser=appuser\nWorkingDirectory=/opt/rustapp\nExecStart=/opt/rustapp/myapp\nRestart=always\nRestartSec=3\nEnvironment=RUST_LOG=info\n\n[Install]\nWantedBy=multi-user.target
', '
sudo systemctl daemon-reload\nsudo systemctl enable --now rustapp\njournalctl -u rustapp -f
', 'Переменная RUST_LOG управляет уровнем логирования через крейт tracing или env_logger — на проде обычно ставят info, а debug включают точечно при разборе инцидентов. Для усиления изоляции добавьте в секцию Service директивы песочницы: NoNewPrivileges, ProtectSystem=strict и PrivateTmp — они ограничивают процесс, если приложение вдруг скомпрометируют.']

nginx, TLS и фаервол

['Наружу выставляем nginx, приложение остаётся на 127.0.0.1. Для WebSocket-соединений (частый кейс в actix) добавьте проброс заголовков Upgrade.', '
server {\n    listen 80;\n    server_name example.com;\n    location / {\n        proxy_pass http://127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection "upgrade";\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}
', '
sudo nginx -t && sudo systemctl reload nginx\nsudo certbot --nginx -d example.com
']

Ресурсы, железо и типичные грабли

['Сборка Rust любит CPU и диск: релиз крупного проекта заметно быстрее идёт на NVMe. На тарифах MAATRIX это AMD EPYC + NVMe, поэтому cargo build не превращается в ожидание, а рантайм-задержки остаются низкими. Локации UK и США плюс оплата из России (карта РФ, СБП, крипта, MAAT) закрывают вопрос зарубежного сервера.', '
  • Мало RAM для сборки — линковка большого крейта может упасть по OOM; собирайте в CI или дайте swap.
  • Забыли --release — debug-бинарник в разы медленнее.
  • Нет libssl-dev — крейты с OpenSSL не соберутся.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Rust

Частые вопросы

actix-web или axum?

axum легче интегрируется с экосистемой tower и tokio, actix-web чуть быстрее в синтетике. Для большинства задач разница непринципиальна — берите тот, что удобнее по API.

Можно ли собирать Rust прямо на VPS?

Да, но сборка требует RAM и CPU. На младшем тарифе лучше собирать в CI и копировать готовый бинарник.

Нужен ли Docker для Rust?

Не обязательно. Статический бинарник запускается напрямую под systemd. Docker имеет смысл, если у вас уже контейнерный пайплайн.