# 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`) ```bash # 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 File Browser ```