Introdução: por que Go e VPS são a combinação ideal para seu projeto
\n\nGo (Golang) é uma linguagem compilada, criada para desempenho e simplicidade. Sua principal vantagem na implantação é a compilação estática. Você não precisa instalar um interpretador ou máquina virtual no servidor. Basta carregar um único arquivo binário e executá-lo. Isso torna a implantação de aplicações Go em VPS incrivelmente rápida e confiável.
\n\nNeste guia, percorreremos o caminho completo: desde a escrita de um servidor HTTP simples em Go até sua execução em um servidor VPS real rodando Ubuntu 22.04. Configuraremos o systemd para inicialização automática, o Nginx como proxy reverso e o Let's Encrypt para HTTPS. Todos os exemplos de código estão prontos para uso.
\n\n1. Preparação do VPS e escrita da aplicação Go
\n\n1.1. Configuração inicial do servidor
\n\nApós adquirir um VPS (por exemplo, da DigitalOcean, Timeweb ou Hetzner), conecte-se via SSH:
\n\nssh root@seu_IP_do_servidor\n\nExecute a configuração básica de segurança:
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n# Desabilite o login como root em /etc/ssh/sshd_config\n# PermitRootLogin no\nsystemctl restart sshd\n\nCertifique-se de que as portas 80 e 443 estão abertas no firewall (UFW):
\n\nufw allow 22\nufw allow 80\nufw allow 443\nufw enable\n\n1.2. Aplicação Go simples para implantação
\n\nCrie o arquivo main.go na sua máquina local:
package main\n\nimport (\n\t"fmt"\n\t"log"\n\t"net/http"\n\t"os"\n)\n\nfunc main() {\n\tport := os.Getenv("PORT")\n\tif port == "" {\n\t\tport = "8080"\n\t}\n\n\thttp.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, "Olá do Go! Servidor rodando na porta %s", port)\n\t})\n\n\thttp.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte("OK"))\n\t})\n\n\tlog.Printf("Iniciando servidor na :%s", port)\n\tlog.Fatal(http.ListenAndServe(":"+port, nil))\n}\n\nTeste localmente:
\n\ngo run main.go\n\nAbra o navegador em http://localhost:8080. Se você vir a saudação, está tudo funcionando.
2. Compilação e envio do binário para o servidor
\n\n2.1. Cross-compilação para Linux
\n\nNa sua máquina local (mesmo que seja Windows ou macOS), execute:
\n\nGOOS=linux GOARCH=amd64 go build -o myapp main.go\n\nA flag -o myapp define o nome do arquivo de saída. As variáveis de ambiente GOOS e GOARCH especificam a arquitetura alvo (Linux 64 bits).
Após a compilação, você terá um arquivo binário myapp com cerca de 10–15 MB.
2.2. Envio para o VPS
\n\nUse scp para copiar o arquivo:
scp myapp deployer@seu_IP_do_servidor:/home/deployer/myapp\n\nOu, se estiver usando rsync:
\n\nrsync -avz myapp deployer@seu_IP_do_servidor:/home/deployer/myapp\n\nNo servidor, mova o binário para um diretório do sistema e torne-o executável:
\n\nsudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp\n\n3. Configuração do systemd e inicialização automática
\n\n3.1. Criação do arquivo de serviço
\n\nO systemd gerenciará nossa aplicação: iniciará na inicialização do sistema, reiniciará em caso de falha e coletará logs.
\n\nCrie o arquivo /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.service\n\nInsira a seguinte configuração:
\n\n[Unit]\nDescription=Servidor de Aplicação Go\nAfter=network.target\n\n[Service]\nType=simple\nUser=deployer\nGroup=deployer\nWorkingDirectory=/usr/local/bin\nExecStart=/usr/local/bin/myapp\nRestart=always\nRestartSec=5\nEnvironment=PORT=8080\nEnvironment=GIN_MO