One Dashboard for Your Whole Homelab: Set Up Homepage

Stop bookmarking IP addresses. Set up Homepage — a fast, self-hosted dashboard that puts every homelab service, live status, and system stats on one clean start page. Beginner Docker Compose guide.

On this page
  1. Install Homepage
  2. Configure it: four little YAML files
  3. Make it your browser home page

There’s a rite of passage in every homelab. You add a fifth service, go to open the fourth one, and realise you can’t remember whether Sonarr is on port 8989 or 7878, or which of the three IP addresses in your browser history is the wiki. Your bookmarks bar is a graveyard of 192.168.1.x:some-port.

Homepage ends that. It’s a single, fast, self-hosted start page that links to everything you run — and, crucially, shows live information on each tile: how many ads Pi-hole blocked today, what’s downloading in Sonarr, your Proxmox node’s CPU and RAM, right there on the dashboard.

http://home.lab:3000Good evening, Josh4 nodes · 23 containers · all systems greenINFRASTRUCTUREProxmoxCPU 12% · RAM 41%Pi-hole14,203 blocked todayUptime Kuma18/18 up · 100%MEDIAJellyfin2 streams playingSonarr3 downloadingImmich24,881 photosEvery tile links to the service — and shows live data from its APIbuildahomelab.dev

Homepage is configured with plain YAML files (no clunky admin UI to fight), it starts in milliseconds, and it can even auto-discover services straight from your Docker labels. Let’s stand it up.


Install Homepage

Homepage runs as a single container. On your Docker host, create a config folder and run it. There’s one gotcha that catches everyone, so we’ll handle it up front.

The HOMEPAGE_ALLOWED_HOSTS gotcha — read this first

For security, Homepage refuses any request whose address isn’t on an allow-list, and if you skip this you’ll get a blank page or a “host validation failed” error. You must set the HOMEPAGE_ALLOWED_HOSTS environment variable to exactly how you’ll open the dashboard — including the port. This is the number-one reason a fresh Homepage install “doesn’t work.”

1Create the compose file

Make a folder and a docker-compose.yml. Note the docker socket mount — it’s optional, but it’s what lets Homepage auto-discover containers and show Docker stats.

docker-compose.yml

services:
homepage:
  image: ghcr.io/gethomepage/homepage:latest
  container_name: homepage
  ports:
    - "3000:3000"
  volumes:
    - ./config:/app/config
    - /var/run/docker.sock:/var/run/docker.sock:ro   # optional: auto-discovery
  environment:
    # Set this to how YOU reach the dashboard, port included:
    - HOMEPAGE_ALLOWED_HOSTS=192.168.1.50:3000
  restart: unless-stopped
2Start it and let it create its config

Bring it up. On first run Homepage writes a set of starter YAML files into your ./config folder.

Launch Homepage

docker compose up -d

Open http://YOUR-HOST-IP:3000 and you’ll see a default dashboard. Now the fun part — making it yours.


Configure it: four little YAML files

Everything Homepage shows comes from files in the config folder. You only need three to start:

config/ — edit these, Homepage reloads automaticallyservices.yamlYour service tiles+ live widgetssettings.yamlTitle, theme,layout, columnswidgets.yamlTop bar: clock,weather, resources

Edit config/services.yaml to add your own services, grouped however you like. Here’s a real example — notice the widget block on Pi-hole: that’s what pulls live stats onto the tile.

config/services.yaml

- Infrastructure:
  - Proxmox:
      href: https://192.168.1.10:8006
      description: Virtualization host
      icon: proxmox.png
  - Pi-hole:
      href: http://192.168.1.20/admin
      description: Network ad-blocker
      icon: pi-hole.png
      widget:
        type: pihole
        url: http://192.168.1.20
        key: YOUR_PIHOLE_API_TOKEN

- Media:
  - Jellyfin:
      href: http://192.168.1.30:8096
      description: Movies and TV
      icon: jellyfin.png
Live widgets are the whole point

Homepage has built-in widgets for over 100 apps — Proxmox, Sonarr, Radarr, qBittorrent, Immich, Uptime Kuma, Home Assistant, and more. Add a widget block with the service’s API key and the tile starts showing real data: queue counts, streams, temperatures, blocked-ad totals. Browse the full list in the Homepage docs and copy the block for each app you run.

For the top-of-page info widgets — a clock, the weather, and a live glance at the host’s own CPU, memory, and disk — edit config/widgets.yaml:

config/widgets.yaml

- resources:
  cpu: true
  memory: true
  disk: /

- datetime:
  text_size: xl
  format:
    timeStyle: short

Save any file and Homepage reloads on its own — no restart, no rebuild. Tweak, refresh, repeat until it’s exactly the cockpit you want. Here’s the result of exactly the YAML above — three groups, nine tiles, live host stats in the top bar:

http://homelab.lan:3000
Homepage dashboard in dark mode showing Infrastructure, Media, and Monitoring groups with service tiles, plus live CPU, memory, and disk stats in the top bar
The demo lab's finished dashboard. The top-bar resources widget reads the host's real CPU, RAM, and disk — the tiles are one click from anything you self-host.

Make it your browser home page

The finishing move: set http://YOUR-HOST-IP:3000 as your browser’s home page and new-tab page on every device. Now every time you open a browser, you land on a live map of your entire homelab — one click to any service, health of everything at a glance.

Pair it with Uptime Kuma for at-a-glance up/down status, reach it from anywhere over Tailscale, and you’ve turned a pile of ports into something that genuinely feels like your private cloud. Back to the roadmap for what’s next.


Related posts:

Sources: Homepage documentation, Homepage (GitHub).

Comments

Comments are powered by GitHub Discussions — sign in with a GitHub account to join the conversation.