Ambientes de Preview
Cada pull request recebe sua própria implantação ativa com uma URL única. Revise alterações em um ambiente real antes de mergear, depois limpe automaticamente quando o PR for fechado.
O que são Ambientes de Preview
Ambientes de preview são implantações temporárias e totalmente funcionais criadas automaticamente para cada pull request. Eles permitem testar alterações em um ambiente isolado que espelha a produção, sem afetar sua aplicação ativa.
Quando um membro da equipe abre um PR, o sh0 constrói a branch, implanta em uma URL única e posta um comentário no PR com o link do preview. Quando o PR é mergeado ou fechado, o ambiente de preview é automaticamente destruído.
Habilitando Previews
Ambientes de preview são habilitados por aplicação. Navegue até Configurações do App → Git → Ambientes de Preview e ative o recurso. Você precisará de um provedor Git conectado (GitHub, GitLab ou Bitbucket) com acesso a webhooks.
Uma vez habilitado, o sh0 escuta eventos de pull request do seu provedor Git:
- PR aberto: Construir e implantar a branch
- PR atualizado (novo push): Reconstruir e reimplantar
- PR mergeado ou fechado: Destruir o ambiente de preview
Implantações Automáticas de PR
Quando um pull request é aberto, o sh0 automaticamente:
- Clona a branch do PR
- Constrói uma imagem Docker usando o mesmo pipeline de build da produção
- Inicia um novo contêiner com o código do PR
- Atribui uma URL de preview única
- Posta um comentário no PR com o link do preview e status do build
- Atualiza o status check do PR (checkmark verde ou X vermelho)
Quando novos commits são enviados para a branch do PR, o sh0 automaticamente reconstrói e reimplanta o preview. A URL permanece a mesma, então os revisores sempre veem a versão mais recente.
main). Isso evita builds desnecessários para PRs entre feature branches.URLs de Preview
Cada ambiente de preview recebe uma URL única baseada no nome da branch e no nome da aplicação:
https://{branch-name}.{app-name}.your-domain.comPor exemplo, se sua aplicação se chama my-api e a branch do PR é feature/new-auth, a URL de preview seria:
https://feature-new-auth.my-api.sh0.appNomes de branches são sanitizados para uso em URLs: barras são substituídas por hífens e caracteres especiais são removidos. Certificados SSL são provisionados automaticamente para cada URL de preview via Caddy.
*.my-api.your-domain.com), URLs de preview funcionam imediatamente. Caso contrário, o sh0 provisiona registros DNS individuais para cada preview.Configurações de Ambientes de Preview
Você pode personalizar como os ambientes de preview se comportam:
- Filtro de branch base: Construir previews apenas para PRs direcionados a branches específicas
- Sobrescritas de variáveis de ambiente: Definir variáveis específicas de preview (ex.:
NODE_ENV=staging) - Limites de recursos: Limitar CPU e memória para contêineres de preview para economizar recursos
- TTL (tempo de vida): Destruir previews automaticamente após uma duração especificada, mesmo se o PR ainda estiver aberto
- Máximo de previews simultâneos: Limitar o número de ambientes de preview ativos para controlar o uso de recursos
Limpeza Automática
Quando um pull request é mergeado ou fechado, o sh0 limpa automaticamente o ambiente de preview:
- O contêiner de preview é parado e removido
- A imagem Docker é excluída para liberar espaço em disco
- A rota do Caddy é removida
- O certificado SSL é limpo
- Quaisquer volumes específicos do preview são excluídos (a menos que configurados para persistir)
Você também pode destruir manualmente um ambiente de preview pelo painel sem fechar o PR. Isso é útil se um preview está consumindo recursos e não é mais necessário para revisão.
Isolamento de Banco de Dados
Ambientes de preview podem ser configurados para usar bancos de dados isolados. O sh0 suporta duas estratégias:
- Banco de dados compartilhado: Ambientes de preview se conectam ao mesmo banco de dados do staging ou produção (somente leitura recomendado). Configure via sobrescritas de variáveis de ambiente.
- Banco de dados isolado: O sh0 cria um contêiner de banco de dados dedicado para cada preview. O banco de dados é populado a partir de um snapshot ou script de migração e destruído junto com o preview.
preview:
enabled: true
database_isolation: true
seed_command: "pg_restore --dbname=$DATABASE_URL /seeds/staging.dump"
max_concurrent: 5
ttl: 72h