Stop Memorising Port Numbers: Set Up Homepage as Your Home Server Dashboard with Docker
Pull every service on your home server into one page. A complete walkthrough for installing Homepage — a fast, good-looking dashboard with real-time system status — using Docker.
Once you get into self-hosting, your home server fills up quickly: Nextcloud for files, Vaultwarden for passwords, Immich for photos, Paperless-ngx for documents.
Then comes the problem everyone hits — you cannot remember which port belongs to which service.
Typing 192.168.1.100:8080 for passwords and 192.168.1.100:2283 for photos gets old fast. Browser bookmarks help, until you switch to a different machine or reach for your phone, and none of them follow you.
The usual fix in the self-hosting community is a personal dashboard, and the one worth your time is Homepage.
Why Homepage
Homepage is an open-source dashboard built to be the front door to everything on your server. What sets it apart:
- Fast and light. Built with Go and React. It loads instantly and uses only a few tens of megabytes of RAM per container.
- Genuinely good-looking. Clean, responsive on any screen size, with light and dark themes built in.
- Docker aware. It reads container status straight from the Docker socket and shows running/stopped state on each card.
- Real-time system widgets. CPU, RAM, disk usage and network throughput for the server itself.
- Service APIs. It can pull live data from the services themselves — ads blocked by Pi-hole, free space in Nextcloud — and show it on that service's card.
Before you start
1. A home server with Docker and Docker Compose already installed
2. SSH access to a terminal on that server
Step 1: Folder structure and Docker Compose
SSH into the server and create a folder for Homepage's configuration:
mkdir -p ~/homepage/config
cd ~/homepage
Then write docker-compose.yml:
version: '3.8'
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
restart: unless-stopped
Mounting the Docker socket is what lets Homepage read container status.
Step 2: The configuration files
Homepage is configured entirely through YAML, which keeps things tidy. You need five files in ~/homepage/config.
docker.yaml — lets Homepage talk to the Docker daemon:
kubernetes:
role: ""
docker:
- name: my-home-server
socket: /var/run/docker.sock
settings.yaml — page title, header style and layout:
title: Private Brain OS
headerStyle: clean
layout:
Personal Cloud:
columns: 2
Security & Tools:
columns: 2
widgets.yaml — clock, search box and system resources:
- datetime:
text_size: l
format:
timeStyle: short
dateStyle: long
hour12: false
- search:
provider: duckduckgo
target: _blank
- system:
showHost: true
cpu: true
memory: true
disk: /
services.yaml — the important one. This is where your services and their live status come from (assuming your server is at 192.168.1.100):
- Personal Cloud:
- Nextcloud:
- icon: nextcloud
href: http://192.168.1.100:8000
description: Private file storage and cloud
server: my-home-server
container: nextcloud
- Immich:
- icon: immich
href: http://192.168.1.100:2283
description: Photo and video library at home
server: my-home-server
container: immich
- Security & Tools:
- Vaultwarden:
- icon: vaultwarden
href: http://192.168.1.100:8080
description: Password and secrets manager
server: my-home-server
container: vaultwarden
- Linkwarden:
- icon: linkwarden
href: http://192.168.1.100:3000
description: Bookmark manager
server: my-home-server
container: linkwarden
Tip: Homepage ships with hundreds of icons and fetches more automatically. Just write the service name in lowercase — nextcloud, vaultwarden, immich — and the right logo appears.
bookmarks.yaml — external sites you open often:
- Developer Tools:
- GitHub:
- icon: github
href: https://github.com/
Step 3: Start it
docker compose up -d
Open http://:3000. You should see cards for each service with a green or red dot showing live container status, and CPU, RAM and disk gauges across the top.
Where to go next
Two additions make this a genuinely useful front door:
1. Tailscale — reach the dashboard securely from anywhere, over a private network, without opening a single port to the internet.
2. A reverse proxy with a real hostname — so you stop typing IP addresses entirely and use something like home.yourdomain.com.
At that point the port numbers you started with are gone for good.