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

5.5 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, filebrowser, dsh
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 exclusive via le maillage Tailscale (100.86.197.88 NAS ↔ 100.94.90.119 VPS) et le bridge interne Docker dsh_vps_net sur le VPS.
  • Port Hermes Hub : Port 8088 fixé (bindé strictement sur 127.0.0.1:8088:8080 pour éviter tout conflit avec le port 8080 de qbittorrent).
  • Port Hermes Perso : Port 3031 fixé définitivement sur le NAS (port 3030 orphelin bloqué et purgé).
  • Sécurité & Auth : Authentification Cloudflare Access en amont du tunnel Cloudflare (hub.yesminedor.tn -> http://127.0.0.1:8088).
  • Filebrowser DSH : Réutilisation du 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.
Déploiement second filebrowser Duplication inutile de conteneur Le conteneur dsh-vps-filebrowser montait déjà le volume dsh_vps_workspace. Hub raccordé à dsh_vps_net.
Tag :latest sur Filebrowser Risque de régression silencieuse Image SemVer épinglée : filebrowser/filebrowser:v2.32.0.
Flag --branding.theme CLI Container restart / crash Flag invalide sur binaire v2.32.0. Thème sombre appliqué via configuration BoltDB.
Auth mot de passe filebrowser Double barrière inutile auth.method=noauth injecté dans /srv/.filebrowser.db. Accès protégé par Cloudflare Access OTP.

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 d2008d3).
  • Emplacement sur VPS : /home/dsh-agent/hermes-hub.

2. Procédure de Déploiement sur VPS Contabo (100.94.90.119)

# 1. Raccorder hermes-nabil au réseau dsh_vps_net
docker network connect dsh_vps_net hermes-nabil

# 2. Démarrer le dashboard dans hermes-nabil (port 9119)
docker exec -d -e HERMES_DASHBOARD_BASIC_AUTH_USERNAME=nabil -e HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=nabil hermes-nabil /opt/hermes/.venv/bin/hermes dashboard --host 0.0.0.0 --port 9119 --no-open --skip-build

# 3. Mettre à jour dsh-vps-filebrowser (v2.32.0, noauth, baseurl)
cd /home/dsh-agent/dsh-vps
docker stop dsh-vps-filebrowser
docker run --rm -v dsh_vps_workspace:/srv filebrowser/filebrowser:v2.32.0 config set --auth.method=noauth --baseurl=/u/nabil/files -d /srv/.filebrowser.db
docker compose up -d dsh-filebrowser

# 4. Déployer hermes-hub
cd /home/dsh-agent/hermes-hub
git pull origin main
docker compose up -d --build

Preuves de Fonctionnement (Vérification en direct)

Preuve 1 : État des conteneurs Docker

$ docker ps --filter 'name=hermes-hub' --filter 'name=dsh-vps-filebrowser' --filter 'name=hermes-nabil'
NAMES                 STATUS                        PORTS
hermes-hub            Up 11 seconds (healthy)       127.0.0.1:8088->8080/tcp
dsh-vps-filebrowser   Up About a minute (healthy)   80/tcp
hermes-nabil          Up 7 days

Preuve 2 : Santé globale de l'API Hub

$ curl -sS http://127.0.0.1:8088/api/health
{"status":"healthy","universes_configured":4}

Preuve 3 : Statut des 4 univers (Tous ONLINE)

$ curl -sS http://127.0.0.1:8088/api/universes
- tt     : ONLINE (status: 200, latence: 96ms)
- nyora  : ONLINE (status: 200, latence: 89ms)
- perso  : ONLINE (status: 200, latence: 92ms, port 3031)
- nabil  : ONLINE (status: 302, latence: 5ms, hermes-nabil:9119)

Preuve 4 : Proxy DSH Filebrowser (/u/nabil/files/)

$ curl -s http://127.0.0.1:8088/u/nabil/files/ | head -n 10
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>File Browser</title>