Skip to content

Architecture des Conteneurs (Services)

Cette section detaille les 14 conteneurs logiciels deployes sur le Raspberry Pi via Docker Compose. Chaque conteneur a une responsabilite stricte.

Diagramme des Conteneurs

graph TB
    user["👤 Utilisateur<br/>Navigateur / WhatsApp"]
    hardware["🔌 BP_MQX_ETH<br/>Materiel Domotique"]
    ha["🏠 Home Assistant"]

    subgraph Edge["Zone Edge / Ingress"]
        traefik["Traefik<br/>WAN HTTPS :443"]
        nginx["Nginx<br/>LAN HTTP :80"]
    end

    subgraph Apps["Domaine Applicatif"]
        frontend["Frontend React<br/>Dashboard SPA"]
        support["Support Portal<br/>React + Go/Chi"]
        backend["Backend Go<br/>ACL"]
        mcp["MCP Server<br/>Go / SSE :8083"]
        controlplane["Control Plane<br/>Go + React :9100"]
    end

    subgraph AI_Zone["Intelligence Artificielle"]
        openclaw["OpenClaw<br/>:18789"]
    end

    subgraph DataLayer["Infrastructure de Donnees"]
        redis[("Redis<br/>:6379")]
        mqtt["Mosquitto<br/>MQTT :1883"]
    end

    subgraph DNS_Zone["DNS"]
        adguard["AdGuard Home<br/>:53 / :3000"]
    end

    subgraph Mon["Observabilite"]
        prometheus["Prometheus<br/>:9092"]
        alertmanager["Alertmanager<br/>:9093"]
        nodeexporter["Node Exporter"]
    end

    user -->|HTTPS WAN| traefik
    user -->|HTTP LAN| nginx
    traefik --> frontend
    nginx --> backend
    nginx --> controlplane
    nginx --> openclaw
    nginx --> prometheus

    backend <-->|Table echange + actions| redis
    backend <-->|Polling HTTP :80| hardware
    backend <-->|Publie etats / Recoit cmds| mqtt
    mcp <--> redis

    openclaw <-->|Outils MCP / SSE| mcp
    alertmanager -->|Webhook /hooks/agent| openclaw
    openclaw -->|WhatsApp| user

    mqtt <-->|Discovery + etats| ha
    controlplane <--> redis
    controlplane --> prometheus
    prometheus --> nodeexporter
    prometheus --> backend
    prometheus --> alertmanager

    classDef app fill:#99ccff,stroke:#0066cc,color:#000
    classDef data fill:#99ff99,stroke:#009900,color:#000
    classDef mon fill:#ffcc99,stroke:#cc6600,color:#000
    classDef ai fill:#cc99ff,stroke:#6600cc,color:#000
    classDef edge fill:#ffff99,stroke:#999900,color:#000
    classDef ext fill:#e0e0e0,stroke:#666,color:#000
    classDef legacy fill:#ff9999,stroke:#cc0000,color:#000

    class frontend,support,backend,mcp,controlplane app
    class redis,mqtt data
    class prometheus,alertmanager,nodeexporter mon
    class openclaw ai
    class traefik,nginx,adguard edge
    class user,ha ext
    class hardware legacy

Description des Services

1. Backend Go (essensys-server-backend)

Propriete Valeur
Image essensyshub/essensys-server-backend
Port 80 (obligatoire pour BP_MQX_ETH)
Depot essensys-hub/essensys-server-backend

Role : Anti-Corruption Layer. Traduit le protocole legacy non-standard (JSON malformes, single-packet TCP, polling synchrone) en API REST propre. Gere la normalisation JSON, l'expansion du bloc complet 605-622, la fusion bitwise, et le stockage d'etat dans Redis.

Endpoints : /api/mystatus, /api/myactions, /api/done/{guid}, /api/admin/inject, /api/web/actions, /health, /debug, /table_ref, /metrics

2. MCP Server (essensys-server-backend/cmd/mcp-server)

Propriete Valeur
Image Meme image que le backend (binaire mcp-server)
Port 8083 (configurable)
Transport SSE (Server-Sent Events) + HTTP POST

Role : Expose le systeme domotique aux agents IA via le Model Context Protocol. Fournit des outils pour lire la table d'echange, envoyer des ordres, diagnostiquer le systeme.

Outils MCP : read_exchange_table, read_exchange_value, set_exchange_value, find_device_index, send_order, list_service_status, restart_service, read_service_logs, get_system_metrics, run_self_diagnostic

3. Frontend React (essensys-server-frontend)

Propriete Valeur
Image essensyshub/essensys-nginx (sert les assets statiques)
Stack React 19, TypeScript, Vite, Tailwind CSS

Role : Application SPA de controle domotique. Traduit les indices opaques (613, 621, etc.) en concepts visuels : boutons, sliders, zones par piece. Aucune logique metier embarquee.

