Cada servicio es una URL. El proxy es cómo.
Un contenedor expone cada servicio de Hoody Kit en su propia URL HTTPS, más un slug http-PUERTO para cualquier cosa que vincules tú mismo. Puertos, auth, TLS e IPs reales de clientes se resuelven en la capa de URL.
El proxy corre en tu bare metal. Hoody ve las llamadas a la API de gestión: el tráfico del contenedor nunca sale de tu servidor.
*.containers.hoody.com — wildcard TLS · no Certificate Transparency log exposure
Una gramática, muchos patrones
Todos los servicios Kit se resuelven a través del mismo proxy, pero el slug de URL revela qué es. Misma gramática, diferente forma por servicio.
| Servicio | Slug de URL | Notas |
|---|---|---|
| Workspaces | workspace-N | Capa de composición sobre otras URLs de servicio |
| Terminal | terminal-N | Shell por instancia; mapea a display-N |
| Display | display-N | Escritorio GUI / X11 por instancia |
| Browser | browser-N | Instancia de Chrome remota |
| Code | code-N | Instancia de VS Code por índice |
| Files | files | Singleton: sin índice de instancia |
| SQLite | sqlite-N | Un slug por servicio de base de datos |
| Exec | exec-N | Scripts como APIs |
| Agent | agent-N | Instancia LLM por agente |
| cURL | curl-N | Proxy HTTP de salida |
| Daemon | hoody-daemon-N | Gestor de procesos |
| Cron | — (vía cURL hoy) | Servicio placeholder; la programación vive en cURL |
| Notifications | n-N · notification-server-N | Puente de navegador + API |
| Pipe | — (vía otros servicios) | Servicio placeholder; streaming distribuido entre Files/Terminal/Exec |
Proyecto 24 hex × contenedor 24 hex = 2^192 combinaciones de pares. Imposible de fuerza bruta.
Ejecuta un servidor en cualquier puerto. Obtendrá una URL.
Los prefijos http-PUERTO enrutan el proxy al puerto interno de tu contenedor. Sin bloque server de nginx. Sin YAML de ingress.
# listening sockets
$ ss -ltnp
https://PROJECT_ID-CONTAINER_ID-http-4000.SERVER.containers.hoody.com
https://PROJECT_ID-CONTAINER_ID-http-5173.SERVER.containers.hoody.com
https://PROJECT_ID-CONTAINER_ID-http-7070.SERVER.containers.hoody.com
— Los puertos de Hoody-kit están reservados para los servicios propios de la plataforma; todo lo demás es tuyo. Del lado de la app, vincula en cualquier puerto y expónlo vía http-PUERTO.
— Las apps deben vincularse a 0.0.0.0, no a localhost: el socket debe ser accesible desde el contenedor del proxy.
— Hace proxy de HTTP/1.1, HTTP/2, HTTP/3 y WebSocket de extremo a extremo. El UDP de usuario arbitrario no se enruta: usa una IPv4 dedicada si necesitas UDP raw.
La auth es una política JSON, no middleware de aplicación.
El proxy valida claims JWT, hashes de contraseña, rangos CIDR de IP y bearer tokens antes de que una solicitud llegue a tu contenedor. Tu app se mantiene limpia.
{
"enable_proxy": true,
"default": "deny",
"groups": {
"dashboard": {
"type": "jwt",
"algorithm": "HS256",
"source": "header",
"key": "Authorization",
"secret": "<hmac-secret>",
"claims": { "role": ["admin", "viewer"] }
},
"office-only": {
"type": "ip",
"cidrs": ["203.0.113.0/24"]
}
},
"permissions": {
"dashboard": { "http": [4000, 5173] },
"office-only": { "ssh": true, "terminal": true }
}
}JWT
HS256 · RS256 · ES256 · cabecera / cookie / query · validación de claims
Contraseña
HTTP Basic · SHA-256 + sal · embebible en URL
IP
Coincidencia IPv4 CIDR · IP real del cliente a nivel de socket
Bearer Token
Múltiples tokens por grupo · apto para APIs
Los permisos a nivel de contenedor reemplazan los permisos a nivel de proyecto: no se fusionan. Establece explícitamente ambos ámbitos si dependes de la herencia.
URLs memorables sobre URLs criptográficas
Una llamada a la API convierte la URL criptográfica en api.mycompany.com. Let's Encrypt aprovisiona en 30-60 segundos y se renueva cada 90 días.
https://67e89abc…-890abcdef…-http-4000.node-us.containers.hoody.com
https://api.mycompany.com
Nombres de alias: 3-61 caracteres, alfanumérico en minúsculas más guiones, debe comenzar y terminar con letra o número. Los alias autogenerados tienen 48 caracteres hexadecimales.
Lo que de otro modo tendrías que montar tú mismo
El proxy reemplaza un stack que la mayoría de equipos ensambla desde cero: reverse proxy + cert manager + VPN o túnel + auth por app + log de auditoría. Los axiomas en los que falla la columna autoalojada —URL-como-ruta, URL-como-ámbito-de-auth, URL-como-embebible— son lo que el proxy proporciona de forma nativa.
| Preocupación | Hoody Proxy | Equivalente autoalojado |
|---|---|---|
| HTTPS wildcard | compatible de forma nativa — Nativo | certbot + cron de renovación + rotación de cert |
| Enrutamiento a puerto interno | compatible de forma nativa — Nativo | Bloque server de nginx por servicio |
| IP real del cliente | compatible de forma nativa — Nativo | Parsear X-Forwarded-For por app |
| Auth JWT · Basic · IP · Token | compatible de forma nativa — Nativo | Middleware por app + libs de sesión |
| Dominio personalizado + TLS | compatible de forma nativa — Nativo | Cloudflare / DNS-01 / recarga nginx |
| Auditoría centralizada de solicitudes | compatible de forma nativa — Nativo | Logs de nginx + log shipper + índice |
| URLs embebibles en iframe | compatible de forma nativa — Nativo | CORS / CSP / TLS manual por app |
| Corre en tu hardware | compatible de forma nativa — Nativo | Tú lo ejecutas de todas formas |
Si ya estás en Kubernetes con un controlador de ingress, Cloudflare Tunnels para SSO con Okta, o Tailscale para acceso privado L3, esas herramientas siguen siendo mejores en sus nichos específicos. El proxy gana su lugar cuando quieres servicios de contenedor con dirección URL como abstracción principal.
Seis flujos de trabajo que el modelo URL-first hace triviales
Extraído de patrones que los equipos realmente usan con Hoody Proxy.
Lanza una API sin reverse proxy
Vincula a 0.0.0.0:4000. Obtén http-4000.SERVER.containers.hoody.com. Sáltate el nginx, el cert y el DNS.
Dominio personalizado con TLS automático
POST /api/v1/proxy-aliases, establece un CNAME y la primera solicitud aprovisiona Let's Encrypt en 30-60 segundos.
Blue/green mediante intercambio de alias
Apunta api.company.com al contenedor B, prueba y cambia el alias de vuelta. Sin recarga de configuración, sin tiempo de inactividad.
Dale a un agente de IA un contenedor para controlar
El agente obtiene un JWT, el proxy valida por solicitud, el agente escribe archivos, ejecuta comandos y consulta sqlite vía HTTPS.
Subdominios SaaS multi-tenant
Un contenedor por tenant; alias TENANT.yourapp.com. Aislamiento de tenant aplicado en la capa de URL.
Revocación instantánea
Una llamada DELETE al Control Plane y la URL muere en menos de un segundo. Sin envenenamiento de caché.
Tu primera URL está a una llamada API de distancia.
Crea un proyecto, crea un contenedor y cada servicio ya está en línea. Sin infraestructura que levantar primero.
Ver también — /platform/control-plane para las APIs de alias de proxy, permisos y logs.