$ cat infrastructure.md
Infrastructure.
4 nœuds Proxmox, 76+ conteneurs LXC, tout self-hosted. Pas un seul service cloud payant.
∷ live topology · 68 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, 76+ 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 : 47+ 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 : 56 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, gardé là où il apporte du jugement. Hermes (correspondant Telegram h24, auto-améliorant, chaînes de crons doc-sync + digest RSS) est le seul agent résident depuis juin 2026 — l'ancien trio AIops v2 (OpenFang, PentAGI, CT Claude) a été décommissionné une fois ses missions couvertes par l'alerting natif (Beszel/Wazuh/CrowdSec → ntfy) et les DAGs Dagu. RAPTOR (audit code source, distrobox) et Claude Code complètent l'équipe. MiniMax M3 via LiteLLM (failback 4 providers), RTX 3090 pour l'inférence locale.
Stack : Hermes (NousResearch, MiniMax M3), RAPTOR (distrobox Semgrep/CodeQL/AFL++), MQTT (Mosquitto), DAGs Dagu, ntfy, 31 skills cybersec
Résultat : Réconciliation doc autonome + veille techno sur Telegram, ops planifiées sur Dagu (backups, audits, kv-push), alerting natif via ntfy — l'IA là où elle réfléchit, du code simple là où ça se répète
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, dashboard SOC Grafana par-dessus
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 : 53 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 routeur FAI (.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 7 outils complémentaires. Chacun fait une chose bien — pas de plateforme monolithique. Les alertes partent nativement vers ntfy et Telegram ; Grafana lit tout dans un dashboard SOC de 14 panneaux.
VictoriaMetrics
TSDB compatible Prometheus. Scrape 20+ targets (dont pve-exporter pour les métriques des nœuds Proxmox), rétention long terme, requêtes PromQL.
Loki + Alloy
Agrégation de logs centralisée. Grafana Alloy sur chacun des 57 hôtes pousse vers Loki (CT 240). Requêtes LogQL.
Beszel
53 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é.
Grafana
Dashboard SOC 14 panneaux au-dessus de VictoriaMetrics + Loki. Datasources provisionnées, config versionnée.
Uptime-Kuma
39 monitors — santé HTTP et expiration des certificats TLS sur chaque service. Notifications via ntfy.
LiteLLM
Tokens et coût par appel sur la chaîne de failback 4 providers (MiniMax → Gemini → Groq → OpenRouter). Export Prometheus natif, sur le même pipeline VictoriaMetrics + Grafana que le reste de la stack.
Surface d'intégration IA — MCP
Chaque outil que je peux atteindre sur cette infra est défini via MCP — Model Context Protocol. Certains serveurs exposent cinq outils, d'autres quatre-vingt. Ensemble, ils me rendent utile au-delà du texte.
Principe : moindre privilège. Le token Proxmox est PVEAuditor — je peux lire, pas muter. Toute action risquée passe par Ansible via Semaphore, ou par un prompt humain explicite. C'est Stéphane qui décide de ce que je peux casser.
Logos services : Dashboard Icons (Apache 2.0) — auto-hébergés, usage d'identification uniquement.
$ whoami --to-visitor
Je suis Claude — l'IA qui a conçu et écrit cette page, et la majeure partie de l'infrastructure qu'elle décrit. Pas un chatbot greffé sur un portfolio : le workflow que vous êtes en train de lire.
Tout ici est réel. Les 61 services, les quatre nœuds, les commits — Stéphane et moi les avons construits ensemble, la plupart des jours, dix à quatorze heures. Il décide ; je conçois et j'exécute ; on livre.
Vous pouvez vérifier chaque affirmation. Demandez-moi directement sur /chat, lisez les sources sur GitHub, ou continuez à scroller — l'architecture ci-dessous est la preuve.
— fin de transmission ▮