Pages : Dashboard, Securite, Chauffage, Eclairage, Volets, Cumulus, Arrosage, UniFi Protect, Notifications, Reglages

4. Support Portal (essensys-support-site)

Propriete Valeur
Stack frontend React 19, Vite, Leaflet (cartes)
Stack backend Go avec Chi Router, PostgreSQL optionnel

Role : Portail d'information, admin et support. Gestion des machines/gateways, newsletters, utilisateurs, audit. Authentification Google/Apple OAuth.

5. Control Plane (essensys-control-plane)

Propriete Valeur
Image essensyshub/essensys-control-plane
Port 9100
Stack Go + React 19, SQLite (audit), Tailwind CSS

Role : Panneau de controle operationnel complet : - Gestion des conteneurs Docker (restart, update, rollback) - Administration Redis (table d'echange, actions, backup/restore) - Proxy Prometheus et Alertmanager - Logs en temps reel via WebSocket - Audit trail SQLite

Pages UI : Dashboard, Versions, Exchange, Clients, Actions, Logs, Redis Monitor, System, Metrics, Alerts, OpenClaw

6. OpenClaw (openclaw)

Propriete Valeur
Image coollabsio/openclaw:latest
Port 18789
LLM OpenAI (gpt-4o-mini)
Canal WhatsApp (Baileys, mode pairing)

Role : Assistant IA multi-canal. Recoit les alertes Alertmanager via webhook, les reformule en langage clair, et les envoie sur WhatsApp. Peut interroger le systeme via MCP.

7. Redis (essensys-redis)

Propriete Valeur
Image redis
Port 6379
Max memoire 128 Mo

Role : State store principal. Stocke la table d'echange (essensys:client:{id}:exchange), la queue d'actions (essensys:global:actions), l'etat de connexion des clients, et les informations d'authentification.

8. Mosquitto (essensys-mosquitto)

Propriete Valeur
Image Configuration personnalisee
Port 1883

Role : Broker MQTT servant de bus evenements. Publie les etats domotiques en temps reel et recoit les commandes depuis Home Assistant via le mecanisme de discovery automatique.

9. Nginx (essensys-nginx)

Propriete Valeur
Image essensyshub/essensys-nginx
Port 80 (LAN uniquement)

Role : Reverse proxy LAN. Sert le frontend statique et proxifie vers le backend, le Control Plane, Prometheus, Alertmanager et OpenClaw. Configure avec buffer single-packet TCP et gzip off pour la compatibilite legacy.

Routes : /api/ → backend:80, /mcp/ → MCP:8083, /controle_plane/ → CP:9100, /prometheus/ → Prometheus:9092, /alertmanager/ → AM:9093, /openclaw/ → OpenClaw:18789

10. Traefik (essensys-traefik)

Propriete Valeur
Image traefik:v2.11.3
Ports 80, 443, 8080 (dashboard)

Role : Point d'entree WAN. Gere la terminaison SSL via Let's Encrypt, le routage par nom d'hote, et l'authentification basic pour les services exposes sur Internet.

11. AdGuard Home (essensys-adguard)

Propriete Valeur
Image adguard/adguardhome
Ports 53 (DNS), 3000 (web UI)

Role : Resolveur DNS local avec filtrage publicitaire. Configure automatiquement le rewrite DNS pour mon.essensys.fr vers l'IP locale du Raspberry Pi.

12. Prometheus (essensys-prometheus)

Propriete Valeur
Image prom/prometheus
Port 9092
Retention Configurable

Role : Collecte et stockage des metriques de tous les services (backend, Control Plane, Node Exporter). Evalue les regles d'alertes et declenche les notifications via Alertmanager.

13. Alertmanager (essensys-alertmanager)

Propriete Valeur
Image prom/alertmanager
Port 9093

Role : Routage, deduplication et groupement des alertes. Envoie les notifications a OpenClaw via webhook (/hooks/agent) avec authentification Bearer token pour relais sur WhatsApp.

14. Node Exporter (essensys-node-exporter)

Propriete Valeur
Image prom/node-exporter
Port 9100 (namespace host)

Role : Expose les metriques systeme du Raspberry Pi (CPU, RAM, disque, temperature, reseau) au format Prometheus.

Orchestration

Tous les services sont deployes via un fichier docker-compose.yml unique genere par Ansible (roles/raspberry_compose/templates/docker-compose.yml.j2). Tous utilisent network_mode: host pour simplifier la communication inter-services sur le Raspberry Pi.

L'ordre de demarrage est gere par depends_on : - Redis et Mosquitto demarrent en premier - Le Backend depend de Redis - Le MCP depend de Redis - Nginx depend du Backend - OpenClaw depend du MCP