
Sesenta contenedores en un servidor
Un servidor bare-metal ejecuta decenas a cientos de contenedores Hoody. KSM y dedup BTRFS hacen que el costo marginal sea casi cero.
Haz un snapshot de tu contenedor de staging una vez. Cada PR nuevo clona el snapshot en su propio contenedor con su propia URL. El contenedor despierta cuando un revisor abre el enlace, dormita cuando nadie mira, y un cron de una línea lo destruye cuando se cierra el PR. Sesenta ramas, sesenta URLs y una factura plana.
la URL de la derecha es el entorno de preview — un clic, contenedor real, base de datos real
Tres llamadas. Una línea de cron. La pipeline de CI que ya tienes las dispara en el orden que escribirías tú mismo si tuvieras que hacerlo.
Elige el contenedor que ejecuta tu stack de staging — app, base de datos, colas, fixtures. Haz POST de un snapshot, llámalo staging-base. Archivos, procesos y memoria quedan capturados. El snapshot es un punto de partida con deltas, no un tarball — los clones comparten sus páginas en lugar de copiarlas.
Tu CI recibe el webhook de push de GitHub y hace POST a la API de containers con source_snapshot=staging-base. Un nuevo contenedor arranca en segundos con la base de datos sembrada y la rama del PR checkeada. La URL vuelve como status check.
Un cron cada 5 minutos recorre los PRs fusionados y hace DELETE a sus contenedores — o tu webhook de merge lo hace inline. El delta de disco del contenedor se recupera, la URL queda libre y el slot del contenedor vuelve al pool para el siguiente PR.
El paso 02 tarda lo mismo que un yarn install. El paso 03 es una llamada HTTP. Nada más necesita saber que el contenedor del PR existió.
Tres endpoints reales de las APIs de Hoody Containers y Snapshots. Encájalos en el paso de GitHub Actions que ya tienes.
/api/v1/containers/[staging_id]/snapshotsBody: [ "alias": "staging-base", "expiry": 30 ]. Devuelve un nombre de snapshot tipo snap-20260501-093000. Ejecútalo una vez por deploy de la rama main — cada clon de PR desciende de la captura más reciente.
/api/v1/projects/[project_id]/containersEl body elige server_id y un container_image; pasa environment_vars para inyectar el número de PR, la ref de la rama y el nombre de la base de datos. El contenedor arranca desde el sistema de archivos de tu snapshot, no desde cero — las cachés y los datos sembrados ya están ahí.
/api/v1/containers/[pr_container_id]Una llamada. El contenedor se apaga y su delta de disco se recupera; nada más hay que desmontar. Una entrada de cron cada 5 minutos se ocupa de los PRs que se cerraron mientras nadie miraba.
Endpoints de la API de Hoody Container Snapshots y la API de Containers. La caducidad del snapshot es en días; la creación del contenedor acepta environment_vars, ssh_public_key, autostart, ramdisk y realm_ids — ver la documentación para el esquema completo de la petición.
Las cuentas dejan de condicionar el comportamiento del revisor. Tres hábitos que eran demasiado caros a 40 $ por preview aparecen solos cuando el coste por PR es un error de redondeo.
Nadie checkea la rama localmente para reproducir el bug. Abren la URL, hacen clic en lo que está roto, dejan una captura en el PR. El bucle de revisión corre sobre lo que el código realmente hace, no sobre lo que el diff sugiere que hace.
Los cincuenta PRs que nadie está revisando ahora mismo cuestan cero CPU y cero RAM. Comparten en disco las páginas del snapshot staging-base, así que incluso su huella es sobre todo el delta. La factura está acotada por la caja, no por el número de PRs abiertos.
Tu diseñador, tu ingeniero de soporte, tu lead de ventas — cualquiera con la URL puede toquetear el PR. Nunca iban a hacer git checkout de una rama. Con un enlace, miran de verdad el cambio antes de que aterrice.
Un equipo abriendo 30 PRs al mes. El número de antes es la factura estándar de entorno de preview. El número de después es una caja bare-metal de Hoody que cabe los 30 más tu staging.
480 $/mes
Precio Pro por asiento más minutos de build más ancho de banda en un equipo de 6 ingenieros con 30 deploys de PR al mes. La mayoría de los equipos limita las previews a las 10 activas porque las siguientes 20 cuestan dinero real.
$30/mes
Un servidor del marketplace de Hoody corre staging más 30 clones de PR más tu caché de CI. Añade los siguientes sesenta por $0 — el copy-on-write hace que cada clon sean las páginas del snapshot más un delta.
El precio de lista de Vercel Pro es $20/asiento/mes más uso; los precios de entrada bare-metal de Hoody comienzan en $29/mes y varían según especificación, región y duración del alquiler. La densidad de contenedores depende de la carga — las apps web típicas se empaquetan en decenas o cientos; los servicios stateful grandes necesitan más margen.
Los entornos de preview dejan de ser un gasto presupuestario. Se convierten en el valor por defecto.
Los productos de entornos de preview cobran por asiento, por minuto o por contenedor en marcha. Hoody cobra por servidor — la preview número 30 cuesta lo mismo que la primera.
Snapshot una vez. Clona por PR. Destruye al fusionar. El revisor nunca nota la costura.