Introdução
Rust é uma linguagem de programação de sistema conhecida por seu desempenho e segurança de memória. No entanto, escrever um aplicativo é apenas metade do trabalho. Para que seu projeto fique acessível aos usuários na internet, ele precisa ser implantado (deploy) em um servidor. Neste artigo, veremos o processo passo a passo de deploy de uma aplicação Rust em uma VPS (Virtual Private Server).
Usaremos um servidor web típico baseado no framework actix-web, configuraremos o ambiente, compilaremos uma build de release, iniciaremos a aplicação como um serviço systemd e configuraremos um proxy reverso Nginx com certificado SSL. Seguindo este guia, você poderá implantar qualquer aplicação Rust em um servidor remoto rodando Linux.
1. Preparação do servidor e ambiente
1.1. Conexão ao servidor
Primeiramente, conecte-se à sua VPS via SSH:
ssh root@your_server_ipRecomenda-se criar um usuário separado com privilégios limitados (sudo) por segurança, mas para simplificar, neste guia trabalharemos como root.
1.2. Instalação do Rust no servidor
Embora possamos compilar a aplicação localmente e apenas copiar o binário, é mais conveniente instalar o Rust no servidor para uma possível recompilação para a arquitetura alvo. Use o script oficial:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envVerifique a instalação:
rustc --versioncargo --version1.3. Instalação de dependências do sistema
Para compilar algumas crates (por exemplo, openssl), podem ser necessárias bibliotecas do sistema. Instale-as:
apt updateapt install build-essential pkg-config libssl-dev git -y2. Compilação e preparação da aplicação
2.1. Exemplo de um servidor web simples com actix-web
Vamos criar uma aplicação mínima. Se você já tem um projeto, pule esta etapa.
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. Compilação em modo release
Compile a aplicação em sua máquina local ou diretamente no servidor. Para máximo desempenho, use a flag --release:
cargo build --releaseO binário pronto estará em target/release/my_rust_app (o nome corresponde ao nome do pacote).
2.3. Copiando o binário para o servidor (se compilou localmente)
Se você compilou a aplicação em sua máquina local, copie-o via SCP:
scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/No servidor, crie o diretório /opt/my_rust_app com antecedência:
mkdir -p /opt/my_rust_app3. Configuração da inicialização via systemd
Para que a aplicação inicie automaticamente na inicialização do sistema e seja reiniciada em caso de falha, criaremos um serviço systemd.
3.1. Criando o arquivo unit
Crie o arquivo /etc/systemd/system/my_rust_app.service:
[Unit]Description=My Rust Web ApplicationAfter=network.target
[Service]Type=simpleUser=rootWorkingDirectory=/opt/my_rust_appExecStart=/opt/my_rust_app/my_rust_appRestart=on-failureRestartSec=10
[Install]WantedBy=multi-user.target