Blog · Guias de deploy
Como fazer deploy de um app Gin em 2026: um comando, HTTPS e um Dockerfile que fica com você
Você tem um app Gin que roda no seu notebook e quer colocá-lo no ar em um endereço com HTTPS. No Pethost, isso é um comando, pethost deploy, rodado na pasta que tem o go.mod. Ele escreve o Dockerfile para você, faz o build do programa e mostra o endereço dele. O app do quickstart do próprio Gin teve o build feito e foi iniciado em 58 segundos na primeira vez, e em 2 segundos na segunda.
- Um comando:
pethost deployna pasta que tem ogo.mod. Não há arquivo de configuração para escrever nem configurações de build para preencher. - O que ele faz: lê a versão do Go no
go.mod, escreve um Dockerfile que rodago builde inicia o programa. - A porta: o Gin escuta na 8080, a não ser que a
PORTdiga outra. O Pethost encontra a porta em que o programa escuta, então você não configura nada. - O endereço:
https://my-api.yourname.pethost.app, com HTTPS na hora. Seu próprio domínio é um registro DNS. - O preço: € 9,99 por mês por 2 vCPU, 3 GB e 30 GB, para esta API e todos os seus outros projetos. Não existe plano gratuito.
O que você precisa para fazer deploy de um app Gin em 2026
Três coisas: o app, o comando pethost e uma conta no Pethost.
O app aqui é o que o quickstart do Gin deixa pronto: go mod init my-api, go get github.com/gin-gonic/gin e este main.go:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
router.Run() // listens on 0.0.0.0:8080 by default
}
O comando é um programa, instalado com uma linha. Todos os comandos dele estão na referência da CLI.
curl -fsSL https://pethost.dev/install.sh | sh # macOS, Linux
irm https://pethost.dev/install.ps1 | iex # Windows, in PowerShell
A conta precisa de um plano. Se você não entrou, o pethost deploy abre o seu navegador e faz o seu login. Se você ainda não tem um plano, ele mostra onde escolher um e espera.
Faça o deploy do app Gin com um comando
Vá até a pasta que tem o go.mod e rode pethost deploy. Esta é a tela inteira, para o quickstart:
$ cd my-api
$ pethost deploy
Name it [my-api]: it will live at https://my-api.sam.pethost.app
✓ Packed 3 files, 9 KB
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ Go program detected, wrote Dockerfile.
✓ Packed 4 files, 10 KB
✓ Uploaded straight to your machine
✓ Built and started in 58 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env
✓ app listens on 8080 → https://my-api.sam.pethost.app
It answers 404.
https://my-api.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
- Ele pergunta uma coisa O nome do projeto, que é a primeira palavra do endereço. Enter usa o nome da pasta.
- A máquina não encontra nada para rodar A linha com o X é a resposta dela: um projeto roda a partir de um Dockerfile ou de um arquivo Compose, e a pasta ainda não tem nenhum dos dois.
- O pethost escreve o Dockerfile Ele viu o
go.mode umpackage mainao lado, e envia a pasta de novo. - A máquina faz o build e o inicia Ela vê que o programa escuta na 8080 e manda o endereço para lá. Depois o pethost acessa o próprio endereço e mostra o que ele respondeu.
A resposta é 404 porque o quickstart não tem rota em /, só em /ping. Uma API sua muitas vezes vai dizer o mesmo, e isso quer dizer que o programa está no ar e respondendo. Acesse a rota que existe:
$ curl https://my-api.sam.pethost.app/ping
{"message":"pong"}
O arquivo .pethost diz qual projeto é esta pasta. Faça o commit dele junto com o Dockerfile, e o próximo deploy não pergunta nada.
O Dockerfile que o pethost escreve para um programa Go
Este é o arquivo como foi escrito na pasta do quickstart, inteiro:
# Written by pethost deploy for this Go program: Go 1.25 (go.mod), its program is ..
# It is yours now: change it as you like. pethost does not write it again.
FROM golang:1.25
WORKDIR /app
COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
go build -o /usr/local/bin/my-api .
CMD ["my-api"]
A primeira linha dele diz o que o pethost leu na sua pasta. Três coisas vêm de lá:
- A versão do Go é a da linha
godogo.mod. - O programa é o
package mainna raiz do módulo, ou a única pasta decmd/que tem um. Quandocmd/tem vários, o pethost não escreve nada e diz por quê: qual programa os visitantes recebem é você quem decide. - O nome é a última parte do caminho do módulo, como o
go installo chamaria. UmProcfilecom uma linhawebinicia o programa como essa linha diz.
As duas montagens de cache guardam os módulos e o cache de build do Go na sua máquina entre um deploy e outro. É por isso que o segundo deploy levou 2 segundos. Se a máquina não consegue fazer o build ou iniciar o Dockerfile que o pethost escreveu, o pethost tira o arquivo da sua pasta e diz o que falhou.
Defina o GIN_MODE e outras variáveis de ambiente
O Gin inicia em modo debug: as linhas de log dele começam com [GIN-debug]. O log também diz qual porta ele usou:
$ pethost logs
2026-10-10T11:15:22Z app [GIN-debug] GET /ping --> main.main.func1 (3 handlers)
2026-10-10T11:15:22Z app [GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
2026-10-10T11:15:22Z app [GIN-debug] Listening and serving HTTP on :8080
Uma variável é um comando. Ela vai para o arquivo .env do projeto na máquina, que todo deploy seguinte mantém, e o app reinicia com ela:
$ pethost env set GIN_MODE=release
my-api (.pethost)
✓ /.env has GIN_MODE now. Deployed in 4 s.
Só o nome, sem valor, faz o comando pedir o valor sem mostrá-lo, que é o jeito certo para um segredo: pethost env set DATABASE_URL. Você não precisa definir a PORT: com router.Run() o Gin usa a 8080, e com router.Run(":3000") a máquina encontra a 3000 do mesmo jeito.
Altere o código e faça o deploy de novo
Edite um handler e rode o mesmo comando. A máquina guarda as camadas do build e os caches do Go:
$ pethost deploy
my-api (.pethost)
✓ Packed 5 files · uploaded · built and started in 2 s
· kept the project's .env
· wrote compose.yaml for the Dockerfile: the service app, reading .env
· kept the project's x-pethost
It answers 404.
https://my-api.sam.pethost.app
Para fazer o deploy a cada push, conecte o repositório uma vez:
pethost github sam/my-api # from now on, every push deploys itself
O Pethost lê só os repositórios que você deu ao GitHub App dele. Se um deploy der errado, pethost rollback coloca de volta a versão anterior, e a sua máquina guarda as três versões antes da atual. Um agente de IA pode fazer tudo isso por você pelo servidor MCP do Pethost: como um agente faz o deploy de um projeto e cuida dele. O mesmo comando faz o deploy de um app Fiber.
Use seu próprio domínio na API
Qualquer nome sob o domínio da sua conta já é um endereço na hora, com HTTPS. Um domínio seu leva um comando e um registro DNS:
pethost domain add api.example.com
O comando mostra o registro a criar: um CNAME do seu nome para o nome da sua máquina. O certificado chega sozinho assim que o nome resolve, e se renova sozinho.
O que você recebe pelo preço
O Pethost custa € 9,99 por mês por tudo o que você hospeda, com 2 vCPU, 3 GB de memória e 30 GB de disco. Um programa Gin é um binário pequeno, então a máquina tem espaço para o banco de dados dele, um worker e os seus outros projetos. Não há taxa por projeto e nada é medido: uma segunda API não custa nada a mais, e um Postgres ao lado dela entra no mesmo preço.
- € 9,99 por mês por todos os seus projetos, nada medido
- 58s para fazer o build e iniciar o quickstart, na primeira vez
- 2s para o deploy seguinte
O que já vem feito para você: HTTPS com certificados que se renovam sozinhos, deploys a partir do GitHub, backups noturnos guardados por 14 dias, SSH em qualquer container, e cada requisição contada. O painel mostra os caminhos mais acessados e a taxa de erros dos últimos 30 dias, que para uma API é a lista das rotas que as pessoas realmente chamam. A máquina está sempre ligada, então uma requisição nunca espera um cold start. Os planos estão na parte de preços da página inicial.
O Pethost é a melhor escolha para
- Desenvolvedores Go com uma API pequena: o programa, o banco de dados e o worker em uma máquina, em uma só fatura
- Desenvolvedores solo com vários projetos paralelos, cada um no seu próprio endereço
- Quem deixa o agente fazer o deploy: o Claude Code ou o Codex coloca a API no ar e lê os logs dela
- Startups no começo que querem um custo mensal fixo enquanto o produto é pequeno
Procure outra opção se
- Sua aplicação precisa de várias regiões ou de autoscaling
Perguntas
Um app Gin precisa de Dockerfile para fazer deploy?
No Pethost, um projeto roda a partir de um Dockerfile ou de um arquivo Compose, e você não precisa escrevê-lo: em uma pasta que não tem nenhum dos dois, o pethost deploy escreve o Dockerfile de um programa Go e faz o deploy. O arquivo fica na sua pasta, e você pode alterá-lo.
Em qual porta um app Gin deve escutar?
Em qualquer uma. Com router.Run() o Gin escuta na 8080, ou na porta que a variável PORT indicar. O Pethost encontra a porta em que o programa escuta e manda o endereço para lá, com HTTPS.
Como definir GIN_MODE=release em produção?
Rode pethost env set GIN_MODE=release na pasta do projeto. A variável vai para o arquivo .env do projeto na máquina, o app reinicia com ela, e os próximos deploys a mantêm.
Por que o pethost deploy diz “It answers 404” para a minha API Gin?
Depois de um deploy, o pethost acessa o endereço / e mostra a resposta. Uma API sem rota em / responde 404 ali, o que ainda mostra que o programa está no ar. Acesse uma das suas rotas para ver que funciona.
Dá para fazer deploy de um app Gin do GitHub a cada push?
Sim. Faça o deploy da pasta uma vez com pethost deploy e depois rode pethost github owner/repository. A partir daí, cada push no repositório faz o deploy sozinho, e pethost rollback volta para um commit anterior.
Quanto custa hospedar uma API Gin no Pethost?
€ 9,99 por mês no Starter, com 2 vCPU, 3 GB e 30 GB e sem taxa por projeto: suas outras APIs, sites e bancos de dados também rodam lá. Não existe plano gratuito. Os preços são sem IVA.
As telas são deploys do app que o quickstart do Gin escreve, com o Gin 1.12.0, o Go 1.25 e o pethost 0.2.1, em uma máquina de teste nossa que nunca tinha feito build de nada. A conta nelas é a de exemplo, sam.
Coloque seus projetos no ar hoje
Publique apps, bots e bancos de dados pelo seu agente, pelo GitHub ou pelo navegador, quantos couberem, a um preço fixo. Nada medido, nada cobrado à parte.