Module Infrastructure
Supervision de l'infrastructure LAN : hyperviseurs Proxmox, NAS Synology, NAS TrueNAS, serveur RustDesk, et monitoring de serveurs web.
Sous-domaine : infrastructure.tarbouriech.tech
Périmètre fonctionnel
| Fonctionnalité | Description |
|---|---|
| Proxmox VE | Supervision nodes + VMs/LXC, actions (start/stop/reboot), snapshots, sauvegardes, alertes |
| Synology | Métriques système, volumes, services DSM via API HTTP |
| TrueNAS | Métriques système, pools, datasets, alertes via API HTTP |
| RustDesk | Supervision hbbs/hbbr (OSS), sessions relay, pairs enregistrés, métriques SSH |
| Web Monitor | Monitoring HTTP/HTTPS des serveurs web (temps réponse, statut) |
Pattern d'architecture
Chaque type de serveur suit le même pattern :
Model (cached_data JSON) → ApiService → SyncService → Commande Artisan
cached_data: snapshot JSON du dernier sync, lu par les vues sans appel réseaulast_sync_at: horodatage du dernier sync réussi- ApiService : instancié à chaque opération (jamais singleton), encapsule les appels réseau
- SyncService : orchestre l'ApiService, écrit en base, tolérance aux pannes partielles via
safeCall() - Commande Artisan : déclenchée par le scheduler ou manuellement
DTOs
Toutes les réponses API passent par des DTOs readonly avant d'aller en base :
readonly class VirtualMachineDTO
{
public function __construct(
public readonly string $vmid,
public readonly string $name,
public readonly string $status,
public readonly int $maxcpu,
public readonly int $maxmem,
public readonly ?float $cpu,
) {}
}
Ne jamais écrire les données brutes de l'API directement dans les modèles.
Tolérance aux pannes
Chaque node et VM est synchronisé indépendamment dans un try/catch. Une panne n'arrête pas le sync global.
RustDesk
Particularité
RustDesk OSS (hbbs + hbbr) ne dispose pas d'API HTTP. La supervision passe exclusivement par SSH via spatie/ssh.
Données collectées
| Source | Données |
|---|---|
ps aux | Statut hbbs/hbbr, PIDs |
ss -tn | Sessions relay actives, pairs rendezvous |
/proc/uptime, free, df, top | CPU, RAM, disque, uptime, load |
SQLite db_v2.sqlite3 (hbbs) | Liste des pairs enregistrés |
Clé SSH
| Paramètre | Valeur |
|---|---|
| Chemin | /var/www/.ssh/rustdesk_id_ed25519 |
| Propriétaire | www-data:www-data |
| Permissions | 600 (strict — SSH refuse toute autre valeur) |
| Répertoire parent | /var/www/.ssh/ en 750 |
Run manuel :
sudo -u www-data php artisan infrastructure:rustdesk-sync
Pairs (peers)
hbbs stocke les postes clients dans une base SQLite. Si le serveur tourne en Docker, le chemin est celui sur l'hôte (bind mount).
first_seen_at: jamais écrasélast_seen_at: mis à jour à chaque synclabel: nom libre assignable depuis l'interface
Tables
| Table | Description |
|---|---|
infrastructure_proxmox_servers | Serveurs Proxmox |
infrastructure_proxmox_nodes | Nodes Proxmox |
infrastructure_virtual_machines | VMs et conteneurs LXC |
infrastructure_synology_servers | NAS Synology |
infrastructure_truenas_servers | NAS TrueNAS |
infrastructure_rustdesk_servers | Serveurs RustDesk OSS |
infrastructure_rustdesk_peers | Postes clients RustDesk |
infrastructure_web_servers | Serveurs web monitorés |
infrastructure_web_checks | Historique des checks HTTP |
Scheduler
Syncs automatiques conditionnels (activés depuis Admin → Paramètres) :
| Setting | Commande | Fréquence |
|---|---|---|
proxmox_sync_enabled | infrastructure:proxmox-sync-all | configurable |
synology_sync_enabled | infrastructure:synology-sync | configurable |
truenas_sync_enabled | infrastructure:truenas-sync | configurable |
rustdesk_sync_enabled | infrastructure:rustdesk-sync | toutes les 5 min |
webmonitor_enabled | infrastructure:check-web-servers | toutes les 15 min |
proxmox_alerts_enabled | infrastructure:check-alerts | toutes les 5 min |
Toutes les commandes utilisent withoutOverlapping()->runInBackground().
Alertes Proxmox
- Cooldown via
Cache::put("infra_alert:{type}:{id}", true, $ttl)pour éviter le spam - Vérification via
Cache::has()avant envoi - Pour la détection de changement d'état : appeler l'API Proxmox directement (pas le snapshot DB)
Déploiement — Clé SSH RustDesk
# Sur le serveur Laravel (prod et dev)
sudo mkdir -p /var/www/.ssh
sudo chown www-data:www-data /var/www/.ssh
sudo chmod 750 /var/www/.ssh
sudo cp rustdesk_id_ed25519 /var/www/.ssh/
sudo chown www-data:www-data /var/www/.ssh/rustdesk_id_ed25519
sudo chmod 600 /var/www/.ssh/rustdesk_id_ed25519
# Sur le serveur RustDesk (192.168.1.39)
cat /var/www/.ssh/rustdesk_id_ed25519.pub >> ~/.ssh/authorized_keys