Introdução: Por que Go é ideal para VPS, e o que faremos
Go (Golang) é uma linguagem criada para aplicações servidoras escaláveis e de alto desempenho. A compilação em um único arquivo binário estático o torna um candidato ideal para implantação em VPS (Virtual Private Server). Você não precisa instalar interpretador ou dependências no servidor — basta copiar o arquivo e executá-lo.
Neste artigo, percorreremos o caminho completo: desde a escrita de um simples servidor HTTP em Go até sua execução em produção em uma VPS usando systemd para inicialização automática, Nginx como proxy reverso e Let's Encrypt para HTTPS.
Você aprenderá:
- Compilar uma aplicação Go para Linux
- Enviar o arquivo binário para a VPS via SSH
- Configurar systemd para inicialização automática
- Instalar e configurar Nginx
- Obter um certificado SSL gratuito
Passo 1: Preparação da aplicação Go e compilação
Criando uma aplicação web simples
Como exemplo, escreveremos um servidor HTTP mínimo que responde "Hello, VPS!". Crie o arquivo main.go:
package main
import ( "fmt" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, VPS!") })
fmt.Println("Server started on :8080") http.ListenAndServe(":8080", nil)}Compilação para Linux
Se você desenvolve no Windows ou macOS, precisa compilar o binário para a arquitetura alvo da VPS (geralmente linux/amd64). Abra o terminal na pasta do projeto e execute:
set GOOS=linuxset GOARCH=amd64go build -o myappPara Linux/macOS, use export:
export GOOS=linuxexport GOARCH=amd64go build -o myappComo resultado, aparecerá o arquivo binário myapp. Verifique seu tamanho — será pequeno (cerca de 7-10 MB), pois Go compila tudo estaticamente.
Passo 2: Envio para VPS e configuração do systemd
Conexão ao servidor e envio do arquivo
Conecte-se à sua VPS via SSH:
ssh root@seu-ip-do-servidorCrie um diretório para a aplicação:
mkdir -p /opt/myappcd /opt/myappNa máquina local, envie o binário via SCP (execute em um terminal separado):
scp myapp root@seu-ip-do-servidor:/opt/myapp/Volte ao servidor e conceda permissão de execução:
chmod +x /opt/myapp/myappCriação do serviço systemd
Para que a aplicação inicie automaticamente na inicialização do sistema e seja reiniciada em caso de falhas, criaremos uma unit do systemd. Crie o arquivo:
nano /etc/systemd/system/myapp.serviceInsira o seguinte conteúdo:
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=on-failureRestartSec=5
[Install]WantedBy=multi-user.targetExplicação dos parâmetros:
UsereGroup— usuário sob o qual a aplicação será executada (recomenda-se não usar root).Restart=on-failure— reinicialização automática em caso de falha.RestartSec=5— pausa antes da reinicialização.
Agora ativamos e iniciamos o serviço:
systemctl daemon-reloadsystemctl enable myappsystemctl start myappsystemctl status myappSe tudo estiver correto, você verá o status active (running). Verifique se a aplicação responde localmente:
curl http://localhost:8080Passo 3: Configuração do Nginx como proxy reverso
Acesso direto à aplicação pela porta 8