Seu código Rust está escrito. E agora? Análise completa das estratégias de deploy
Você escreveu a aplicação Rust perfeita. Ela é rápida, não falha, não vaza memória. Mas tem um problema: ela só funciona no seu notebook. E você quer que o mundo todo a veja. Parece familiar?
O deploy de aplicações Rust é aquele obstáculo onde muitos desenvolvedores tropeçam. Parece que é só compilar o binário e pronto. Mas a realidade é mais complexa: variáveis de ambiente, portas, dependências, segurança, monitoramento. Neste artigo, vamos analisar três caminhos principais: VPS clássico, Docker moderno e plataformas em nuvem. Você aprenderá não apenas "como", mas também "por que" escolher uma ou outra abordagem para seu projeto Rust.
Por que Rust é ideal para deploy (e por que nem sempre é simples)
Rust é o sonho de qualquer engenheiro DevOps. Um único binário estático, sem dependências de runtime, consumo mínimo de memória. Mas há um detalhe: a abordagem padrão "compilou e enviou" funciona apenas para os casos mais simples.
Vamos imaginar que você está escrevendo um servidor web com actix-web ou axum. Sua aplicação precisa:
- Iniciar junto com o sistema
- Reiniciar automaticamente em caso de falha
- Registrar logs em um local centralizado
- Ser isolada de outros processos
- Ser atualizada sem tempo de inatividade
E é aqui que a coisa fica interessante. Vamos analisar cada opção.
Opção 1: VPS — o clássico que funciona
Escolhendo a hospedagem e configurando o servidor
Para aplicações Rust, você não precisa de um servidor potente. Um VPS barato com 1 vCPU e 1 GB de RAM é suficiente. Recomendo DigitalOcean, Vultr ou Hetzner. Instale o Ubuntu 22.04 LTS.
Primeiro passo — segurança básica:
# Atualizar o sistemasudo apt update && sudo apt upgrade -y
# Criar um usuário sem privilégios rootsudo adduser deployersudo usermod -aG sudo deployer
# Configurar chaves SSHssh-copy-id deployer@seu-ip-do-servidorCompilando a aplicação Rust para produção
Ponto crucial: você precisa compilar na mesma arquitetura do servidor ou usar compilação cruzada. O mais simples é compilar no servidor:
# Instalar Rust no servidorcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/env
# Clonar o repositóriogit clone https://github.com/seu-usuario/seu-projeto.gitcd seu-projeto
# Compilar em modo releasecargo build --releaseSeu binário está em target/release/seu-projeto. Tamanho? Geralmente de 5 a 15 MB. Para comparação: uma aplicação Node.js com dependências pesa 200+ MB.
Systemd: para que a aplicação viva para sempre
Apenas executar o binário é uma má ideia. Em caso de falha do servidor ou reinicialização, você teria que ligá-lo manualmente. Crie um serviço systemd:
sudo nano /etc/systemd/system/rust-app.service[Unit]Description=Aplicação RustAfter=network.target
[Service]Type=simpleUser=deployerWorkingDirectory=/home/deployer/seu-projetoExecStart=/home/deployer/seu-projeto/target/release/seu-projetoRestart=alwaysRestartSec=10Environment=RUST_LOG=infoEnvironment=DATABASE_URL=postgres://user:pass@localhost/db
[Install]WantedBy=multi-user.targetAgora sua aplicação será iniciada automaticamente na inicialização do sistema e reiniciará em caso de falha:
sudo systemctl daemon-reloadsudo systemctl enable rust-appsudo systemctl start rust-appsudo systemctl status rust-appReverse proxy: Nginx como camada de proteção
A aplicação Rust geralmente escuta em 127.0.0.1:8080. O Nginx cuida da terminação SSL, arquivos estáticos e balanceamento:
sudo apt install nginx certbot python3-certbot-nginx
# Configuração do site\