Go em produção: VPS, Docker ou Cloud — escolhendo o melhor deploy

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

Por que Go é o candidato ideal para produção, mas o deploy ainda decide tudo

\n\n

Você escreveu um backend em Go. Ele voa: compilação em um único binário, consumo mínimo de memória, goroutines que não temem carga. Mas há um detalhe: mesmo o código mais rápido é inútil se ficar parado como peso morto na máquina local. Mais cedo ou mais tarde surge a pergunta: como colocar essa maravilha da engenharia em produção?

\n\n

O deploy de aplicações Go não é rocket science, mas é fácil pisar em cascas de banana. Neste artigo, vamos analisar três caminhos principais: o clássico VPS, a conteinerização com Docker e as plataformas em nuvem. Você descobrirá qual abordagem escolher para sua tarefa e receberá scripts prontos para começar.

\n\n

Deploy Go em VPS: o clássico que nunca envelhece

\n\n

Um servidor virtual privado (VPS) é o seu root pessoal. Controle total, sem limitações de plataforma, mas toda a responsabilidade é sua. Para uma aplicação Go, esta é frequentemente a opção ideal: o binário pesa 10–20 MB, inicia em milissegundos e não requer orquestração complexa.

\n\n

O que é necessário para deploy Go em VPS

\n\n
    \n
  • Servidor com Linux (Ubuntu 22.04 / Debian 11 — o clássico)
  • \n
  • Acesso SSH
  • \n
  • Go (opcional, se compilar no servidor)
  • \n
  • Systemd para gerenciamento do processo
  • \n
  • Nginx ou Caddy como reverse proxy
  • \n
\n\n

Exemplo: deploy de servidor Go via Systemd

\n\n

Suponha que você tenha uma aplicação simples main.go que escuta na porta 8080. Compilamos em sua máquina para a arquitetura alvo:

\n\n
GOOS=linux GOARCH=amd64 go build -o app main.go
\n\n

Copiamos o binário para o servidor:

\n\n
scp app user@your-server:/opt/app/
\n\n

Criamos um unit systemd em /etc/systemd/system/app.service:

\n\n
[Unit]\nDescription=Go App\nAfter=network.target\n\n[Service]\nExecStart=/opt/app/app\nWorkingDirectory=/opt/app\nRestart=always\nUser=www-data\nGroup=www-data\nEnvironment=PORT=8080\n\n[Install]\nWantedBy=multi-user.target
\n\n

Iniciamos e habilitamos a inicialização automática:

\n\n
sudo systemctl daemon-reload\nsudo systemctl enable --now app
\n\n

Agora sua aplicação Go funciona como um daemon. Adicionamos Nginx para proxy da porta 80:

\n\n
server {\n    listen 80;\n    server_name yourdomain.com;\n\n    location / {\n        proxy_pass http://127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}
\n\n

Vantagens do VPS: controle total, baixo custo (a partir de $5/mês), transparência. Desvantagens: atualização manual, sem autoescalonamento, precisa configurar a segurança por conta própria.

\n\n

Docker para Go: conteinerização que simplifica a vida

\n\n

Se você trabalha em equipe ou planeja microsserviços, Docker é sua escolha. Go e Docker são o par ideal: build multi-estágio gera imagens de 5–15 MB, e a compilação estática permite dispensar a imagem base.

\n\n

Dockerfile para aplicação Go

\n\n

Aqui está um Dockerfile mínimo, mas pronto para produção:

\n\n
# Stage 1: build\nFROM golang:1.22-alpine AS builder\nWORKDIR /app\nCOPY go.mod go.sum ./\nRUN go mod download\nCOPY . .\nRUN CGO_ENABLED=0 GOOS=linux go build -o app .\n\n# Stage 2: imagem mínima\nFROM alpine:latest\nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=builder /app/app .\nEXPOSE 8080\nCMD ["./app"]
\n\n

Construímos e executamos:

\n\n
docker build -t go-app .\ndocker run -d -p 8080:8080 --name go-app go-app
\n\n

Docker Compose para ambiente completo

\n\n

Quando a aplicação precisa de banco de dados ou Redis, use docker-compose.yml:

\n\n
version: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - "8080:8080"\n    environment:\n      - DB_HOST=db\n      - DB_PORT=5432\n    depends_on:\n      - db\n  db:\n    image: postgres                

Blogs

Book Recommendations