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

4.4 KiB

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

Instance auteur : gemini / nabil
Date : 2026-08-20
Tags : hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi, filebrowser, dsh, mcp-vps
Statut : valide (testé et vérifié en direct sur VPS Contabo)


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, port 9119, VPS Contabo) — Master agent & DeepSeek Harness (DSH)

L'objectif est d'offrir une interface web unifiée sur le VPS Contabo (100.94.90.119) avec :

  1. Un Workspace Switcher latéral fluide et étanche entre les 4 univers.
  2. Un Sélecteur Toggle DSH (conception Claude Design) pour basculer instantanément entre la session et l'explorateur de fichiers DSH (/u/nabil/files/).
  3. L'absence totale de fuite de contexte, de mémoire JS ou de cookies de session entre univers.
  4. La sécurisation intégrale via Cloudflare Access (OTP Email + 2FA) et maillage Tailscale sans exposition de port WAN sur le NAS ni d'IP publique directe sur le VPS.

Contexte et contraintes

  • Réseau :
    • Communication VPS ↔ NAS : maillage Tailscale (100.86.197.88 NAS ↔ 100.94.90.119 VPS).
    • Communication interne VPS : raccordement de hermes-hub à deux réseaux Docker :
      1. dsh_vps_net : pour joindre dsh-vps-filebrowser:8080 et hermes-nabil:9119.
      2. mcp-vps : pour être joint directement par le conteneur cloudflared-mcp-vps via http://hermes-hub:8080.
  • Port Hermes Hub : Port 8088 bindé sur 127.0.0.1 pour diagnostics SSH locaux, mais le tunnel Cloudflare passe en direct conteneur-à-conteneur sur le réseau mcp-vps.
  • Port Hermes Perso : Port 3031 fixé définitivement sur le NAS (port 3030 bloqué et purgé).
  • Sécurité & Auth : Authentification Cloudflare Access en amont du tunnel Cloudflare (hub.yesminedor.tn -> http://hermes-hub:8080).
  • Filebrowser DSH : Conteneur existant dsh-vps-filebrowser, image épinglée en SemVer filebrowser/filebrowser:v2.32.0, configuré avec auth.method=noauth et baseurl=/u/nabil/files.
  • Montage DSH : Volume nommé dsh_vps_workspace monté sur /srv (Read-Write).
  • UID/GID : Hub exécuté sous 1026:100, Filebrowser sous 1001:1001 (dsh-agent).

Ce qui NE fonctionne PAS

Tentative Erreur obtenue / Risque Raison de l'échec / Solution adoptée
Déploiement sur port 8080 Conflit de port / Page blanche Port 8080 déjà occupé par qbittorrent sur le VPS. Port 8088 réservé et bindé sur 127.0.0.1.
Ingress Cloudflare vers 127.0.0.1:8088 502 Bad Gateway cloudflared tourne dans le réseau Docker mcp-vps. Bind loopback refuse les paquets non-locaux. hermes-hub raccordé à mcp-vps (http://hermes-hub:8080).
TemplateResponse("index.html", context) 500 TypeError: unhashable dict Signature Starlette dépréciée. Remplacée par TemplateResponse(request, "index.html", context).
Dépendances non figées Régression silencieuse au build Versions exactes figées dans requirements.txt via pip freeze.
Tag :latest sur Filebrowser Risque de régression Image SemVer épinglée : filebrowser/filebrowser:v2.32.0.

Solution validée & Déploiement Réel

1. Dépôt & Code source

  • Dépôt Gitea : http://192.168.100.33:3232/bolbol/hermes-hub.git (branche main, commit b6ce978).
  • Emplacement sur VPS : /home/dsh-agent/hermes-hub.

2. Configuration Cloudflare Tunnel Ingress (Action Nabil)

Dans le dashboard Cloudflare Zero Trust / Tunnels (mcp-vps) :

  • Hostname : hub.yesminedor.tn
  • Service Type : HTTP
  • URL : hermes-hub:8080 (ou http://hermes-hub:8080)

Preuves Directes de Fonctionnement (Vérification interne mcp-vps)

# Test exécuté depuis linux-mcp-vps sur le réseau partagé mcp-vps :
OK [HTTP 200] -> http://hermes-hub:8080/ (9385 bytes)
OK [HTTP 200] -> http://hermes-hub:8080/api/health (45 bytes)
OK [HTTP 200] -> http://hermes-hub:8080/api/universes (1927 bytes)
OK [HTTP 200] -> http://hermes-hub:8080/u/nabil/files/ (6112 bytes)