VPS для Rust: деплой actix-web и axum
Rust даёт скорость C и безопасность памяти, а на выходе — компактный бинарник. Соберём release-версию, поднимем сервис на actix-web или axum под systemd и закроем его nginx с TLS.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему 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
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Сборка release
Профиль release включает оптимизации и убирает отладочную информацию. Бинарник появится в target/release.
cargo build --release
ls -lh target/release/myapp
Пример минимального сервиса на axum, который слушает локальный порт:
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(|| async { "ok" }));
let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
Готовый бинарник копируем на VPS: scp target/release/myapp appuser@SERVER_IP:/opt/rustapp/. Если целевая система отличается от вашей по версии glibc, соберите статически под musl — тогда бинарник запустится на любом дистрибутиве без оглядки на системные библиотеки.
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
systemd для Rust-сервиса
Как и для любого бинарника, надёжнее всего доверить запуск systemd — он поднимет процесс после сбоя и ребута.
[Unit]
Description=Rust web service
After=network.target
[Service]
User=appuser
WorkingDirectory=/opt/rustapp
ExecStart=/opt/rustapp/myapp
Restart=always
RestartSec=3
Environment=RUST_LOG=info
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now rustapp
journalctl -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 {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo nginx -t && sudo systemctl reload nginx
sudo 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Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
actix-web или axum?
axum легче интегрируется с экосистемой tower и tokio, actix-web чуть быстрее в синтетике. Для большинства задач разница непринципиальна — берите тот, что удобнее по API.
Можно ли собирать Rust прямо на VPS?
Да, но сборка требует RAM и CPU. На младшем тарифе лучше собирать в CI и копировать готовый бинарник.
Нужен ли Docker для Rust?
Не обязательно. Статический бинарник запускается напрямую под systemd. Docker имеет смысл, если у вас уже контейнерный пайплайн.