Skip to content

Architecture Technique

Berth utilise une architecture distribuée où chaque client possède sa propre stack isolée.

  • Chaque client déploie une stack complète : API + Front + DB + Agents sur ses propres VMs
  • Connexions toujours initiées par l’agent (sortantes, port 443/grpc) — aucun port entrant à ouvrir sur le pare-feu du client
  • Isolement total : aucune donnée ne transite entre les instances Berth des différents clients
  • L’API est une “passerelle de contrôle” : elle ne fait elle-même PAS de requêtes sortantes vers l’extérieur hormis les pulls d’images Docker

L’Agent est un binaire natif Go déployé sur chaque hôte/VM du parc client. Il communique directement avec le socket Docker local (/var/run/docker.sock) et relaie les informations vers l’API via un canal gRPC bidirectionnel toujours initié par lui-même.

  • Langage : Go 1.22+
  • SDK Docker : github.com/docker/docker/client
  • gRPC : google.golang.org/grpc
  • TLS : crypto/tls avec validation de certificat côté agent

L’API est le coeur nerveux de Berth. Elle centralise toutes les communications, gère la persistance des données, et expose les serveurs gRPC (pour les agents) et REST/WebSocket (pour le front).

Composant Choix
Framework HTTP Gin
gRPC google.golang.org/grpc
ORM GORM
DB PostgreSQL 18
WebSocket Gorilla WebSocket
Auth JWT github.com/golang-jwt/jwt/v5

Le front-end est l’interface web à travers laquelle l’utilisateur interagit avec Berth. Déployé via Docker, il communique avec l’API via REST et WebSocket.

Composant Choix
Framework Angular 22
State management Signals Store
UI Framework Tailwind CSS 4

Berth utilise une authentification mutuelle TLS (mTLS) pour sécuriser les échanges entre les agents et l’API centrale. L’API génère sa propre autorité de certification (CA) interne au premier démarrage.

L’accès à l’interface web est sécurisé par des jetons JWT avec des rôles admin, maintainer et viewer.


Berth est conçu pour être déployé simplement via Docker Compose. Une fois la stack centrale (API, Front, DB) lancée, les agents peuvent être installés sur les VMs cibles via un script one-liner.