
Sessenta contêineres em um servidor
Uma caixa bare-metal executa dezenas a centenas de contêineres Hoody. KSM e BTRFS dedup fazem o custo marginal próximo a zero.
Tire um snapshot do seu contêiner de staging uma vez. Cada novo PR clona o snapshot em seu próprio contêiner com sua própria URL. O contêiner acorda quando um revisor abre o link, cochila quando ninguém está olhando, e é destruído por uma cron de uma linha quando o PR fecha. Sessenta branches, sessenta URLs e uma conta fixa.
a URL à direita é o ambiente de preview — um clique, contêiner real, banco real
Três chamadas. Uma linha de cron. O pipeline de CI que você já tem dispara as três na ordem que você escreveria sozinho se tivesse que.
Escolha o contêiner que roda sua stack de staging — app, banco, filas, fixtures. Faça POST de um snapshot, dê o nome staging-base. Arquivos, processos e memória são capturados. O snapshot é um ponto de partida deltável, não um tarball — clones compartilham as páginas dele em vez de copiá-las.
Sua CI recebe o webhook de push do GitHub e faz POST para a Containers API com source_snapshot=staging-base. Um novo contêiner inicia em segundos com o banco populado e o branch do PR feito checkout. A URL volta como um status check.
Uma entrada de cron de 5 minutos varre PRs merged e faz DELETE nos contêineres deles — ou seu webhook de merge faz isso inline. O delta de disco do contêiner é recuperado, a URL é liberada, e o slot do contêiner volta para o pool para o próximo PR.
O Passo 02 leva mais ou menos o tempo de um yarn install. O Passo 03 é uma chamada HTTP. Nada mais precisa saber que o contêiner do PR existiu.
Três endpoints reais das APIs Hoody Containers e Snapshots. Encaixe-os no passo do GitHub Actions que você já tem.
/api/v1/containers/[staging_id]/snapshotsBody: [ "alias": "staging-base", "expiry": 30 ]. Retorna um nome de snapshot como snap-20260501-093000. Rode isso uma vez por deploy do branch principal — todo clone de PR descende da captura mais recente.
/api/v1/projects/[project_id]/containersO body escolhe server_id e um container_image; passe environment_vars para injetar o número do PR, ref do branch e nome do banco. O contêiner inicia a partir do sistema de arquivos do seu snapshot, não do zero — caches e dados de seed já estão lá.
/api/v1/containers/[pr_container_id]Uma chamada. O contêiner desliga e seu delta de disco é recuperado; nada mais precisa ser desmontado. Uma entrada de cron a cada 5 minutos lida com os PRs que fecharam enquanto ninguém estava olhando.
Endpoints da Hoody Container Snapshots API e da Containers API. A expiração de snapshot é em dias; a criação de contêiner aceita environment_vars, ssh_public_key, autostart, ramdisk e realm_ids — veja a documentação para o schema completo da requisição.
A matemática deixa de barrar o comportamento dos revisores. Três hábitos que eram caros demais a $40 por preview aparecem sozinhos quando o custo por PR é arredondamento.
Ninguém faz checkout do branch localmente para reproduzir o bug. Eles abrem a URL, clicam na coisa quebrada, deixam um screenshot no PR. O loop de review roda no que o código realmente faz, não no que o diff sugere que ele faz.
Os cinquenta PRs que ninguém está revisando agora custam zero CPU e zero RAM. Eles compartilham as páginas em disco do snapshot staging-base, então até a pegada deles é principalmente delta. A conta é limitada pela máquina, não pela contagem de PRs abertos.
Sua designer, seu engenheiro de suporte, seu líder de vendas — qualquer um com a URL pode mexer no PR. Eles nunca iam fazer git checkout de um branch. Com um link, eles realmente olham a mudança antes dela cair.
Um time abrindo 30 PRs por mês. O número antes é a conta padrão de ambiente de preview. O número depois é uma máquina bare-metal Hoody que cabe todos os 30 mais seu staging.
$480/mês
Pricing Pro por assento mais minutos de build mais largura de banda em um time de 6 engenheiros rodando 30 deploys de PR por mês. A maioria dos times limita previews aos 10 ativos porque os próximos 20 custam dinheiro de verdade.
$30/mês
Um servidor de tier médio do marketplace Hoody roda staging mais 30 clones de PR mais seu cache de CI. Adicione os próximos sessenta por $0 — copy-on-write significa que cada clone é as páginas do snapshot mais um delta.
Preço de tabela do Vercel Pro é $20/assento/mês mais uso; preço bare-metal Hoody é orientado pelo marketplace e começa abaixo de $20/mês para tiers de entrada. A densidade de contêineres depende da carga — apps web típicos empilham dezenas a centenas; serviços stateful grandes precisam de mais folga.
Ambientes de preview deixam de ser um item de orçamento. Eles viram o padrão.
Produtos de ambiente de preview cobram por assento, por minuto ou por contêiner em execução. O Hoody cobra por servidor — o 30º preview custa o mesmo que o 1º.
Snapshot uma vez. Clone por PR. Destrua no merge. O revisor nunca sente a costura.