Implantação de aplicação Rust em VPS: nível avançado passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que a implantação avançada de Rust em VPS é uma necessidade

Desenvolver em Rust é apenas metade do trabalho. A segunda parte, igualmente importante, é uma implantação confiável e segura. Métodos básicos, como compilação manual e execução via cargo run, não são adequados para produção. No nível avançado, são necessários automação, isolamento de processos, monitoramento e garantia de alta disponibilidade.

Neste artigo, vamos abordar como configurar a implantação de uma aplicação Rust em VPS usando Docker, CI/CD (GitHub Actions), systemd para inicialização automática e Nginx como proxy reverso. Todos os exemplos de código são fornecidos em Rust e Bash.



1. Preparação do VPS e do ambiente

1.1. Configuração básica do servidor

Supondo que você tenha um VPS rodando Ubuntu 22.04 LTS. Primeiro, atualizamos os pacotes e instalamos as ferramentas necessárias:

sudo apt update && sudo apt upgrade -ysudo apt install -y curl git build-essential pkg-config libssl-dev

Instalamos o Rust via rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envrustc --version  # verificação

1.2. Instalação do Docker

O Docker garantirá isolamento e reprodutibilidade do ambiente:

sudo apt install -y docker.iosudo systemctl enable --now dockersudo usermod -aG docker $USERnewgrp docker

1.3. Instalação do Nginx

O Nginx atuará como proxy reverso e balanceador de carga:

sudo apt install -y nginxsudo systemctl enable --now nginx


2. Containerização da aplicação Rust com Docker

2.1. Compilação em múltiplos estágios (multi-stage build)

Para reduzir o tamanho da imagem, usamos compilação em múltiplos estágios. Crie um Dockerfile na raiz do projeto:

# Estágio de compilaçãoFROM rust:1.75-slim-bookworm AS builderWORKDIR /appCOPY Cargo.toml Cargo.lock ./COPY src ./srcRUN cargo build --release

# Estágio finalFROM debian:bookworm-slimRUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*WORKDIR /appCOPY --from=builder /app/target/release/my_app .EXPOSE 8080CMD ["./my_app"]

Aqui, my_app é o nome do seu arquivo binário. Certifique-se de que em Cargo.toml está definido name = "my_app".

2.2. Compilação e execução do container

docker build -t my_app:latest .docker run -d --name my_app -p 8080:8080 my_app:latest

Verifique se a aplicação responde:

curl http://localhost:8080


3. Configuração de inicialização automática e monitoramento (systemd + Docker Compose)

3.1. Docker Compose para gerenciar serviços

Crie um docker-compose.yml:

version: '3.8'services:  app:    image: my_app:latest    restart: always    ports:      - "127.0.0.1:8080:8080"    environment:      - RUST_LOG=info    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]      interval: 30s      timeout: 10s      retries: 3

Observe: ports está vinculado a 127.0.0.1 para que requisições externas passem apenas pelo Nginx.

3.2. Unit do Systemd para gerenciar o serviço

Crie o arquivo /etc/systemd/system/my_app.service:

[Unit]Description=Minha Aplicação RustAfter=docker.serviceRequires=docker.service

[Service]Type=oneshotRemainAfterExit=yesWorkingDirectory=/opt/my_appExecStart=/usr/bin/docker compose up -dExecStop=/usr/bin/docker compose downUser=deployGroup=deploy

[Install]WantedBy=multi-user.target

Ative e inicie:

sudo systemctl daemon-reloadsudo systemctl enable my_appsudo systemctl start my_app


4. Configuração do Nginx

Blogs

Book Recommendations