Aller au contenu
use-cases / preview-env-per-pr-cheap / hero
CONTENEURS · SNAPSHOTS · PRÉVISUALISATIONS DE PR

Un environnement de prévisualisation par pull request, tout le mois

Faites un snapshot de votre conteneur de staging une fois. Chaque nouvelle PR clone le snapshot dans son propre conteneur avec sa propre URL. Le conteneur se réveille quand un relecteur ouvre le lien, fait la sieste quand personne ne regarde, et se fait détruire par une ligne de cron quand la PR se ferme. Soixante branches, soixante URL, et une facture stable.

Lire la doc des snapshots
CRON · DÉTRUIRE LES PRÉVISUALISATIONS FUSIONNÉESune ligne, toutes les 5 minutes
# Quand une PR fusionne, le cron supprime son conteneur.*/5 * * * * curl -X DELETE https://api.hoody.com/api/v1/containers/$MERGED_PR_CID
LIGNÉE DE SNAPSHOTune base · plusieurs clones
STAGING-BASEsnap-2026-05-01 · 4.2 GB
PAGES COPY-ON-WRITE PARTAGÉES30 / 30 conteneurs
use-cases / preview-env-per-pr-cheap / mechanism

Comment une PR devient une URL

Trois appels. Une ligne de cron. Le pipeline de CI que vous avez déjà les déclenche dans l'ordre que vous écririez vous-même si vous deviez le faire.

    01
    ÉTAPE 01 · UNE FOIS

    Snapshot du conteneur de staging

    Choisissez le conteneur qui fait tourner votre stack de staging — application, base de données, files, fixtures. Faites un POST de snapshot, nommez-le staging-base. Fichiers, processus et mémoire sont capturés. Le snapshot est un point de départ delta-able, pas un tarball — les clones partagent ses pages au lieu de les copier.

    02
    ÉTAPE 02 · PAR PR

    Clonage du snapshot au push

    Votre CI reçoit le webhook de push GitHub et fait un POST à l'API conteneurs avec source_snapshot=staging-base. Un nouveau conteneur démarre en quelques secondes avec la base de données pré-remplie et la branche de la PR sortie. L'URL revient comme status check.

    03
    ÉTAPE 03 · À LA FUSION

    Destruction à la fermeture de la PR

    Une entrée cron de 5 minutes parcourt les PR fusionnées et fait DELETE sur leurs conteneurs — ou votre webhook de fusion le fait en ligne. Le delta disque du conteneur est récupéré, l'URL est libérée, et le slot retourne au pool pour la prochaine PR.

L'étape 02 prend à peu près le temps d'un yarn install. L'étape 03 est un seul appel HTTP. Rien d'autre n'a besoin de savoir que le conteneur de la PR a existé.

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

Les endpoints exacts que votre CI appelle

Trois vrais endpoints des API Hoody Containers et Snapshots. Glissez-les dans l'étape GitHub Actions que vous avez déjà.

ENV DE PREVIEW · TABLE D'APPELScontainers + snapshots
  • POSTmethod · path
    /api/v1/containers/[staging_id]/snapshots

    Capturer le snapshot staging-base

    Body : [ "alias": "staging-base", "expiry": 30 ]. Renvoie un nom de snapshot comme snap-20260501-093000. Lancez ceci une fois par déploiement de la branche main — chaque clone de PR descend de la capture la plus récente.

  • POSTmethod · path
    /api/v1/projects/[project_id]/containers

    Cloner un conteneur frais par PR

    Le body choisit server_id et un container_image ; passez environment_vars pour injecter le numéro de PR, la ref de branche et le nom de base de données. Le conteneur démarre depuis le système de fichiers de votre snapshot, pas de zéro — caches et données seed sont déjà là.

  • DELETEmethod · path
    /api/v1/containers/[pr_container_id]

    Mettre à la retraite la prévisualisation à la fermeture de la PR

    Un seul appel. Le conteneur s'éteint et son delta disque est récupéré ; rien d'autre n'a besoin d'être démonté. Une entrée cron toutes les 5 minutes gère les PR qui se sont fermées pendant que personne ne regardait.

Endpoints issus de l'API Hoody Container Snapshots et de l'API Containers. L'expiration des snapshots est en jours ; la création de conteneurs accepte environment_vars, ssh_public_key, autostart, ramdisk et realm_ids — voir la doc pour le schéma complet de la requête.

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

