Files

Status Monitor - Homelab

Application de monitoring des services Homelab
Version : 1.3.0
Auteur : Windsurf
Dernière mise à jour : 20/07/2026


📋 Description

Application Python de monitoring des services Homelab. Elle vérifie régulièrement l'état (online/offline) de tous les services configurés et affiche un tableau de bord web en temps réel.

Fonctionnalités :

  • Vérification SSH, HTTP, HTTPS
  • Interface web responsive moderne (glassmorphism, gradient, rounded cards)
  • Liens cliquables vers chaque service (IP:port ou URL publique HTTPS)
  • Filtres par type de service (SSH, HTTP, HTTPS, Reverse Proxy, Others)
  • Affichage immédiat des tuiles au chargement (statut waiting)
  • Label reverse proxy pour les services de routage Traefik
  • Page /apps listant les applications avec URL cliquables, ordre réordonnable et persistant (localStorage)
  • URLs publiques configurables par service (public_url)
  • Historique des changements de statut
  • Support des certificats SSL auto-signés (mode insecure)
  • Tableau de bord avec statistiques globales

🏗️ Architecture

Internet → Traefik (CT200) → status.peis.fr
                       ↓
                 CT201 (192.168.0.201:80)
                       ↓
            Status Monitor (Python HTTP Server)
                       ↓
             Vérifie tous les services configurés

🚀 Déploiement

Pré-requis

  • Python 3.x
  • Accès réseau à tous les services à surveiller
  • Port 80 disponible sur CT201

Installation

# Sur CT201 (192.168.0.201)
apt update && apt install -y python3 python3-pip

# Créer le dossier
mkdir -p /opt/status-monitor
cd /opt/status-monitor

# Copier les fichiers depuis ce dépôt
# (voir section Workflow Git ci-dessous)

# Installer le service systemd
cp status-monitor.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable status-monitor
systemctl start status-monitor

# Vérifier
systemctl status status-monitor
curl http://localhost

🔄 Workflow Git (Processus Standard)

Structure dans le dépôt

homelab-config/
└── status-monitor/
    ├── app.py              # Application principale
    ├── deploy.sh          # Script de déploiement
    ├── status-monitor.service  # Service systemd
    ├── VERSION            # Version actuelle
    └── README.md          # Ce fichier

1. Développer / Modifier le code

# Sur ta machine de développement (Windows)
# Modifier les fichiers dans : C:\Users\theo\.vibe\Proxmox\inventair\status-monitor\

# Exemple : Modifier app.py
nano C:\Users\theo\.vibe\Proxmox\inventair\status-monitor\app.py

2. Pousser vers Git depuis WSL

# Synchroniser IDE -> WSL si nécessaire
cp /mnt/c/Users/theo/homelab_ia/homelab-config/status-monitor/app.py ~/homelab-config/status-monitor/app.py

# Commiter et pousser avec l'utilisateur Windsurf
cd ~/homelab-config
git status
git diff status-monitor/
git add status-monitor/
git commit -m "Update Status Monitor - <description des changements>"
GIT_SSL_NO_VERIFY=true git push origin main

3. Déployer sur CT201

Flux obligatoire : IDE (Windows) -> WSL -> CT200/CT100 (bastion 192.168.0.100) -> CT201 (192.168.0.201)

# Méthode A : Exécuter le script de déploiement depuis WSL
wsl bash ~/homelab-config/status-monitor/deploy.sh

# Méthode B : Manuellement
# 1. IDE -> WSL
cp /mnt/c/Users/theo/homelab_ia/homelab-config/status-monitor/app.py ~/homelab-config/status-monitor/app.py

# 2. WSL -> CT201 (rebond via CT200/CT100)
scp -J root@192.168.0.100 -i ~/.ssh/id_ed25519 ~/homelab-config/status-monitor/app.py root@192.168.0.201:/tmp/app.py

# 3. Installation sur CT201
ssh -J root@192.168.0.100 -i ~/.ssh/id_ed25519 root@192.168.0.201 'mv /tmp/app.py /opt/status-monitor/app.py && systemctl restart status-monitor'

📦 Versioning

Règles de versioning

  • Format : MAJOR.MINOR.PATCH (ex: 1.1.0)
  • MAJOR : Changements incompatibles (refonte complète)
  • MINOR : Nouvelles fonctionnalités (compatibles)
  • PATCH : Corrections de bugs

