Introdução
\n\nVocê escreveu uma aplicação incrível em Rust. Ela é rápida, segura e não falha. Mas como fazer para que ela funcione 24/7 em um servidor remoto e esteja disponível para os usuários? A implantação de uma aplicação Rust em VPS (Virtual Private Server) é um processo que inclui a compilação do binário, configuração do ambiente, execução como um serviço do sistema e, frequentemente, a instalação de um reverse proxy.
\n\nNeste artigo, percorreremos todo o caminho, do zero até uma aplicação Rust totalmente funcional, implantada em um VPS com Ubuntu. Você aprenderá como preparar o servidor, compilar o projeto, configurar a inicialização automática e garantir a segurança. Este guia é adequado tanto para servidores web (Actix-web, Axum, Rocket) quanto para qualquer outro daemon em Rust.
\n\nVamos começar.
\n\n1. Preparação do servidor e ambiente
\n\nAntes de implantar o código, precisamos preparar o "terreno". Usaremos Ubuntu 22.04 LTS, mas as instruções também servem para Debian.
\n\nConexão ao servidor e configuração básica
\n\nConecte-se ao seu VPS via SSH:
\n\nssh root@seu-ip-do-servidor\n\nAtualize os pacotes e crie um usuário (trabalhar como root é uma má prática):
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n\nConfigure as chaves SSH para o novo usuário, para não precisar digitar a senha toda vez.
\n\nInstalação do Rust no servidor
\n\nA maneira mais confiável é usar o script oficial rustup. Mude para o usuário deployer e execute:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nApós a instalação, recarregue o shell ou execute:
\n\nsource $HOME/.cargo/env\n\nVerifique a versão:
\n\nrustc --version\n\nPara a compilação de produção, precisaremos de vinculação estática (para que o binário funcione em qualquer Linux sem bibliotecas extras). Instale o musl-tools:
\n\nsudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl\n\n2. Compilação e transferência do binário para o servidor
\n\nÉ melhor compilar a aplicação em sua máquina local (ou em CI/CD) e depois copiar o binário pronto para o servidor. Isso é mais rápido e não sobrecarrega o VPS.
\n\nCompilação da versão de produção
\n\nNo seu computador local, na pasta do projeto, execute:
\n\ncargo build --release --target x86_64-unknown-linux-musl\n\nIsso criará um binário estaticamente vinculado, sem dependências do glibc. O tamanho será maior, mas ele será executado em qualquer Linux.
\n\nExemplo de um servidor web simples com Actix-web para teste (arquivo src/main.rs):
use actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n "Hello from Rust on VPS!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n HttpServer::new(|| {\n App::new().route("/", web::get().to(hello))\n })\n .bind("0.0.0.0:8080")?\n .run()\n .await\n}\n\nCópia para o servidor
\n\nUse scp para cópia segura:
scp ./target/x86_64-unknown-linux-musl/release/seu_projeto deployer@seu-ip-do-servidor:/home/deployer/\n\nNo servidor, mova o binário para /usr/local/bin:
sudo mv /home/deployer/seu_projeto /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app\n\n3. Configuração do systemd para inicialização automática
\n\nPara que a aplicação seja iniciada na inicialização do sistema, reinicie após uma falha e funcione em segundo plano, criaremos um serviço systemd.
\n\nCrie o arquivo de serviço:
\n\nsudo nano /etc/systemd/system/rust-app.service\n\nInsira a seguinte configuração (substitua deployer pelo seu usuário):
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse