Desenvolva uma aplicação web completa para gerenciamento de ambientes temporários de testes (Ephemeral Environments), integrada ao GitLab.
Permitir que o setor de Qualidade (QA) realize deploys isolados de qualquer branch ou commit do GitLab sem depender da equipe de desenvolvimento ou infraestrutura.
Cada ambiente criado deve possuir:
- Deploy isolado em container
- Banco de dados próprio
- Backup restaurado automaticamente
- Renovação de validade
- Remoção automática após expiração
- Auditoria completa
O sistema deve ser multiusuário e possuir controle administrativo.
Usuário QA:
-
Seleciona um projeto
-
Seleciona uma branch
-
Seleciona um commit específico
-
Visualiza:
- Hash do commit
- Autor
- Data
- Mensagem do commit (obtida via API do GitLab)
-
Define:
- Backup de banco (envia o .sql ou seleciona baixar banco de produção agora e o banco de produção é copiado)
- Envs que podem ser alteradas, exemplo um backend que ele subiu anteriormente, coloca-se a URL aqui.
-
Aciona Deploy
O sistema então:
- Clona o código da branch
- Checkout no commit selecionado
- Executa build da imagem Docker
- Cria rede isolada
- Provisiona banco temporário
- Restaura backup
- Sobrescreve variáveis de ambiente configuradas
- Executa container
- Disponibiliza URL de acesso
Utilizar API do GitLab.
Funcionalidades:
- Listar projetos
- Listar branches
- Listar commits
- Obter detalhes do commit
- Obter mensagem do commit
- Obter autor
- Obter pipeline associado
- Validar acesso via Token
Identificador principal do deploy:
COMMIT_HASH
Exemplo:
feature-auth ↓ a84c19f ↓ env-a84c19f
Ao criar ambiente:
Opção 1:
Selecionar backup existente
Opção 2:
Enviar arquivo SQL
Formatos:
- .sql
- .sql.gz
Fluxo:
- Criar banco isolado
- Restaurar backup
- Configurar URL automaticamente
- Injetar DATABASE_URL no container
Cada ambiente deve possuir seu próprio banco.
Nenhum ambiente deve compartilhar banco.
Administrador configura previamente quais variáveis podem ser alteradas.
Exemplo:
API_URL FEATURE_FLAG_X EMAIL_ENABLED S3_BUCKET
Usuário QA poderá informar valores apenas para variáveis autorizadas.
Variáveis bloqueadas:
- Secrets
- Tokens
- Chaves privadas
- Credenciais de infraestrutura
Campos:
- Nome
- Projeto GitLab
- URL do repositório
- Token GitLab
- Dockerfile Path
- Build Command
- Start Command
- URL banco produção
- Estratégia de banco
Lista de variáveis editáveis.
Exemplo:
Nome Tipo Obrigatória Valor padrão
Definir:
- Prazo padrão
- Prazo máximo
- Limite de renovações
Exemplo:
Padrão: 7 dias Máximo: 30 dias
Listagem em tempo real.
Exibir:
- Nome do ambiente
- Projeto
- Branch
- Commit
- Hash
- Autor
- Mensagem do commit
- Criador
- Data de criação
- Data de expiração
- Tempo restante
- Status
- URL
Ações:
- Renovar
- Reiniciar
- Ver logs
- Abrir ambiente
- Excluir
Quando faltar menos de X dias:
Exibir aviso visual.
Permitir:
Renovar por:
- 1 dia
- 3 dias
- 7 dias
- prazo personalizado
Respeitando limite definido pelo administrador.
Job agendado.
Ao expirar:
- Parar containers
- Remover containers
- Remover volumes
- Remover banco
- Remover rede
- Remover imagens órfãs
- Atualizar auditoria
Sem intervenção manual.
Usuário pode marcar ambiente para exclusão.
Fluxo:
- Confirmar ação
- Encerrar ambiente
- Limpar recursos
- Registrar auditoria
Registrar:
- Criação
- Renovação
- Reinício
- Exclusão
- Expiração automática
Dados:
- Usuário
- Data
- IP
- Projeto
- Commit
- Ambiente
Perfis:
Pode:
- Configurar projetos
- Configurar variáveis
- Configurar limites
- Excluir qualquer ambiente
Pode:
- Criar ambiente
- Renovar ambiente
- Excluir ambiente próprio
Pode apenas consultar.
Indicadores:
- Ambientes ativos
- Ambientes expirando
- Ambientes expirados
- Consumo de recursos
- Deploys por projeto
- Deploys por usuário
Backend:
- BunJS
- TypeScript
- Express (Ou Elysa)
- Prisma
Frontend:
- React
- TypeScript
- ShadCN
- TanStack Query
Banco:
- PostgreSQL
Infra:
- Docker
- Docker Compose
Fila:
- BullMQ
Autenticação:
- JWT + Refresh Token
- Multi-tenant
- Auditoria completa
- Logs centralizados
- Observabilidade
- Deploy idempotente
- Retry automático em falhas
- Cleanup automático
- Isolamento entre ambientes
- Controle de concorrência
- Rate limit
- RBAC
- Preview URLs automáticas
- Logs em tempo real
- Console web do container
Todo ambiente criado deve receber automaticamente uma URL única acessível pela rede corporativa.
O usuário não deve precisar conhecer:
- IP do container
- Porta do container
- Nome do host Docker
A URL deve ser criada automaticamente durante o deploy.
Exemplo:
frontend-a84c19f.qa.local
backend-a84c19f.qa.local
api-feature-auth.qa.local
O sistema deve integrar com a API do Pi-hole para gerenciamento automático de DNS.
Durante a criação do ambiente:
- Gerar hostname único
- Registrar entrada DNS no Pi-hole
- Apontar para IP previamente configurado do servidor de Proxy Reverso
- Validar propagação do registro
Exemplo:
frontend-a84c19f.qa.local ↓ 10.10.10.5
Onde:
10.10.10.5 = servidor Traefik ou Caddy
Utilizar:
- Traefik (preferencial) ou
- Caddy
Responsabilidades:
- Descoberta automática dos containers
- Roteamento HTTP
- Roteamento HTTPS
- Geração automática de certificados
- Renovação automática de certificados
- Health Checks
Fluxo:
DNS ↓ Traefik/Caddy ↓ Container do ambiente
Ao concluir o deploy:
- Criar container
- Registrar DNS no Pi-hole
- Registrar rota no proxy reverso
- Validar disponibilidade
- Exibir URL ao usuário
Exemplo:
https://frontend-a84c19f.qa.local
https://backend-a84c19f.qa.local
Todos os ambientes devem possuir HTTPS habilitado.
Possibilidades:
- CA interna corporativa
- Certificados próprios confiáveis na rede
ou
- Let's Encrypt
- Renovação automática
O sistema deve suportar ambas as estratégias.
Administrador poderá definir:
Domínio base:
qa.local
preview.empresa.local
sandbox.empresa.local
Formato do hostname:
{projeto}-{hash}
ou
{projeto}-{branch}
ou
{projeto}-{usuario}-{hash}
Exemplos:
erp-a84c19f.qa.local
portal-feature-login.qa.local
api-mateus-a84c19f.qa.local
Quando o ambiente for removido:
- Excluir container
- Excluir banco
- Excluir volumes
- Excluir rede
- Excluir rota do proxy reverso
- Excluir registro DNS do Pi-hole
- Atualizar auditoria
Nenhum recurso deve permanecer órfão.
Após deploy:
O sistema deve validar:
- DNS resolvendo corretamente
- Certificado válido
- Proxy respondendo
- Aplicação respondendo
- Banco conectado
Somente após todas as verificações o ambiente será marcado como:
STATUS = READY
Caso contrário:
STATUS = FAILED
com logs detalhados para diagnóstico.
Um ambiente poderá possuir múltiplos serviços.
Exemplo:
Frontend: https://frontend-a84c19f.qa.local
Backend: https://api-a84c19f.qa.local
Swagger: https://swagger-a84c19f.qa.local
Admin: https://admin-a84c19f.qa.local
Todos gerenciados automaticamente pelo proxy reverso.
Objetivo final: permitir que qualquer analista de QA consiga criar, utilizar, renovar e remover ambientes temporários de testes baseados em branches ou commits específicos do GitLab sem depender da equipe de desenvolvimento ou infraestrutura.