selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

homelab-monitor logo

Self-host homelab-monitor

v0.37.0

Homelab dashboard with GPU, AI VRAM, Docker and energy costs

ReleaseOpen SourceMIT
Updated10 hours ago
LanguagePython
Setup difficultyModerate
Stars
227
Ports
9800 (Dashboard HTTP), 9810 (MCP server HTTP)
Docker
sikamikaniko123/homelab-monitor
Install with Docker Compose
Overview tab showing all hosts at a glance with CPU, RAM, GPU, load, uptime, temperature and disksHosts tab with onboarding wizard and capability checklistServices tab showing systemd units with custom units highlighted and failed units firstContainers tab with health, RAM, VRAM, ports and control buttonsDisks tab with WizTree-style treemap of filesystem usageNetwork tab showing interfaces, DNS, gateway and listening socketsSecurity tab with posture check results (firewall, SSH, SELinux, AppArmor, fail2ban)Benchmark Lab with model leaderboard showing tokens/sec, VRAM fit and context sweep chart

What is homelab-monitor?

HomeLab Monitor is a single-container, self-hosted dashboard that puts your entire home lab and AI rig on one page. It shows live GPU utilisation, VRAM, power draw, temperature and identifies which container or process is using each GPU — supporting NVIDIA, AMD and Intel GPUs on Linux and Windows. It tracks Docker container health with separate RAM and VRAM columns, systemd services, interactive disk treemaps, network interfaces and listening sockets, plus a read-only security posture check covering firewall, SSH, SELinux/AppArmor and fail2ban. Power consumption is measured per component and per process, container or model, with day/night tariffs and a weekly busy-hours heatmap. A Benchmark Lab sweeps local Ollama models across context sizes to find the largest context fitting in VRAM. Multi-machine monitoring works agentless over SSH — just add the hub's key to each remote (Linux, Raspberry Pi, or Windows). A built-in read-only MCP server on port 9810 lets AI agents explore the homelab through 19 tools. Alerts go to Discord, ntfy.sh, Telegram, Email, Slack or generic webhooks. Runs without a separate metrics stack or cloud dependency, no login required — meant for a trusted LAN/VPN. History persists in SQLite (./data/gpu.db).

Should you self-host homelab-monitor?

homelab-monitor scores 52/100 on selfhost.directory (how scoring works) and ranks #19 of 51 in Monitoring & observability. It has 227 GitHub stars.

It shipped 23 stable releases in the past year. The latest, v0.37.0, came out on 23 September 2026. New versions land roughly every 2 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is GoAccess (75/100, 21 091 stars). It scores higher overall, so compare the two before you pick. See homelab-monitor vs GoAccess side by side.

Features

  • AI model awareness
  • Alerts
  • Benchmark Lab
  • Container MonitoringControls can be disabled with ENABLE_CONTROLS=0
  • Disk treemaps
  • Experiment tracking
  • GPU Monitoring
  • MCP server (read-only)Can be disabled with ENABLE_MCP=0
  • Multi-host over SSHContainers tab remains local-only for now
  • Network Monitoring
  • Power and cost tracking
  • Prometheus metrics export
  • Security posture checkRead-only, no remediation
  • Systemd service monitoringControls can be disabled with ENABLE_CONTROLS=0; remote Windows via PowerShell
  • Uptime Monitoring

homelab-monitor README

How to install homelab-monitor

Install homelab-monitor with Docker Compose

Docker + docker compose (any modern version). For GPU panels: NVIDIA GPU and NVIDIA Container Toolkit.
Environment variables
PORT, MCP_PORT, SAMPLE_INTERVAL, RETENTION_DAYS, PRESSURE_FREE_MB, ENABLE_MCP, ENABLE_CONTROLS, ALLOW_SELF_UPDATE, WATCH_CONTAINERS, WATCH_SERVICES, CHECK_UPDATES, CHECK_OS_UPDATES, PUBLIC_STATUS, DB_PATH, HOST_ROOT, DOCKER_SOCK, NVIDIA_VISIBLE_DEVICES, NVIDIA_DRIVER_CAPABILITIES

Pre-built multi-arch images (linux/amd64, linux/arm64) from Docker Hub. SQLite history persists in ./data bind mount.

How to configure homelab-monitor

  • ALLOW_SELF_UPDATE1Set 0 to disable in-app updating

    Set 0 to disable in-app updating

    values: 0,1

  • CHECK_OS_UPDATEStrueSet false to stop reporting pending OS package updates

    Set false to stop reporting pending OS package updates

    values: true,false

  • CHECK_UPDATEStrueSet false to disable the daily GitHub-releases check (no outbound calls)

    Set false to disable the daily GitHub-releases check (no outbound calls)

    values: true,false

  • DB_PATH/data/gpu.dbWhere history is stored inside the container

    Where history is stored inside the container

  • DOCKER_SOCK/var/run/docker.sockDocker socket to read containers from

    Docker socket to read containers from

  • ENABLE_CONTROLS1Set 0 to remove the start/stop/restart buttons from the Containers and Services tabs

    Set 0 to remove the start/stop/restart buttons from the Containers and Services tabs

    values: 0,1

  • ENABLE_MCP1Set 0 to run the dashboard without the MCP server

    Set 0 to run the dashboard without the MCP server

    values: 0,1

  • FAST_INTERVAL2Seconds between live-value refreshes on screen. Reads only cheap counters and stores nothing. 0 turns the push stream off and the dashboard falls back to polling.

    Seconds between live-value refreshes on screen. Reads only cheap counters and stores nothing. 0 turns the push stream off and the dashboard falls back to polling.

  • HOST_ROOT/rootfsMount point of the read-only host root

    Mount point of the read-only host root

  • MCP_PORT9810Port for the built-in read-only MCP server

    Port for the built-in read-only MCP server

  • PORT9800Dashboard port

    Dashboard port

  • PRESSURE_FREE_MB2048Free VRAM below this counts as pressure

    Free VRAM below this counts as pressure

  • PUBLIC_STATUSSet to enable the public status page (also a Settings toggle, which needs no restart)

    Set to enable the public status page (also a Settings toggle, which needs no restart)

  • RETENTION_DAYS180How long history is kept

    How long history is kept

  • SAMPLE_INTERVAL10Seconds between stored samples. This is the storage cadence — every energy and cost figure is integrated against it.

    Seconds between stored samples. This is the storage cadence — every energy and cost figure is integrated against it.

  • WATCH_CONTAINERSExtra containers to scan for OOM (comma-separated)

    Extra containers to scan for OOM (comma-separated)

  • WATCH_SERVICESsystemd units to always show, even vendor ones (comma-separated)

    systemd units to always show, even vendor ones (comma-separated)

homelab-monitor releases & version history

More in Homelab

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…