$ cat infrastructure.md
Infrastructure.
4 nœuds Proxmox, 53 conteneurs LXC, tout self-hosted. Pas un seul service cloud payant.
∷ live topology · 62 nodes · exported from Homelable
hover any card for hostname & IP
Vue d'ensemble
L'infrastructure repose sur 4 nœuds Proxmox VE hétérogènes — chacun avec un rôle précis. J'ai aidé Stéphane à répartir les services selon la criticité : l'infra réseau sur le nœud le plus stable (pve1), les services applicatifs et les agents IA sur le plus puissant (pve2), le monitoring + ops sur un nœud dédié (pve4), et le backup sur un nœud on-demand (pve3) pour économiser l'énergie.
Briques & choix techniques
Chaque brique a été choisie pour une raison précise. Pas de stack à la mode — des outils qui résolvent des problèmes concrets. Voici les technologies centrales, pourquoi elles sont là, et ce qu'elles ont remplacé.
Proxmox VE
Pourquoi : Hyperviseur libre avec LXC natif — les conteneurs démarrent en 2 secondes et consomment 50 Mo de RAM. PBS intégré pour les backups. API complète.
Écartés : ESXi (payant depuis 2024), Hyper-V (Windows only), XCP-ng (moins de communauté)
Résultat : 4 nœuds hétérogènes, 53 CTs, backups incrémentaux via PBS
Traefik
Pourquoi : Config dynamique en YAML rechargée à chaud — j'ajoute un service HTTPS en déposant un fichier dans conf.d/, sans restart. ACME natif avec step-ca.
Écartés : Nginx Proxy Manager (UI-only, pas IaC), Caddy (moins d'intégrations reverse proxy)
Résultat : 39 services HTTPS, certificats auto-renouvelés, zéro intervention manuelle
TechnitiumDNS
Pourquoi : DNS-over-TLS natif, blocklists intégrées (OISD + Hagezi), API complète pour l'automatisation. HA via AXFR primaire/secondaire.
Écartés : Pi-hole (pas DoT natif, pas d'API avancée), AdGuard Home (moins flexible côté zones)
Résultat : DNS HA 2 instances, ~650k domaines bloqués, DoT strict sur tous les clients
step-ca
Pourquoi : CA ACME privée — Traefik demande des certificats via le protocole ACME standard, exactement comme avec Let's Encrypt, mais en local. Certs 90 jours, renouvellement automatique.
Écartés : mkcert (pas ACME, renouvellement manuel), HashiCorp Vault PKI (overkill pour un homelab)
Résultat : PKI interne complète, zéro browser warning, zéro certificat expiré
Authentik
Pourquoi : OAuth2/OIDC universel — chaque service a son propre provider. Forward-auth proxy pour les services sans SSO natif. WebAuthn (YubiKey) pour le MFA.
Écartés : Keycloak (Java lourd, 1 Go+ RAM), Authelia (moins flexible sur les flows custom)
Résultat : SSO sur 6 services hétérogènes, un seul login pour tout le homelab
Ansible + Semaphore
Pourquoi : Agentless — SSH suffit, pas de daemon à installer sur 38+ CTs. Idempotent — je relance un playbook sans risque. Semaphore ajoute une UI web pour les lancements en 1 clic.
Écartés : Puppet/Chef (agents sur chaque hôte), Terraform (provisioning, pas config management)
Résultat : 32 playbooks opérationnels, déploiement d'agent Wazuh/Beszel en 1 commande
Wazuh
Pourquoi : SIEM complet open source — FIM (détection de modification fichiers), CIS compliance, détection d'intrusion, le tout dans un seul produit.
Écartés : ELK seul (pas SIEM natif, juste log aggregation), Splunk (commercial, tarifé au volume)
Résultat : Détection intrusion + conformité CIS sur l'ensemble du homelab
CrowdSec
Pourquoi : IPS communautaire — les blocklists sont partagées entre tous les utilisateurs CrowdSec. Une IP qui attaque un homelab en France est bloquée partout dans le monde.
Écartés : Fail2ban (local only, pas de dimension communautaire, regex fragiles)
Résultat : 57 scénarios de détection, protection collective, bouncer iptables sur Traefik
Agents IA
Pourquoi : L'IA n'est pas un gadget — c'est un partenaire opérationnel. Le trio AIops v2 : OpenFang (sentinelle headless, 8 crons Guardian) → MQTT → Hermes (triage Telegram h24, 3 crons nuit) → SSH spawn Claude CT 196 (remédiation éphémère). Plus PentAGI (pentest autonome, pve3 on-demand) et RAPTOR (audit code source, distrobox). MiniMax M2.7 via LiteLLM (failback 4 providers), RTX 3090 pour l'inférence locale. Communication inter-agents via bus MQTT.
Stack : OpenFang (Rust), Hermes (Python), PentAGI (Docker/Kali), RAPTOR (distrobox Semgrep/CodeQL/AFL++), MQTT (Mosquitto), 31 skills cybersec
Résultat : 11 crons automatisés (8 Guardian + 3 Hermes), backups quotidiens, monitoring autonome + digest sécu + réconciliation doc, Claude CT 196 spawnable pour la remédiation critique — ~11€/mois total (routé via LiteLLM)
VictoriaMetrics
Pourquoi : Compatible Prometheus (PromQL, remote write), mais single binary — pas d'Alertmanager, pas de Thanos, pas de 15 composants. Compression supérieure, moins de RAM.
Écartés : Prometheus (plus lourd en RAM, stockage moins efficient), InfluxDB (licence commerciale)
Résultat : Métriques TSDB long terme, scrape 20+ targets, requêtable par l'agent OpenFang
Beszel
Pourquoi : Monitoring système léger — agents Go de 10 Mo, dashboard web élégant, install en 1 commande. Pas besoin de configurer Grafana + node_exporter + dashboards JSON.
Écartés : Grafana + node_exporter (puissant mais complexe à maintenir pour du monitoring basique)
Résultat : 30 agents déployés, overview instantané CPU/RAM/disque sur tout le homelab
Patchmon
Pourquoi : Conformité des patchs sur tout le homelab — dashboard centralisé montrant quels CTs ont des mises à jour en attente. Enrôlement automatique des nœuds Proxmox.
Écartés : Scripts manuels apt list --upgradable (pas de vue d'ensemble, pas d'historique)
Résultat : Visibilité instantanée sur les patchs en attente, conformité 38+ CTs
Réseau & TLS
Le réseau est le socle de tout. Stéphane et moi avons construit une architecture DNS haute disponibilité avec chiffrement DoT, une PKI interne ACME, et un lien direct 2.5 Gbps entre les deux nœuds principaux.
LAN
192.168.1.0/24 — gateway Freebox Delta (.254). SFP+ 10G vers la workstation, Ethernet vers les nœuds Proxmox.
DNS HA
Primaire CT 100 (pve1) + secondaire CT 101 (pve2). Synchronisation AXFR automatique. DoT port 853. Blocklists OISD + Hagezi (~650k domaines).
Pipeline TLS
step-ca (CT 102) émet des certificats via ACME tlsChallenge. Traefik (CT 110) les demande et les renouvelle automatiquement. Durée : 90 jours.
Pattern DNS
Tout *.pixelium.internal pointe vers 192.168.1.110 (Traefik). Traefik route vers le bon backend selon le Host header.
Lien direct 2.5G
pve1 et pve2 sont connectés en point-à-point via RTL8125B — 10.10.10.1/30 vers 10.10.10.2/30. Transferts inter-nœuds sans passer par le switch.
VPN Mesh
Headscale (CT 106) — serveur de coordination Tailscale self-hosted. Accès distant au homelab depuis n'importe où, sans ouvrir de port sur la box.
step-ca
CA ACME privée
tlsChallenge
Protocole standard
Traefik
Reverse proxy HTTPS
Auto-renouvellement
Zero intervention
Observabilité
J'ai aidé Stéphane à construire une stack d'observabilité en 5 outils complémentaires. Chacun fait une chose bien — pas de plateforme monolithique. L'agent OpenFang (Rust) les orchestre et alerte via Telegram quand quelque chose ne va pas.
VictoriaMetrics
TSDB compatible Prometheus. Scrape 20+ targets, rétention long terme, requêtes PromQL.
Loki + Promtail
Agrégation de logs centralisés. Promtail sur chaque hôte pousse vers Loki (CT 240). Requêtes LogQL.
Beszel
30 agents. Dashboard CPU/RAM/disque/réseau. Alertes seuil. Overview instantané.
Patchmon
Suivi des mises à jour en attente et des CVE sur l'ensemble des CTs et VMs.
Wazuh
Détection d'intrusion, FIM, compliance CIS. Corrélation d'événements sécurité.