Implantação de aplicação Go em VPS: guia passo a passo do início ao fim

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

Introdução: por que Go e VPS são a combinação ideal para seu projeto

\n\n

Go (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\n

Neste 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\n

1. Preparação do VPS e escrita da aplicação Go

\n\n

1.1. Configuração inicial do servidor

\n\n

Após adquirir um VPS (por exemplo, da DigitalOcean, Timeweb ou Hetzner), conecte-se via SSH:

\n\n
ssh root@seu_IP_do_servidor
\n\n

Execute a configuração básica de segurança:

\n\n
apt 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\n

Certifique-se de que as portas 80 e 443 estão abertas no firewall (UFW):

\n\n
ufw allow 22\nufw allow 80\nufw allow 443\nufw enable
\n\n

1.2. Aplicação Go simples para implantação

\n\n

Crie o arquivo main.go na sua máquina local:

\n\n
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\n

Teste localmente:

\n\n
go run main.go
\n\n

Abra o navegador em http://localhost:8080. Se você vir a saudação, está tudo funcionando.

\n\n

2. Compilação e envio do binário para o servidor

\n\n

2.1. Cross-compilação para Linux

\n\n

Na sua máquina local (mesmo que seja Windows ou macOS), execute:

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

A 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).

\n\n

Após a compilação, você terá um arquivo binário myapp com cerca de 10–15 MB.

\n\n

2.2. Envio para o VPS

\n\n

Use scp para copiar o arquivo:

\n\n
scp myapp deployer@seu_IP_do_servidor:/home/deployer/myapp
\n\n

Ou, se estiver usando rsync:

\n\n
rsync -avz myapp deployer@seu_IP_do_servidor:/home/deployer/myapp
\n\n

No servidor, mova o binário para um diretório do sistema e torne-o executável:

\n\n
sudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp
\n\n

3. Configuração do systemd e inicialização automática

\n\n

3.1. Criação do arquivo de serviço

\n\n

O systemd gerenciará nossa aplicação: iniciará na inicialização do sistema, reiniciará em caso de falha e coletará logs.

\n\n

Crie o arquivo /etc/systemd/system/myapp.service:

\n\n
sudo nano /etc/systemd/system/myapp.service
\n\n

Insira 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                

Blogs

Book Recommendations