Mettre à jour la version

# 1. Modifier le fichier VERSION
nano status-monitor/VERSION

# 2. Créer un tag Git (optionnel pour les releases)
git tag -a v1.1.0 -m "Release Status Monitor v1.1.0"
git push origin v1.1.0

# 3. Commit le changement de version
git add status-monitor/VERSION
git commit -m "Bump version to 1.1.0"
git push

Historique des versions

Version Date Changements
1.3.0 20/07/2026 Design modernisé, tuiles waiting, filtre Reverse Proxy, label reverse proxy, page /apps ordonnable
1.2.0 20/07/2026 Liens cliquables, public_url, filtres par type, Gitea séparé
1.1.0 19/07/2026 Version initiale dans Git
1.0.0 Avant Version initiale (non versionnée)

📊 Configuration des Services

Les services à surveiller sont définis dans le dictionnaire SERVICES dans app.py.

Format :

SERVICES = {
    "service_id": {
        "name": "Nom affiché",
        "type": "ssh" | "http" | "https",
        "host": "IP ou hostname",
        "port": port_number,
        "url": "/chemin" (optionnel, pour http/https),
        "public_url": "https://mon-service.peis.fr/" (optionnel, lien cliquable affiché),
        "insecure": True | False (optionnel, pour https sans vérification SSL)
    },
    ...
}

Types disponibles :

  • ssh : Vérifie si le port SSH (22) est ouvert
  • http : Vérifie la réponse HTTP sur un port (lien cliquable http://host:port/url)
  • https : Vérifie la réponse HTTPS sur un port (lien cliquable https://host:port/url ou public_url)

🎨 API Endpoints

Endpoint Méthode Description
/ GET Tableau de bord HTML
/apps GET Liste des applications (URL cliquables, ordre persistant côté client)
/api/status GET JSON de tous les statuts
/api/refresh GET Rafraîchit tous les services
/api/check/<service_id> GET Vérifie un service spécifique

🔧 Configuration Traefik

Le service est exposé via Traefik sur CT200 avec la configuration suivante dans dynamic.yml :

http:
  routers:
    status-monitor:
      rule: "Host(`status.peis.fr`)"
      entryPoints:
        - "websecure"
      tls:
        certResolver: "letsencrypt"
      service: status-monitor
  
  services:
    status-monitor:
      loadBalancer:
        servers:
          - url: "http://192.168.0.201:80"

URL publique : https://status.peis.fr


Commandes Utiles

Sur CT201

# Voir les logs
journalctl -u status-monitor -f

# Redémarrer
systemctl restart status-monitor

# Tester localement
curl http://localhost
curl http://localhost/api/status | jq

Depuis l'extérieur

# Vérifier l'accès
curl -vk https://status.peis.fr
curl -vk https://status.peis.fr/api/status

🛠️ Développement

Ajouter un nouveau service

  1. Éditer app.py
  2. Ajouter une entrée dans SERVICES
  3. Tester localement
  4. Pousser vers Git
  5. Déployer

Tester localement

# Sur ta machine de dev
python3 app.py
# Accéder à http://localhost:80

📝 Credentials et Accès

Élément Valeur
Dépôt Git git.peis.fr/VisualPCI/homelab-config
Username Git Windsurf
Token Git 3N14E7GWVSgi3K
Auteur des commits Windsurf windsurf@peis.fr
Serveur de déploiement CT201 (192.168.0.201)
Bastion SSH CT200/CT100 (192.168.0.100)
URL publique https://status.peis.fr
Port 80

🎯 Prochaines Évolutions

  • Ajouter l'authentification basique
  • Ajouter des notifications (email, webhook Discord/Slack)
  • Intégrer avec Grafana/Prometheus
  • Historique persistant en base de données (SQLite/InfluxDB)
  • Dashboard personnalisable (drag & drop des cartes)
  • Temps de réponse / latence par service
  • Catégories/groupes de services (Proxmox, Containers, VM, Externe)
  • Mode sombre/clair
  • Export CSV/PDF des statuts
  • Page d'historique détaillée avec graphiques
  • Gestion des certificats SSL (expiration, renouvellement)
  • Support du ping ICMP en plus de TCP

Documentation générée par Windsurf - 20/07/2026