
Projet personnel · DozyLab
WatchTower est l’application web que j’ai développée pour piloter mon laboratoire depuis une seule console : un registre de l’infrastructure, la lecture des services en direct (virtualisation, sauvegardes, annuaire, DNS, supervision, sécurité) et les gestes d’administration courants, chacun confirmé avant d’être exécuté. Cette page en présente chaque écran. Les captures montrent la version en service, alimentée par un relevé en lecture seule des données du laboratoire au 12 novembre 2026 ; les adresses IP, les noms de domaine internes et les comptes y sont masqués.
Ce que c’est
Un registre et une console, pas un tableau de bord de plus.
Le laboratoire compte trois hyperviseurs Proxmox VE, seize machines virtuelles et conteneurs, un pare-feu, un commutateur et une quinzaine de services, chacun avec sa propre interface. WatchTower les réunit : il interroge chaque service par son API, avec un compte dédié, et présente l’ensemble dans une navigation unique, classée par domaine.
Chaque valeur affichée porte son origine : l’inventaire (ce que le registre déclare), une décision (ce que j’ai tranché), une mesure (ce qu’un collecteur a observé, avec son heure) ou « à compléter ». Rien n’est inventé : une source injoignable s’affiche comme telle, une mesure trop ancienne est signalée, et une liste partielle n’est jamais présentée comme un total.
Les écrans sont en lecture par défaut. Les modifications (créer un hôte proxy, un compte de l’annuaire, une étendue DHCP, acquitter un problème) passent par un formulaire et une confirmation explicite.


Pilotage
L’état général, le schéma de l’infrastructure et les alertes.
Vue d’ensemble
La page d’accueil réunit un bandeau d’indicateurs (nœuds en ligne, machines et conteneurs actifs, mémoire du cluster, alertes non lues, dernière sauvegarde), l’état des nœuds Proxmox, les problèmes détectés et les dernières alertes. Les blocs se réordonnent ou se masquent depuis les paramètres.
Topologie
Le schéma de l’infrastructure se lit sous trois angles : la segmentation (quel équipement et quel service dans quel VLAN), l’hébergement (quel hyperviseur porte quelle machine) et les dépendances de service. C’est le moteur du schéma réseau de la page Homelab de ce portfolio, alimenté ici par les sources du laboratoire. L’en-tête indique, pour chaque source, sa fraîcheur et sa couverture : une liaison documentée n’est pas présentée comme une liaison vérifiée.
Alertes
Une boîte de réception conserve les bulletins quotidiens (SOC, CVE, homelab), les incidents et les retours à la normale, même sans notification activée. Les envois vers Discord, Telegram ou en notification du navigateur sont optionnels ; les incidents poussés sont plafonnés à dix par heure, le reste attend dans la boîte.


Infrastructure
Virtualisation, sauvegardes et contrôleur de domaine.
ProxPanel
ProxPanel, l’interface d’administration Proxmox du laboratoire, s’ouvre dans un onglet de WatchTower sans quitter la console. Les hôtes et les identifiants Proxmox restent gérés par ProxPanel : WatchTower ne les recopie pas.
Proxmox Backup Server
Trois onglets en lecture seule. La vue d’ensemble donne la couverture des sauvegardes par invité et par nœud, avec le nombre de sauvegardes vérifiées ; « Tâches » liste les dernières tâches du serveur ; « Retards » compare l’âge de la dernière sauvegarde de chaque invité à un seuil réglable.
Windows Server
Le contrôleur de domaine DC01 s’administre sans ouvrir de session dessus : WatchTower passe par l’agent invité de Proxmox et n’exécute que des commandes PowerShell fixes. Sept onglets couvrent l’état du serveur, l’annuaire Active Directory, les stratégies de groupe, le DNS, le DHCP, l’autorité de certification et les journaux d’événements.




Réseau
Publication des services et résolution de noms.
Nginx Proxy Manager
Les hôtes du reverse proxy et leurs certificats, lus par l’API de Nginx Proxy Manager : domaine, service cible, redirection TLS et échéance de chaque certificat. Un hôte se crée, se modifie ou se désactive depuis cet écran.
Technitium DNS
Les zones du serveur DNS interne, avec leurs enregistrements, et les statistiques de résolution : volume de requêtes, part bloquée, domaines et clients les plus actifs. Un troisième onglet, prévu pour l’application de blocage avancé, n’était pas alimenté lors du relevé.
Sécurité
Supervision, journaux, détection sur les hôtes et sur le réseau.
Zabbix
Le parc supervisé (agents et équipements interrogés en SNMP), les problèmes en cours classés par sévérité, que l’on peut acquitter, et les tendances d’un hôte sur 24 heures.


