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 proxypour les services de routage Traefik - Page
/appslistant 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 ouverthttp: 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
- Éditer
app.py - Ajouter une entrée dans
SERVICES - Tester localement
- Pousser vers Git
- 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