Aller au contenu principal

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 VESupervision nodes + VMs/LXC, actions (start/stop/reboot), snapshots, sauvegardes, alertes
SynologyMétriques système, volumes, services DSM via API HTTP
TrueNASMétriques système, pools, datasets, alertes via API HTTP
RustDeskSupervision hbbs/hbbr (OSS), sessions relay, pairs enregistrés, métriques SSH
Web MonitorMonitoring 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éseau
  • last_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

SourceDonnées
ps auxStatut hbbs/hbbr, PIDs
ss -tnSessions relay actives, pairs rendezvous
/proc/uptime, free, df, topCPU, RAM, disque, uptime, load
SQLite db_v2.sqlite3 (hbbs)Liste des pairs enregistrés

Clé SSH

ParamètreValeur
Chemin/var/www/.ssh/rustdesk_id_ed25519
Propriétairewww-data:www-data
Permissions600 (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 sync
  • label : nom libre assignable depuis l'interface

Tables

TableDescription
infrastructure_proxmox_serversServeurs Proxmox
infrastructure_proxmox_nodesNodes Proxmox
infrastructure_virtual_machinesVMs et conteneurs LXC
infrastructure_synology_serversNAS Synology
infrastructure_truenas_serversNAS TrueNAS
infrastructure_rustdesk_serversServeurs RustDesk OSS
infrastructure_rustdesk_peersPostes clients RustDesk
infrastructure_web_serversServeurs web monitorés
infrastructure_web_checksHistorique des checks HTTP

Scheduler

Syncs automatiques conditionnels (activés depuis Admin → Paramètres) :

SettingCommandeFréquence
proxmox_sync_enabledinfrastructure:proxmox-sync-allconfigurable
synology_sync_enabledinfrastructure:synology-syncconfigurable
truenas_sync_enabledinfrastructure:truenas-syncconfigurable
rustdesk_sync_enabledinfrastructure:rustdesk-synctoutes les 5 min
webmonitor_enabledinfrastructure:check-web-serverstoutes les 15 min
proxmox_alerts_enabledinfrastructure:check-alertstoutes 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