github SikamikanikoBG/homelab-monitor v0.8.0
v0.8.0 — Multi-machine monitoring

latest releases: v0.25.0, v0.24.0, v0.23.0...
one month ago

First half of #35 lands: the hub can now monitor other boxes too. Agentless — just an SSH key and Python 3 on the remote.

Highlights

  • Host pill bar at the top of every page — Local + each registered remote. One click switches the active host across the whole dashboard.
  • Overview tab is now the All-hosts fleet table — every box's CPU + cores, RAM % + GB, GPU util + VRAM, load, uptime, temp, top disks, refreshed every 10 s. Click any row to focus that host.
  • Hosts tab — onboarding wizard with 🔍 Scan LAN suggestions, inline edit, and a real Test connection that checks SSH / /proc / Docker socket / systemd D-Bus / nvidia-smi separately, with OS-aware remedies per row (Alpine vs Debian/RHEL/SUSE/Arch vs macOS).
  • ▶ Run on remote button on every actionable remedy — if sudo is needed, an inline panel asks for the password with a clear "used once, not stored, never in argv" note and streams output back.
  • Host and Services tabs now work for any registered remote, not just local.
  • Capability-aware "why empty" notices on tabs that are still local-only — instead of a generic "local-only", you see e.g. "cloudy has no NVIDIA GPU" or "Docker is not installed on cloudy", read from the host's own Test result.

How it works (very briefly)

The hub pipes a small probe.py (pure stdlib) through SSH on every poll cycle: ssh user@host python3 -. The remote runs it, prints one JSON blob, exits — nothing persists on the remote. The hub caches results per host and the UI reads from /api/fleet and /api/host_data/<name>.

Security posture

  • Pubkey auth only, passwords disabled. The hub generates its own ed25519 key on first boot under /data/.ssh/ (persists across rebuilds).
  • Per-host SSH timeouts so a slow remote can never block the polling loop.
  • Sudo password handling for Run-on-remote: piped via the local subprocess's stdin → ssh's encrypted channel → sudo -S -p '' on the remote. Never in any process's argv, never persisted to SQLite, never written to logs.

What's not yet in this slice

Per-host GPU / Containers / AI Models data collection, per-host history charts, and the topology view from the Issue #35 design. Slated for the next releases; the tabs concerned already tell you precisely why they're empty for non-local hosts based on each host's capability check.

Upgrade

cd <your-clone-dir>
git pull
docker compose pull
docker compose up -d

Or if you're new to it:

curl -fsSLO https://raw.githubusercontent.com/SikamikanikoBG/homelab-monitor/main/docker-compose.yml
docker compose pull
docker compose up -d

Open http://<your-host-ip>:9800, head to the Hosts tab, and follow the wizard to register your first remote.

Image

Multi-arch (linux/amd64, linux/arm64) on Docker Hub:
sikamikaniko123/homelab-monitor:0.8.0 · also 0.8 and latest.

Don't miss a new homelab-monitor release

NewReleases is sending notifications on new releases.