Introdução: por que fazer deploy de uma aplicação Go em VPS é simples e confiável
Go (Golang) é uma das linguagens mais eficientes para criar aplicações server-side. Sua principal vantagem é a compilação em um único binário estático, que não requer a instalação de interpretador ou máquina virtual no servidor. Isso torna o deploy de uma aplicação Go em VPS (Virtual Private Server) incrivelmente simples e rápido em comparação com Python, Node.js ou Java.
Neste artigo, vamos implantar uma aplicação Go em VPS passo a passo: desde a configuração inicial do servidor até a execução via systemd e publicação via Nginx com HTTPS. Você aprenderá como minimizar riscos e garantir a operação estável do seu serviço 24/7.
1. Preparação do VPS e instalação do software necessário
Antes de iniciar o deploy, certifique-se de ter acesso ao VPS (por exemplo, Ubuntu 22.04 LTS) via SSH. Usaremos um conjunto básico de ferramentas.
1.1. Configuração inicial do servidor
Conecte-se ao servidor e execute a atualização de pacotes:
ssh root@seu-ip-do-servidorapt update && apt upgrade -yCrie um usuário separado para a aplicação (não trabalhe como root):
adduser deployerusermod -aG sudo deployersu - deployer1.2. Instalação do Go (se precisar compilar no servidor)
Embora na maioria das vezes o binário seja compilado localmente, às vezes é conveniente compilar diretamente no VPS. Instale a versão mais recente do Go:
wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gzecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrcsource ~/.bashrcgo version1.3. Instalação do Git e Nginx
O Git será necessário para clonar o repositório, e o Nginx para proxy reverso e SSL:
sudo apt install git nginx -y2. Compilação da aplicação Go e preparação para deploy
2.1. Exemplo de uma aplicação Go simples
Vamos criar um servidor HTTP mínimo em Go. Você pode usar seu próprio projeto, mas para demonstração este código serve (main.go):
package main
import ( "fmt" "net/http" "os")
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go! Server time: %s", time.Now().Format(time.RFC1123)) })
fmt.Printf("Server starting on port %s", port) http.ListenAndServe(":"+port, nil)}2.2. Compilação do binário para Linux
Na sua máquina local (ou no servidor), compile o binário para a arquitetura alvo do VPS (geralmente amd64):
GOOS=linux GOARCH=amd64 go build -o myapp main.goVerifique se o binário é estático e não requer bibliotecas:
ldd myapp # Deve exibir "not a dynamic executable"2.3. Upload para o servidor
Copie o binário para o VPS via SCP:
scp myapp deployer@seu-ip-do-servidor:/home/deployer/No servidor, mova-o para um diretório adequado e conceda permissão de execução:
sudo mkdir -p /opt/myappsudo mv /home/deployer/myapp /opt/myapp/sudo chmod +x /opt/myapp/myapp3. Configuração do systemd para inicialização automática e monitoramento
systemd é o gerenciador de serviços padrão no Linux. Ele permitirá que sua aplicação inicie na inicialização do sistema e reinicie automaticamente em caso de falhas.
3.1. Criação do arquivo unit
Crie o arquivo /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.serviceInsira a seguinte configuração:
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=deployerGroup=deployerWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=alwaysRestartSec=5Environment=PORT=80