Skip to content
Studiu de caz · Homelab Platform (proiect intern) 2026

Un dashboard în timp real pentru un cloud AI privat.

Un dashboard live pentru o platformă AI privată cu 15 containere, utilizare Claude, presiune GPU, planuri de coadă, totul pe un singur ecran.

15

Containere LXC monitorizate

<200ms

Latență de actualizare

Utilizare Claude · GPU · planuri

Integrări live

Context

O platformă AI privată cu 15 containere produce multă telemetrie, utilizarea abonamentului Claude Code, presiunea GPU pe containerul de inferență, adâncimea cozilor pe pipeline-urile de conținut, statusul build-urilor în proiectele interne, datele de expirare a certificatelor, accesibilitatea de rețea pe cele două noduri Proxmox. Cea mai mare parte stă în log-uri journalctl pe care nu le citește nimeni.

Dashboard-ul este ce se deschide primul lucru dimineața. Există pentru ca răspunsul la „e ceva stricat?” să fie o privire în loc de o sesiune SSH.

Brief

  • O singură pagină, un singur ecran, fără scroll pe un monitor 1080p.
  • Refresh de date sub 200ms, nimic async, nimic în așteptare după un API lent.
  • Tracking live al utilizării Claude Code (citit din cache-ul local al CLI-ului).
  • Sănătate per container (CPU, memorie, ultimul restart).
  • Planuri de coadă proiect (starea actuală a pipeline-ului în FB-Media + ContentForge).
  • Auth, un singur utilizator (eu), Basic Auth bcrypt era corect pentru modelul de amenințare.
  • Găzduit pe platforma însăși, nu pe SaaS, dashboard-ul nu poate depinde de lucrul pe care îl monitorizează.

Arhitectură

Frontend Vite + React. Backend Fastify pe Node, SQLite pentru bucățica mică de stare (praguri de alertă, avertismente amânate). PM2 ține procesul Node în viață peste reboot-uri; rulează în CT 208 pe nodul Proxmox de tier servicii.

Cea mai inteligentă piesă este sidecar-ul Gaming PC. Datele de utilizare Claude Code CLI trăiesc pe un host Windows WSL2 pe care containerele LXC nu îl pot vedea direct. Un mic sidecar Node (claude-sidecar serviciu systemd, port 11436) pe Gaming PC citește cache-ul local al CLI-ului + servește un endpoint JSON peste LAN. Dashboard-ul îl interoghează la fiecare 5 secunde.

Un portproxy Windows face puntea între portul LAN și adresa internă WSL2, workaround-ul a luat o după-amiază să fie pus în loc, dar înseamnă că dashboard-ul vede utilizarea reală Claude în timp real, nu o presupunere bazată pe scrape de log-uri.

Rezultate

  • 15 containere LXC monitorizate pe două noduri Proxmox.
  • Refresh sub 200ms pentru cardurile live (utilizare Claude, GPU, adâncime coadă).
  • Layout single-screen, totul vizibil la 1080p fără scroll.
  • Zero downtime de la lansare, dashboard-ul a rulat prin fiecare ciclu de reboot pentru upgrade de kernel.
  • Cost operator, check-in-ul de dimineață a trecut de la 5 minute de pct list + nvidia-smi + journalctl la o privire de 10 secunde.

Capturi de ecran

[FILL: înlocuiește cu capturi ale dashboard-ului live, ecranul principal + cardul utilizare Claude + cardul presiune GPU + cardul planuri de coadă. Anonimizează orice hostname-uri de container dacă e nevoie.]

Ce urmează

Două elemente pe lista pentru iterația următoare:

  1. Împinge logica sidecar-ului WSL2 într-un cont de serviciu propriu pe Gaming PC în loc să-l rulez sub login-ul de developer. Lanțul SSH care acordă dashboard-ului acces de citire la cache-ul CLI este în prezent un singur punct de eșec dacă login-ul de developer expiră.
  2. Reguli de alertă per container, alertarea actuală este doar prag (CPU > 90%, memorie > 95%). Un mic motor de reguli (ex. Prometheus AlertManager-lite) mi-ar permite să marchez alertele zgomotoase ca amânate fără a pierde semnalul de bază.

The tech

Tehnologii folosite

  • Vite
  • React
  • Fastify
  • SQLite
  • PM2
  • Prometheus

Ce aș face altfel

Aș împinge logica sidecar-ului WSL2 într-un cont de serviciu propriu pe nodul Proxmox în loc să-l rulez sub login-ul de developer, lanțul SSH este un singur punct de eșec.

Vrei ceva similar pentru echipa ta?

Apel de descoperire de 30 de minute. Fără prezentare comercială. Discutăm despre ce vrei să livrezi, ce te încurcă și dacă te pot ajuta. Dacă da, primești o ofertă fixă într-o săptămână.