Chaque service est une URL. Le proxy, c'est comment.
Un conteneur expose chaque service Hoody Kit sur sa propre URL HTTPS, plus un slug http-PORT pour tout ce que vous bindez vous-même. Ports, auth, TLS et vraies IPs client se résolvent tous à la couche URL.
Le proxy tourne sur votre bare-metal. Hoody voit les appels à l'API de management — le trafic des conteneurs ne quitte jamais votre serveur.
*.containers.hoody.com — wildcard TLS · no Certificate Transparency log exposure
Une grammaire, plusieurs patterns
Chaque service Kit se résout via le même proxy, mais le slug d'URL révèle ce qu'il est. Même grammaire, forme différente par service.
| Service | Slug d'URL | Notes |
|---|---|---|
| Terminal | terminal-N | Shell par instance ; mappe sur display-N |
| Display | display-N | Bureau GUI / X11 par instance |
| Browser | browser-N | Instance Chrome distante |
| Code | code-N | Instance VS Code par index |
| Files | files | Singleton — pas d'index d'instance |
| SQLite | sqlite-N | Un slug par service de base |
| Exec | exec-N | Scripts en APIs |
| Espaces de travail | agent-N | Instance LLM par agent |
| cURL | curl-N | Proxy HTTP sortant |
| Daemon | hoody-daemon-N | Gestionnaire de processus |
| Cron | — (via cURL aujourd'hui) | Service placeholder ; la planification vit dans cURL |
| Notifications | n-N · notification-server-N | Pont navigateur + API |
| Pipe | — (via d'autres services) | Service placeholder ; le streaming est distribué dans Files/Terminal/Exec |
Projet 24-hex × conteneur 24-hex = 2^192 combinaisons de paires. Infaisable en brute force.
Lancez un serveur sur n'importe quel port. Il reçoit une URL.
Les préfixes http-PORT routent le proxy vers le port interne de votre container. Aucun server block nginx. Aucun YAML d'ingress.
# listening sockets
$ ss -ltnp
https://PROJECT_ID-CONTAINER_ID-http-4000.containers.hoody.com
https://PROJECT_ID-CONTAINER_ID-http-5173.containers.hoody.com
https://PROJECT_ID-CONTAINER_ID-http-7070.containers.hoody.com
— Les ports Hoody-kit sont réservés aux services propres de la plateforme ; tout le reste est à vous. Côté app, bind sur n'importe quel port et expose-le via http-PORT.
— Les apps doivent bind sur 0.0.0.0, pas localhost — le socket doit être joignable depuis le conteneur du proxy.
— Proxie HTTP/1.1, HTTP/2, HTTP/3 et WebSocket de bout en bout. L'UDP utilisateur arbitraire n'est pas routé — utilisez une IPv4 dédiée si vous avez besoin d'UDP brut.
L'auth est une policy JSON, pas du middleware applicatif.
Le proxy valide les claims JWT, les hashes de mots de passe, les ranges IP CIDR et les bearer tokens avant qu'une requête n'atteigne votre container. votre app reste vanilla.
{
"project": "abc123",
"container": "def456",
"enable_proxy": true,
"default": "deny",
"groups": {
"dashboard": {
"type": "jwt",
"algorithm": "HS256",
"sources": ["header:Authorization"],
"secret": "<hmac-secret>",
"claims": { "role": ["admin", "viewer"] }
},
"office-only": {
"type": "ip",
"range": "203.0.113.0/24"
}
},
"permissions": {
"dashboard": { "ui": true, "terminal": [1, 2] },
"office-only": { "ssh": true, "terminal": true }
}
}JWT
HS256 · RS256 · ES256 · header / cookie / query · validation de claims
Mot de passe
HTTP Basic · SHA-256 + salt · embeddable dans une URL
IP
Match IPv4 CIDR · vraie IP client au niveau socket
Bearer Token
Plusieurs tokens par groupe · API-friendly
Les permissions au niveau conteneur remplacent les permissions au niveau projet — elles ne fusionnent pas. Définissez explicitement les deux scopes si vous comptez sur l'héritage.
Des URLs mémorisables au-dessus d'URLs cryptographiques
Un appel API transforme l'URL crypto en api.mycompany.com. Levous s Encrypt provisionne en 30 à 60 secondes ; renouvelle tous les 90 jours.
https://abc123-def456-http-4000.node-us-1.containers.hoody.com
https://myapp.node-us-1.containers.hoody.com
Nommage d'alias : 3 à 61 caractères, alphanumérique minuscule plus tirets, doit commencer et finir par une lettre ou un chiffre. Les alias auto-générés sont en hex 48 caractères.
Ce que vous assembleriez sinon à la main
Le proxy remplace une stack que la plupart des équipes assemblent depuis zéro : reverse proxy + cert manager + VPN ou tunnel + auth par app + audit log. Les axiomes que la colonne self-hosted rate — URL-as-route, URL-as-auth-scope, URL-as-embeddable — sont ce que le proxy fournit nativement.
| Sujet | Hoody Proxy | Équivalent self-hosted |
|---|---|---|
| HTTPS wildcard | supporté nativement — Natif | certbot + cron de renouvellement + rotation des certs |
| Routing vers port interne | supporté nativement — Natif | server block nginx par service |
| Vraie IP client | supporté nativement — Natif | Parser X-Forwarded-For dans chaque app |
| Auth JWT · Basic · IP · Token | supporté nativement — Natif | Middleware par app + libs de session |
| Domaine custom + TLS | supporté nativement — Natif | Cloudflare / DNS-01 / reload nginx |
| Audit centralisé des requêtes | supporté nativement — Natif | Logs nginx + log shipper + index |
| URLs embeddables en iframe | supporté nativement — Natif | CORS / CSP / TLS manuels par app |
| Tourne sur votre matériel | supporté nativement — Natif | vous le faites tourner vous-même de toute façon |
Si vous êtes déjà sur Kubernetes avec un ingress controller, sur Cloudflare Tunnels pour le SSO vers Okta, ou sur Tailscale pour l'accès privé L3, ces outils restent meilleurs pour leurs niches. Le proxy prend tout son sens quand vous voulez des services conteneur adressables par URL comme abstraction principale.
Six workflows que le modèle URL-first rend triviaux
Tirés des patterns que les équipes livrent vraiment avec Hoody Proxy.
Livrer une API sans reverse proxy
Faites un bind sur 0.0.0.0:4000. Obtenez abc123-def456-http-4000.node-us-1.containers.hoody.com. Oubliez tout le cirque nginx, certificat et DNS.
Domaine custom avec TLS auto
POST /api/v1/proxy-aliases, mets un CNAME, et la première requête provisionne Levous s Encrypt en 30 à 60 secondes.
Blue/green via swap d'alias
Pointez api.company.com sur le conteneur B, testez, swap l'alias en arrière. Aucun reload de config, aucun downtime.
Donnez à un agent IA un conteneur à piloter
L'agent reçoit un JWT, le proxy valide à chaque requête, l'agent écrit des fichiers, lance des commandes, requête sqlite en HTTPS.
Sous-domaines SaaS multi-tenant
Un conteneur par tenant ; alias TENANT.yourapp.com. Isolation des tenants imposée à la couche URL.
Révocation instantanée
Un appel DELETE au Control Plane et l'URL est morte en moins d'une seconde. Aucun empoisonnement de cache.
votre première URL est à un appel API près.
Créez un projet, créez un conteneur, et chaque service est déjà en ligne. Aucune infra à monter avant.
Voir aussi — /platform/control-plane pour les APIs d'alias proxy, de permissions et de logs.