Введение
Rust — это системный язык программирования, который славится своей производительностью и безопасностью памяти. Однако написать приложение — это только половина дела. Чтобы ваш проект стал доступен пользователям в интернете, его необходимо развернуть (задеплоить) на сервере. В этой статье мы рассмотрим пошаговый процесс деплоя Rust-приложения на VPS (Virtual Private Server).
Мы будем использовать типовой веб-сервер на базе фреймворка actix-web, настроим окружение, скомпилируем релизную сборку, запустим приложение как systemd-сервис и настроим обратный прокси-сервер Nginx с SSL-сертификатом. Следуя этому руководству, вы сможете развернуть любое Rust-приложение на удалённом сервере под управлением Linux.
1. Подготовка сервера и окружения
1.1. Подключение к серверу
Первым делом подключитесь к вашему VPS по SSH:
ssh root@your_server_ip
Рекомендуется создать отдельного пользователя с ограниченными правами (sudo) для безопасности, но для простоты в этом руководстве будем работать от root.
1.2. Установка Rust на сервер
Хотя мы можем скомпилировать приложение локально и просто скопировать бинарник, удобнее установить Rust на сервер для возможной пересборки под целевую архитектуру. Используем официальный скрипт:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Проверьте установку:
rustc --version
cargo --version
1.3. Установка системных зависимостей
Для сборки некоторых крейтов (например, openssl) могут потребоваться системные библиотеки. Установите их:
apt update
apt install build-essential pkg-config libssl-dev git -y
2. Сборка и подготовка приложения
2.1. Пример простого веб-сервера на actix-web
Создадим минимальное приложение. Если у вас уже есть проект — пропустите этот шаг.
Cargo.toml:
[package]
name = "my_rust_app"
version = "0.1.0"
edition = "2021"
[dependencies]
actix-web = "4"
serde = { version = "1", features = ["derive"] }
src/main.rs:
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/")]
async fn index() -> impl Responder {
"Hello from Rust on VPS!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
println!("Starting server at 0.0.0.0:8080");
HttpServer::new(|| {
App::new()
.service(index)
})
.bind("0.0.0.0:8080")?
.run()
.await
}
2.2. Компиляция в релизном режиме
Соберите приложение на своей локальной машине или прямо на сервере. Для максимальной производительности используйте флаг --release:
cargo build --release
Готовый бинарник будет находиться в target/release/my_rust_app (имя совпадает с именем пакета).
2.3. Копирование бинарника на сервер (если собирали локально)
Если вы собирали приложение на локальной машине, скопируйте его через SCP:
scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/
На сервере создайте директорию /opt/my_rust_app заранее:
mkdir -p /opt/my_rust_app
3. Настройка запуска через systemd
Чтобы приложение автоматически запускалось при старте системы и перезапускалось в случае сбоя, создадим systemd-сервис.
3.1. Создание unit-файла
Создайте файл /etc/systemd/system/my_rust_app.service:
[Unit]
Description=My Rust Web Application
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/my_rust_app
ExecStart=/opt/my_rust_app/my_rust_app
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
3.2. Запуск и проверка сервиса
Выполните команды:
systemctl daemon-reload
systemctl enable my_rust_app
systemctl start my_rust_app
systemctl status my_rust_app
Если всё прошло успешно, вы увидите статус active (running). Приложение будет слушать порт 8080.
4. Настройка Nginx как обратного прокси
Прямой доступ к порту 8080 небезопасен и неудобен. Используем Nginx для проксирования запросов с 80/443 портов на наше приложение.
4.1. Установка Nginx
apt install nginx -y
4.2. Конфигурация виртуального хоста
Создайте файл конфигурации /etc/nginx/sites-available/my_rust_app:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируйте конфигурацию:
ln -s /etc/nginx/sites-available/my_rust_app /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
4.3. Настройка SSL через Let's Encrypt (опционально, но рекомендуется)
Установите Certbot:
apt install certbot python3-certbot-nginx -y
Получите сертификат:
certbot --nginx -d your_domain.com -d www.your_domain.com
После успешной установки Certbot автоматически обновит конфигурацию Nginx для работы по HTTPS.