Ce qui change quand les prévisualisations sont gratuites

Les calculs cessent de brider le comportement des relecteurs. Trois habitudes qui étaient trop chères à 40 $ la prévisualisation apparaissent d'elles-mêmes dès que le coût par PR est une erreur d'arrondi.

VITESSE DE RELECTURE

Les relecteurs cliquent, ils ne pull pas

Personne ne checkout la branche en local pour reproduire le bug. Ils ouvrent l'URL, cliquent sur la chose cassée, laissent une capture d'écran dans la PR. La boucle de relecture tourne sur ce que le code fait vraiment, pas ce que le diff suggère qu'il fait.

BUDGET

Les PR inactives ne coûtent rien

Les cinquante PR que personne ne relit en ce moment coûtent zéro CPU et zéro RAM. Elles partagent les pages du snapshot staging-base sur le disque, donc même leur empreinte est principalement du delta. La facture est bornée par la machine, pas par le nombre de PR ouvertes.

DESIGN & PRODUIT

Les parties prenantes rejoignent la boucle

Votre designer, votre support engineer, votre lead commercial — quiconque a l'URL peut tester la PR. Ils n'allaient jamais git checkout une branche. Avec un lien, ils regardent vraiment le changement avant qu'il ne sorte.

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

Le calcul en dollars, sans détour

Une équipe ouvrant 30 PR par mois. Le chiffre d'avant est la facture standard d'environnements de prévisualisation. Le chiffre d'après, c'est une seule machine bare-metal Hoody qui accueille les 30 plus votre staging.

AVANT · VERCEL PREVIEWS, ÉQUIPE PRO

480 $/mois

Tarification Pro par siège plus minutes de build plus bande passante sur une équipe de 6 ingénieurs lançant 30 déploiements de PR par mois. La plupart des équipes plafonnent les prévisualisations aux 10 actives parce que les 20 suivantes coûtent vraiment de l'argent.

VS
APRÈS · HOODY · UNE MACHINE BARE-METAL

30 $/mois

Un serveur de gamme moyenne du marketplace Hoody fait tourner staging plus 30 clones de PR plus votre cache CI. Ajoutez les soixante suivants pour 0 $ — le copy-on-write fait que chaque clone est constitué des pages du snapshot plus un delta.

Le tarif public de Vercel Pro est de 20 $/siège/mois plus l'usage ; la tarification d'entrée bare-metal Hoody commence à 29 $/mois et varie selon les spécifications, la région et la durée de location. La densité des conteneurs dépend de la charge — les apps web typiques s'empilent par dizaines à centaines ; les gros services stateful demandent plus de marge.

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

Les environnements de prévisualisation cessent d'être un poste budgétaire. Ils deviennent la valeur par défaut.

avant · plafonné aux 10 activesaprès · un par pull request
À QUOI RESSEMBLAIT L'ANCIENNE POLITIQUEne prévisualiser que les 10 PR les plus bruyantesles vingt autres ont droit à une capture d'écran en commentaire
À QUOI ÇA RESSEMBLE MAINTENANTchaque PR · chaque diff · chaque relecteurpas de doc de politique, pas de ticket pour réclamer une prévisualisation
Voir la doc des snapshots
use-cases / preview-env-per-pr-cheap / replaces

Ce que cela remplace

Les produits d'environnements de prévisualisation se tarifent par siège, par minute, ou par conteneur en cours d'exécution. Hoody se tarifie par serveur — la 30e prévisualisation coûte la même chose que la 1re.

  • Vercel preview environments (Pro / Enterprise)Par siège plus minutes de build plus bande passante
  • GitHub Codespaces previewsFacturation à l'heure que le relecteur regarde ou non
  • AWS Fargate preview tasksHeures vCPU + mémoire par tâche, plus transfert de données
  • Render preview environmentsTarification par environnement, l'inactivité n'est pas gratuite
  • Heroku review appsUn dyno par PR, heures-dyno par relecture
  • Netlify deploy previews + build minutesLes minutes de build comptent chaque push, pas chaque relecture
use-cases / preview-env-per-pr-cheap / cta

Snapshot une fois. Clone par PR. Destruction à la fusion. Le relecteur ne sent jamais la couture.

Lire le guide des snapshots
use-cases / preview-env-per-pr-cheap / related

Découvrez les autres