Prometheus
L’état du serveur de métriques, ses cibles de collecte, quelques métriques clés en direct, les règles d’alerte et un explorateur de requêtes PromQL.






Wazuh
La sécurité des hôtes : agents et leur état, alertes avec leur niveau et la technique MITRE ATT&CK associée, contrôle d’intégrité des fichiers et réponses actives (ces deux derniers onglets ne sont pas reproduits : ils listent des chemins de fichiers internes).
Loki et Grafana
Loki donne accès aux journaux centralisés : filtres par étiquette, sévérité et fenêtre de temps, requête LogQL bornée et suivi en direct. L’écran Grafana résume le serveur de tableaux de bord : tableaux, alertes, sources de données et état.
Opérations
Accès distant, automatisation, versions et agent.
Guacamole
L’accès distant aux machines, organisé comme un gestionnaire de connexions : arborescence des cibles, connexion rapide, détails de la sélection et onglets de sessions. Le bureau ou le terminal s’affiche dans la page et reste ouvert pendant la navigation.


n8n
Les workflows d’automatisation et leurs exécutions. « Voir » ouvre le graphe d’un workflow en plein écran, redessiné à partir de sa définition et débarrassé de ses paramètres.
Code et versions
Les notes de version de WatchTower, produites à partir de l’historique Git (messages de commit normalisés), et les dépôts de la forge Gitea du laboratoire.


Hermes
L’écran de conversation avec Hermes, l’agent du laboratoire présenté sur sa propre page : liste des sessions, fil de la conversation avec le suivi des appels d’outils, et validation explicite des actions sensibles. Trois autres onglets gèrent ses compétences, sa mémoire et ses modèles ; leur contenu, privé, n’est pas reproduit ici.


Paramètres et registres
Les connecteurs, l’apparence et la mémoire écrite du laboratoire.
Connecteurs et affichage
Chaque service se raccorde ici : adresse, identifiants ou clé d’API, vérification du certificat. Tout est chiffré sur le serveur et une clé enregistrée n’est plus jamais réaffichée. Un test de connexion indique si la source répond et en combien de temps. La même section règle les bulletins et les envois de notifications.
Personnalisation
Langue, thème clair ou sombre, densité, mouvement réduit, choix et ordre des blocs de la vue d’ensemble, rotation du mode TV. Un compagnon animé facultatif, Petdex, se règle dans l’onglet voisin.


Hôtes, réseau et PKI
Le registre des hôtes et des équipements réseau, avec pour chacun une fiche : identité, mesures et écarts associés. La partie PKI recense les autorités et les certificats établis, la partie proxy résume ce que publie le reverse proxy.
Écarts et registre d’architecture
Deux registres tenus à la main. Les écarts consignent ce qui diffère entre l’état prévu et l’état constaté, jusqu’à leur résolution ; leur détail est masqué sur la capture. Le registre d’architecture garde les décisions prises, leur justification et les composants retirés.
Sur mobile
La même console, installable comme une application.
Sous le capot
Ce qui fait tourner l’application.
- Serveur
- Une API en Python (FastAPI) lit le registre, un fichier TOML typé, interroge les services et expose un contrat unique à l’interface. Elle tourne dans un conteneur LXC du laboratoire, lancée par systemd.
- Interface
- Une application React et TypeScript construite avec Vite, installable (PWA), en thème clair ou sombre.
- Connecteurs
- Adresses et secrets chiffrés dans un coffre sur le serveur ; l’interface ne reçoit jamais un secret, seulement le fait qu’il est renseigné.
- Accès
- Phrase de passe hachée en Argon2id, session courte, jeton anti-CSRF sur chaque modification, service publié derrière le reverse proxy avec un certificat de l’autorité interne.
- Tests
- Tests automatisés côté serveur (pytest) et côté interface (Vitest), rejoués avant chaque mise en service.
Limites connues : l’application est mono-utilisateur et n’est pas exposée sur Internet ; certaines valeurs du registre restent « à compléter » ; une source en panne laisse son écran en attente plutôt que d’afficher une valeur périmée.
























































































