$ cat infrastructure.md

Infrastructure.

4 nœuds Proxmox, 53 conteneurs LXC, tout self-hosted. Pas un seul service cloud payant.

4 noeuds Proxmox
55+ conteneurs LXC
15 widgets Homepage
0 euro cloud externe

∷ live topology · 62 nodes · exported from Homelable

hover any card for hostname & IP

terre2
OMV
Philips Hue Bridge
Freebox Delta ISP · 1G to all PVE
pve1 13 services
TechnitiumDNS
step-ca
Headscale
Traefik + CrowdSec
Authentik
n8n
Mosquitto MQTT
Node-RED
Zigbee2MQTT
Forgejo Runner
Forgejo
NetBox
Home Assistant
pve2 19 services
TechnitiumDNS 2
share2 (Samba)
Wiki.js
Open WebUI
LiteLLM
FreshRSS
The Lounge
Joplin Server
ByteStash
Hermes Agent
OpenFang
Claude Code
PentAGI
APT Cache
Kavita
Immich
Jellyfin
Jellystat
Wazuh
pve4 15 services
Loki
Termix
Homepage
Glance
Semaphore
SearXNG
changedetection
Beszel
Grafana
Patchmon
VictoriaMetrics
Healthchecks
ntfy
Dagu
Homelable
pve3 on-demand · WOL 7 services
draw.io
PBS
share3 (Samba)
Stirling-PDF
Excalidraw
Forworld
netboot.xyz
lxc vm proxmox zone isp nas computer iot

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.

pve1 Infra réseau 24/7
CPU Intel N5105 — 4C/4T @ 2 GHz
RAM 15.5 GB
Services DNS, Traefik, step-ca, Forgejo, Headscale, Authentik
pve2 Services applicatifs 24/7
CPU Ryzen 7 7840HS — 8C/16T Zen4
RAM 28.2 GB
Services Jellyfin, Immich (ML GPU remote), Kavita, Home Assistant, monitoring, OpenFang
pve3 Backup & cold storage on-demand
CPU i7-2600K — 4C/8T
RAM 15.3 GB
Services PBS, Forworld (Forgejo miroir), Samba share
pve1 — Proxmox VE
Proxmox pve1 — dashboard 10 CTs, CPU, RAM, I/O
pve1 — nœud infra réseau (N5105, 15.5 Go RAM, 10 CTs)
pve2 — Proxmox VE
Proxmox pve2 — dashboard 25 CTs + 1 VM
pve2 — nœud services (Ryzen 7840HS, 28 Go RAM, 26 guests)
pve3 — Proxmox VE
Proxmox pve3 — nœud backup et cold storage
pve3 — backup & cold storage (i7-2600K, on-demand)
pve1 — conteneurs
Liste CTs pve1 — 10 LXC
pve1 — 10 LXC : DNS, Traefik, step-ca, Authentik, Forgejo, NetBox...
pve2 — conteneurs
Liste CTs pve2 — 25 CTs + 1 VM
pve2 — 25 CTs + 1 VM : Homepage, Jellyfin, Immich, Hermes, Wazuh, Beszel...
pve3 — conteneurs
Liste CTs pve3 — 3 CTs + stockage
pve3 — 3 CTs : PBS, share3, Forworld + 2 HDD datastores
terre2 — neofetch
Neofetch terre2 — Bluefin, Ryzen 7 5800X, RTX 3090
Workstation terre2 — Bluefin immutable, RTX 3090 24 Go, 3 écrans

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.

CA

step-ca

CA ACME privée

ACME

tlsChallenge

Protocole standard

TLS

Traefik

Reverse proxy HTTPS

90j

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

Métriques

TSDB compatible Prometheus. Scrape 20+ targets, rétention long terme, requêtes PromQL.

Loki + Promtail

Logs

Agrégation de logs centralisés. Promtail sur chaque hôte pousse vers Loki (CT 240). Requêtes LogQL.

Beszel

Monitoring système

30 agents. Dashboard CPU/RAM/disque/réseau. Alertes seuil. Overview instantané.

Patchmon

Patchs & CVE

Suivi des mises à jour en attente et des CVE sur l'ensemble des CTs et VMs.

Wazuh

SIEM

Détection d'intrusion, FIM, compliance CIS. Corrélation d'événements sécurité.

last edit2026-06-05·commit0b94b1f·signedclaude-opus-4-7+stéphane