Context
Platforma care găzduiește totul restul din acest portofoliu. Două mini PC-uri într-un rack 4U trag aproximativ 50W în idle, rulează 15 containere LXC între ele și servesc fiecare proiect intern pe care îl livrez, pipeline-ul de știri FB-Media, stiva video ContentForge, dashboard-ul de monitorizare live, serviciul de notificări homelab.
Există pentru că facturile cloud se adună rapid pentru proiecte care nu sunt încă terminate și pentru că un studio de o persoană este propriul său client cel mai pretențios. Platforma trebuie să fie plictisitoare: predictibilă, reproductibilă, recuperabilă dintr-o singură comandă.
Brief
- Cluster cu două noduri pe hardware de consumator (fără echipament enterprise).
- Toate serviciile în containere LXC, fără overhead de kernel per VM.
- GPU passthrough către containerul de inferență, servire LLM local fără un host GPU separat.
- Reconstrucție dintr-o singură comandă: pierzi un nod, rulezi un singur playbook, recuperezi nodul.
- Servicii publice în spatele Cloudflare; servicii private pe LAN flat.
- Buget de putere idle sub 60W combinat.
Arhitectură
Două noduri Proxmox:
- Nod servicii (pve-desktop), 15 containere pe subnetul de servicii. Găzduiește dashboard-ul (CT 208), fan-out-ul de notificări (CT 209), toolchain-ul intern de tip Git și infrastructura partajată (Pi-hole DNS, WireGuard, Traefik, Prometheus, Grafana).
- Nod laborator (pve-asus), mai puține containere, dar mai puternice, pentru inferență și experimentare. Găzduiește containerul Ollama cu GPU passthrough cu o placă NVIDIA pentru servire LLM local.
Ambele noduri sunt provizionate end-to-end cu Ansible. Arborele de playbook-uri acoperă: configurare kernel + Proxmox, provizionare containere per host, fișiere de rol specifice serviciului (unul per CT), reguli firewall la nivel de host (nftables), gestionare certificate TLS și sincronizare DNS Cloudflare.
O migrare Terraform este în lucru, scopul este să înlocuim playbook-urile de provizionare Ansible cu module Terraform pentru primitivele de cloud-shape (containere, rețele, certificate) păstrând Ansible pentru configurarea serviciilor în containere. Tiparul este onest: infrastructură declarativă acolo unde Terraform se potrivește, configurare imperativă acolo unde Ansible câștigă deja.
Rezultate
- 15 containere LXC rulând pe două noduri Proxmox.
- GPU passthrough către containerul de inferență, aceeași stație de lucru care rulează sidecar-ul de dashboard.
- Putere idle: ~50W combinat, măsurat la priză.
- Provizionare dintr-o singură comandă,
ansible-playbook site.ymlreconstruiește oricare nod de la metal gol în sub 20 de minute. - Cinci servicii publice în spatele Cloudflare cu certificate
*.bytecraftmedia.eureînnoite automat. - Zero întreruperi neplanificate de când playbook-urile Ansible au atins paritatea.
Capturi de ecran
[FILL: înlocuiește cu capturi anonimizate ale UI-ului web Proxmox arătând ambele noduri, arborele de inventar Ansible și un panou Grafana arătând metrici la nivel de host. Evită capturi ale oricărui serviciu orientat către client care rulează pe platformă.]
Ce urmează
Trei elemente pe lista pentru iterația următoare:
- Fixează structura modulelor Terraform înainte de a porni un al treilea nod. Adaptarea inventarului Ansible în mijlocul migrării a fost o săptămână de rework evitabil, al doilea nod ar fi fost mai rapid dacă împărțirea Terraform/Ansible ar fi fost decisă din start.
- Promovează regulile de firewall de la nftables la nivel de host la o sursă de adevăr gestionată central. În prezent fiecare nod are propriul set de reguli; un mic rol Ansible + o variabilă Terraform ar reduce drift-ul.
- Replicare snapshot off-rack, în prezent snapshot-urile de container ale platformei trăiesc pe aceleași noduri care le produc. Un mic job lunar care trimite snapshot-uri comprimate către un bucket Cloudflare R2 ar închide gap-ul de disaster-recovery fără adăugare de hardware.