Contexte
La plateforme qui héberge tout le reste de ce portfolio. Deux mini PC dans un rack 4U tirent environ 50 W au repos, font tourner 15 conteneurs LXC entre eux, et servent chaque projet interne que je livre, la pipeline d’actualités FB-Media, la stack vidéo ContentForge, le tableau de bord de monitoring live, le service de notifications homelab.
Elle existe parce que les factures cloud s’accumulent vite pour des projets pas encore finis, et parce qu’un studio d’une personne est son propre client le plus exigeant. La plateforme doit être ennuyeuse : prévisible, reproductible, récupérable depuis une seule commande.
Brief
- Cluster à deux nœuds sur du matériel grand public (pas d’équipement enterprise).
- Tous les services en conteneurs LXC, pas de surcharge kernel par VM.
- GPU passthrough vers le conteneur d’inférence, service LLM local sans host GPU séparé.
- Reconstruction depuis une seule commande : on perd un nœud, on lance un playbook, on récupère le nœud.
- Services publics derrière Cloudflare ; services privés sur un LAN flat.
- Budget de puissance au repos sous 60 W combiné.
Architecture
Deux nœuds Proxmox :
- Nœud services (pve-desktop), 15 conteneurs sur le sous-réseau services. Héberge le tableau de bord (CT 208), le fan-out de notifications (CT 209), le toolchain interne de type Git, et l’infrastructure partagée (Pi-hole DNS, WireGuard, Traefik, Prometheus, Grafana).
- Nœud labo (pve-asus), moins de conteneurs, mais plus puissants, pour l’inférence et l’expérimentation. Héberge le conteneur Ollama avec GPU passthrough avec une carte NVIDIA pour le service LLM local.
Les deux nœuds sont provisionnés end-to-end avec Ansible. L’arbre de playbooks couvre : configuration kernel + Proxmox, provisionnement de conteneurs par host, fichiers de rôle spécifiques au service (un par CT), règles firewall au niveau host (nftables), gestion de certificats TLS, et synchronisation DNS Cloudflare.
Une migration Terraform est en cours, l’objectif est de remplacer les playbooks de provisionnement Ansible par des modules Terraform pour les primitives de cloud-shape (conteneurs, réseaux, certificats) tout en gardant Ansible pour la configuration des services dans les conteneurs. Le pattern est honnête : infrastructure déclarative là où Terraform convient, configuration impérative là où Ansible gagne déjà.
Résultats
- 15 conteneurs LXC tournant sur deux nœuds Proxmox.
- GPU passthrough vers le conteneur d’inférence, même station de travail qui fait tourner le sidecar du tableau de bord.
- Puissance au repos : ~50 W combiné, mesuré à la prise.
- Provisionnement depuis une seule commande,
ansible-playbook site.ymlreconstruit n’importe quel nœud depuis le bare metal en moins de 20 minutes. - Cinq services publics derrière Cloudflare avec des certificats
*.bytecraftmedia.euauto-renouvelés. - Zéro panne non planifiée depuis que les playbooks Ansible ont atteint la parité.
Captures
[FILL: remplacer par des captures anonymisées de l’UI web Proxmox montrant les deux nœuds, l’arbre d’inventaire Ansible, et un panneau Grafana montrant les métriques au niveau host. Éviter les captures de tout service orienté client tournant sur la plateforme.]
La suite
Trois éléments sur la liste de la prochaine itération :
- Verrouiller la structure des modules Terraform avant de démarrer un troisième nœud. Adapter l’inventaire Ansible en pleine migration a été une semaine de rework évitable, le second nœud aurait été plus rapide si la séparation Terraform/Ansible avait été décidée d’emblée.
- Promouvoir les règles firewall des nftables au niveau host vers une source-of-truth gérée centralement. Actuellement chaque nœud a son propre ruleset ; un petit rôle Ansible + une variable Terraform réduiraient le drift.
- Réplication off-rack des snapshots, actuellement les snapshots de conteneurs de la plateforme vivent sur les mêmes nœuds qui les produisent. Un petit job mensuel qui envoie des snapshots compressés vers un bucket Cloudflare R2 fermerait le gap de disaster-recovery sans ajouter de matériel.