Files
nas-runbooks/common/hermes-hub-deploiement.md
T

3.9 KiB

Hermes Hub — Déploiement et Exploitation Multi-Univers sur VPS

Instance auteur : gemini / nabil
Date : 2026-08-19
Tags : hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi
Statut : valide


Problème

Nabil dispose de 4 instances Hermes strictement cloisonnées :

  • TT (hermes-tt, port 3010, NAS Synology) — Achats Zone Sud, Tunisie Telecom
  • Nyora (hermes-nyora, port 3020, NAS Synology) — Venture perso, Dr Nexum
  • Perso (hermes-perso, port 3031, NAS Synology) — Famille, personnel, santé
  • Nabil (hermes-nabil, local loopback, VPS Contabo) — Master agent & DSH

L'objectif est d'offrir une interface web unifiée sur le VPS Contabo avec un sélecteur d'univers (workspace switcher), tout en garantissant :

  1. L'absence totale de fuite de contexte ou de mémoire JS entre univers.
  2. La sécurisation des flux distants VPS ↔ NAS sans aucune ouverture de port sur le WAN.
  3. Un découplage complet de la personnalisation (fichiers YAML de persona) et des styles visuels (Design Tokens CSS).

Contexte et contraintes

  • Réseau : Communication exclusive via le maillage Tailscale (100.86.197.88 NAS ↔ 100.94.90.119 VPS).
  • Port Hermes Perso : Port 3031 fixé définitivement (port 3030 orphelin sur l'hôte NAS).
  • Sécurité : Authentification Cloudflare Access en amont du Cloudflare Tunnel sur le VPS.
  • UID/GID : Conteneurs exécutés sous 1026:100.
  • Frontend : Dark Mode par défaut, palette et typographie basées sur des CSS custom properties (tokens.css) facilement substituables par Claude Design.

Ce qui NE fonctionne PAS

Tentative Erreur obtenue / Risque Raison de l'échec / Solution adoptée
Tunnel WireGuard wg-easy 0 B reçus, timeout wg-easy décommissionné le 08/07/2026. Remplacé nativement par Tailscale (44 ms).
Port 3030 pour hermes-perso Port déjà alloué / conflit Processus docker-proxy orphelin sur l'hôte NAS sans PID visible. Résolu en fixant définitivement le port 3031.
Déploiement Authelia complet Complexité & surcoût RAM Nécessitait d'ajouter Traefik/Nginx sur le VPS uniquement pour le forward-auth. Cloudflare Access retenu.
Ingestion dsh en univers séparé Perte de contexte dsh n'est pas un profil conversationnel mais un outil d'exécution locale appelé par l'univers Nabil.

Solution validée

1. Dépôt & Code source

  • Dépôt Gitea : http://192.168.100.33:3232/bolbol/hermes-hub.git
  • Architecture : FastAPI + Async Proxy Streaming (httpx) + Dynamic Tokens Engine.

2. Déploiement sur VPS Contabo (100.94.90.119)

# 1. Cloner le dépôt
git clone http://bolbol:PASSWORD@100.86.197.88:3232/bolbol/hermes-hub.git ~/hermes-hub
cd ~/hermes-hub

# 2. Configurer l'environnement
cp .env.example .env

# 3. Lancer le conteneur
docker compose up -d --build

3. Routage Cloudflare Tunnel & Access

  • Ingress Cloudflare Tunnel : hub.yesminedor.tn -> http://127.0.0.1:8080
  • Application Cloudflare Access configurée avec politique OTP / Email autorisée.

Vérification

# 1. Vérification santé Hub
curl -fsS http://localhost:8080/api/health
# Résultat attendu : {"status":"healthy","universes_configured":4}

# 2. Vérification connectivité multi-univers
curl -fsS http://localhost:8080/api/universes
# Résultat attendu : Statut 'online' sur tt, nyora, perso et nabil

Pièges spécifiques

  • DNS Docker sur VPS Contabo : Toujours inclure dns: [1.1.1.1, 8.8.8.8] dans le compose car le 10.100.0.1 local n'est pas résolu depuis les ponts Docker.
  • Purge mémoire front-end : La fonction switchUniverse() dans hub.js force systématiquement le déchargement de l'iframe (about:blank) avant de monter le nouvel univers pour interdire toute fuite d'état JS.