Introdução: por que fazer deploy de uma aplicação Go em VPS é simples e eficiente
Go (Golang) é conhecido por seu desempenho e simplicidade. Uma das principais vantagens da linguagem é a compilação em um único binário estático, que não requer a instalação de runtimes adicionais no servidor. Isso torna o deploy de uma aplicação Go em VPS incrivelmente rápido e confiável. Neste artigo, vamos analisar o ciclo completo de implantação: desde a preparação do servidor até a configuração de reverse proxy e HTTPS. Você receberá um checklist pronto que pode ser usado para qualquer projeto Go.
1. Preparação do VPS e instalação do software necessário
Antes de enviar o código, é preciso preparar o servidor. Pressupõe-se que você tenha um VPS com Ubuntu 22.04 ou 24.04. Conecte-se via SSH e execute a atualização do sistema.
sudo apt update && sudo apt upgrade -yInstalação do Go no servidor
Embora o Go compile para um binário, o compilador pode ser necessário no servidor para a build. Vamos instalar a versão mais recente:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/binecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profileVerifique a instalação: go version.
Instalação do Git e Nginx
O Git será necessário para clonar o repositório, e o Nginx para o reverse proxy e arquivos estáticos.
sudo apt install git nginx -y2. Build e execução da aplicação Go
Vamos analisar o processo usando um exemplo simples de servidor HTTP. Crie o arquivo main.go:
package main
import (\t"fmt"\t"net/http")
func handler(w http.ResponseWriter, r *http.Request) {\tfmt.Fprintf(w, "Hello from Go on VPS!")}
func main() {\thttp.HandleFunc("/", handler)\tfmt.Println("Server started on :8080")\thttp.ListenAndServe(":8080", nil)}Compile o binário para Linux (mesmo que você esteja no Windows/Mac):
GOOS=linux GOARCH=amd64 go build -o myapp main.goAgora, envie o binário para o servidor. Use SCP ou Rsync:
scp myapp user@your-server-ip:~/No servidor, torne o arquivo executável e execute:
chmod +x ~/myapp./myapp &Verifique o funcionamento: curl http://localhost:8080. Se você vir "Hello from Go on VPS!" — está tudo funcionando.
3. Configuração do systemd para inicialização automática
A execução manual não é uma boa prática. Vamos usar o systemd para que a aplicação inicie na inicialização do sistema e seja reiniciada em caso de falhas.
Crie o arquivo de serviço:
sudo nano /etc/systemd/system/myapp.serviceInsira a configuração:
[Unit]Description=Go Application ServiceAfter=network.target
[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetSubstitua /home/user pelo seu caminho. Ative e inicie o serviço:
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myappAgora sua aplicação Go funcionará como um daemon.
4. Configuração do Nginx como reverse proxy e HTTPS
Para que a aplicação fique acessível pelo domínio e pela porta 443, vamos configurar o Nginx.
Configuração do reverse proxy
Remova a configuração padrão e crie a sua:
sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myappAdicione:
server { listen 80; server_name yourdomain.com www.yourdomain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_h