Pular para o conteúdo
use-cases / preview-env-per-pr-cheap / hero
CONTAINERS · SNAPSHOTS · PR PREVIEWS

Um ambiente de preview por pull request, o mês todo, $30

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.

CRON · DESTRUIR PREVIEWS DE PRs MERGEDuma linha, a cada 5 minutos
# Quando um PR é merged, a cron derruba o contêiner dele.*/5 * * * * curl -X DELETE https://api.hoody.com/api/v1/containers/$MERGED_PR_CID
LINHAGEM DE SNAPSHOTuma base · muitos clones
STAGING-BASEsnap-2026-05-01 · 4.2 GB
PÁGINAS COPY-ON-WRITE COMPARTILHADAS30 / 30 contêineres
use-cases / preview-env-per-pr-cheap / mechanism

Como um PR vira uma URL

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.

    01
    PASSO 01 · UMA VEZ

    Tire um snapshot do contêiner de staging

    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.

    02
    PASSO 02 · POR PR

    Clone o snapshot no push

    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.

    03
    PASSO 03 · NO MERGE

    Destrua quando o PR fechar

    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.

use-cases / preview-env-per-pr-cheap / api

Os endpoints exatos que sua CI chama

Três endpoints reais das APIs Hoody Containers e Snapshots. Encaixe-os no passo do GitHub Actions que você já tem.

AMBIENTE DE PREVIEW · TABELA DE CHAMADAScontainers + snapshots
  • POSTmétodo · path
    /api/v1/containers/[staging_id]/snapshots

    Capture o snapshot staging-base

    Body: [ "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.

  • POSTmétodo · path
    /api/v1/projects/[project_id]/containers

    Clone um contêiner novo por PR

    O 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á.

  • DELETEmétodo · path
    /api/v1/containers/[pr_container_id]

    Aposente o preview quando o PR fechar

    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.

use-cases / preview-env-per-pr-cheap / powers

O que muda quando previews são grátis

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.

VELOCIDADE DE REVIEW

Revisores clicam, não fazem pull

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.

ORÇAMENTO

PRs ociosos não custam nada

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.

DESIGN & PRODUTO

Stakeholders entram no loop

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.

use-cases / preview-env-per-pr-cheap / compare

A matemática em dólares, sem rodeios

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.

ANTES · PREVIEWS VERCEL, TIME PRO

$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.

VS
DEPOIS · HOODY · UMA MÁQUINA BARE-METAL

$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.

use-cases / preview-env-per-pr-cheap / punchline

Ambientes de preview deixam de ser um item de orçamento. Eles viram o padrão.

antes · limitado aos 10 ativosdepois · um por pull request
COMO ERA A POLÍTICA ANTIGApreview só dos 10 PRs mais barulhentosos outros vinte ganham um screenshot no comentário
COMO É AGORAtodo PR · todo diff · todo revisorsem documento de política, sem ticket pedindo um preview
use-cases / preview-env-per-pr-cheap / replaces

O que isso substitui

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º.

  • Vercel preview environments (Pro / Enterprise)Por assento mais minutos de build mais largura de banda
  • GitHub Codespaces previewsCobrança por hora, esteja o revisor olhando ou não
  • AWS Fargate preview tasksHoras de vCPU + memória por task, mais transferência de dados
  • Render preview environmentsPreço por ambiente, ocioso não é grátis
  • Heroku review appsUm dyno por PR, dyno-horas por review
  • Netlify deploy previews + minutos de buildMinutos de build medem todo push, não toda review
use-cases / preview-env-per-pr-cheap / cta

Snapshot uma vez. Clone por PR. Destrua no merge. O revisor nunca sente a costura.

use-cases / preview-env-per-pr-cheap / related

Leia os outros