Documentação/ Implantação/ Deploy via Git

Deploy via Git

Conecte qualquer repositório Git e implante automaticamente a cada push. O sh0 cuida da clonagem, build e implantação da sua aplicação com zero configuração.

Conectando um Repositório

Para implantar a partir do Git, navegue até sua stack no painel do sh0 e selecione Novo App → Repositório Git. Você pode conectar um repositório inserindo sua URL ou vinculando sua conta do provedor Git para acesso a repositórios privados.

New app creation dialog showing the Git Repository option

Para repositórios públicos, cole a URL de clone HTTPS diretamente. Para repositórios privados, você precisará conectar sua conta do provedor Git ou adicionar uma chave SSH em Configurações → Chaves SSH.

Repository URL
https://github.com/your-org/your-app.git

Provedores Suportados

O sh0 funciona com qualquer provedor Git que suporte webhooks e clonagem SSH/HTTPS:

  • GitHub -- Integração OAuth para vinculação de repositório com um clique
  • GitLab -- Auto-hospedado e GitLab.com suportados
  • Bitbucket -- Edições Cloud e Server
  • Gitea / Forgejo -- Forjas Git auto-hospedadas
  • Qualquer servidor Git -- Qualquer repositório acessível via SSH ou HTTPS
Git provider selection screen with GitHub, GitLab, and Bitbucket options
Tip
Conectar sua conta GitHub via OAuth permite ao sh0 listar seus repositórios, configurar webhooks automaticamente e reportar o status do build de volta nos seus pull requests.

Configuração de Webhook

Webhooks habilitam o push-to-deploy. Quando você faz push de código para seu repositório, seu provedor Git envia uma notificação para o sh0, que aciona um novo build e implantação.

Se você conectou seu provedor Git via OAuth, os webhooks são configurados automaticamente. Para configuração manual, adicione um webhook nas configurações do seu repositório com a seguinte URL:

Webhook URL
https://panel.example.com/api/v1/webhooks/{provider}/{app_id}

O segmento do provedor é o seu provedor Git: github, gitlab, bitbucket. O sh0 verifica o cabeçalho de assinatura que cada provedor envia; uma requisição sem assinatura válida é recusada.

Configure o webhook para acionar em eventos de push. O sh0 gera um segredo de webhook para cada aplicação, que você encontra em Configurações do App → Git → Segredo do Webhook. Adicione este segredo ao seu provedor Git para verificar payloads recebidos.

Webhook configuration panel showing the webhook URL and secret
Note
O sh0 valida assinaturas de webhook usando HMAC-SHA256. Isso garante que apenas pushes genuínos do seu repositório acionem implantações.

Seleção de Branch

Por padrão, o sh0 implanta a partir da branch main. Você pode alterar a branch de implantação nas configurações da aplicação para implantar a partir de qualquer branch no seu repositório.

Branch selection dropdown in app Git settings

Configurações comuns incluem:

  • Produção: Implantar a partir de main ou production
  • Staging: Implantar a partir de develop ou staging
  • Feature branches: Use Ambientes de Preview para implantações automáticas de PR

Configurações de Build

O sh0 detecta automaticamente a stack da sua aplicação e configura o pipeline de build adequadamente. Você também pode sobrescrever essas configurações manualmente.

Auto-Detecção de Dockerfile

Se seu repositório contém um Dockerfile, o sh0 o usa automaticamente. Você também pode especificar um caminho de Dockerfile personalizado e contexto de build:

Build configuration
dockerfile: ./deploy/Dockerfile
context: .
build_args:
  NODE_ENV: production
  API_URL: https://api.example.com

O sh0 suporta builds multi-stage, argumentos de build e contextos de build personalizados. O build roda no seu servidor, então imagens grandes não geram custos de transferência.

Buildpacks

Se seu repositório não inclui um Dockerfile, o sh0 analisa seu código e gera um Dockerfile otimizado automaticamente. Ele detecta mais de 15 frameworks e linguagens:

  • Node.js: Next.js, Nuxt, SvelteKit, Remix, Express, Fastify
  • Python: Django, Flask, FastAPI
  • Go: Módulos Go padrão
  • Rust: Projetos baseados em Cargo
  • PHP: Laravel, Symfony
  • Ruby: Rails, Sinatra
  • Sites estáticos: HTML, Astro, Hugo, Jekyll
Auto-detected build settings showing Node.js with Next.js framework
Tip
Você pode sobrescrever as configurações auto-detectadas a qualquer momento. Navegue até Configurações do App → Build para personalizar o Dockerfile, comando de build ou comando de instalação.

Deploy a cada push

Com webhooks configurados, cada push para sua branch de implantação aciona automaticamente uma nova implantação. O fluxo é:

  1. Você faz push do código para a branch configurada
  2. Seu provedor Git envia um webhook para o sh0
  3. O sh0 puxa o código mais recente do seu repositório
  4. A imagem Docker é construída a partir do seu Dockerfile (ou um gerado automaticamente)
  5. Um novo contêiner é implantado usando implantação blue-green
  6. O tráfego é trocado para o novo contêiner assim que os health checks passarem

Você também pode desabilitar implantações automáticas e acioná-las manualmente pelo painel ou via API:

Trigger deploy via API
curl -X POST https://panel.example.com/api/v1/apps/{app_id}/deployments \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" -d '{}'

URL de implantação (sem provedor Git)

Note
Chega na próxima versão: a URL de implantação não faz parte da v1.10.2, a última versão publicada. Esta seção a descreve antes do lançamento.

Toda aplicação, qualquer que seja a sua origem (repositório Git, Dockerfile, imagem ou arquivo), pode ter uma URL de implantação. Um simples POST nessa URL reimplanta a aplicação exatamente como o botão Implantar. Sem provedor Git, sem assinatura e sem chave de API: qualquer ferramenta capaz de enviar uma requisição HTTP pode usá-la — uma tarefa de integração contínua, um script, um cron, um servidor de build.

Deploy URL
curl -X POST https://panel.example.com/api/v1/hooks/deploy/{app_id}/{token}

Abra a aplicação, vá em Configurações e clique em «Criar a URL de implantação» na seção «URL de implantação». Copie a URL imediatamente: o token que ela contém só é mostrado uma vez e é guardado com hash. Se perdê-lo, regenere a URL — a anterior deixa de funcionar na hora.

Note
O que ela não faz: não envia código novo (uma aplicação implantada a partir de um arquivo reimplanta o seu último arquivo), não lê nada e não alcança nenhuma outra aplicação. As chamadas recebidas enquanto uma implantação aguarda são agrupadas nela: dez chamadas seguidas iniciam no máximo uma implantação a mais. Uma URL desativada, um token errado e uma aplicação desconhecida respondem todos o mesmo 404.

Visualizando Logs de Build

Cada implantação gera um log completo de build que você pode transmitir em tempo real pelo painel. Os logs de build incluem:

  • Saída do clone e checkout Git
  • Etapas de build da imagem Docker (cada camada)
  • Inicialização do contêiner e resultados do health check
  • Confirmação da troca de tráfego
Real-time build log streaming in the sh0 dashboard

Logs de build são armazenados para cada implantação e podem ser acessados pela aba Implantações a qualquer momento. Se um build falhar, o sh0 mantém a versão anterior em execução e marca a implantação como falha com uma mensagem de erro detalhada.

Warning
Se seu build falhar repetidamente, verifique os Logs de Build para dependências ausentes ou comandos de build incorretos. Você também pode acessar um contêiner de debug via SSH usando Acesso ao Terminal para solucionar problemas.