Once you’re running more than a handful of self-hosted apps, remembering which port each one lives on gets old fast. Two tools fix that for me: Homarr, a start page with a tile for every service, and Glances, which shows how the server itself is coping.

Homarr: the front door to everything
Homarr is a self-hosted dashboard. You build it in the browser by dragging tiles around, with no config files to edit. Each tile links to one of your services and can show whether it’s up. Widgets can add extras like the weather, a calendar or stats from your apps.
I set it as the home page on my browsers. Photos, files, passwords, Portainer, DNS: everything is one click away, and a red status dot tells me straight away if something has fallen over.
Setting up Homarr
Homarr needs a secret key to encrypt the credentials it stores for integrations. Generate one and put it in a .env file next to the compose file:
mkdir -p /opt/stacks/homarr && cd /opt/stacks/homarr
echo "SECRET_ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env
Then compose.yaml:
services:
homarr:
container_name: homarr
image: ghcr.io/homarr-labs/homarr:latest
restart: unless-stopped
ports:
- "7575:7575"
environment:
- SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY}
volumes:
- ./appdata:/appdata
- /var/run/docker.sock:/var/run/docker.sock # optional: lets Homarr see your containers
docker compose up -d
Open http://<your-server-ip>:7575, create your admin account, and start adding tiles. The Docker socket mount is optional. It lets Homarr list your containers and add them to the board quickly, but it also gives Homarr a lot of power over your server, so leave it out if you don’t need that.
Keep it on your home network
A dashboard is basically a map of your network, so I don’t expose mine to the internet. It goes through Nginx Proxy Manager with an access list that only allows local addresses, so I get a friendly name on my home network and it’s invisible from outside.
Glances: is the server OK?
Glances is a system monitor. Think top or htop, but showing everything at once: CPU, load, memory, network, disk activity, free space on every drive, temperatures, the busiest processes and every Docker container’s CPU and memory use. Run it in web mode and you get all of that in a browser tab.
It’s my first stop when something feels slow. Is it Immich chewing through a big import? Is a drive filling up? Glances answers that in seconds.
Setting up Glances
This is my /opt/stacks/glances/compose.yaml:
services:
glances:
container_name: glances
image: nicolargo/glances:latest-full
restart: unless-stopped
pid: host
network_mode: host
environment:
- GLANCES_OPT=-w -C /glances/conf/glances.conf
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/os-release:/etc/os-release:ro
- ./glances.conf:/glances/conf/glances.conf:ro
- /media/ExtStorage:/media/ExtStorage:ro
A few lines are worth explaining, because they’re what let a container see the whole machine:
pid: hostshows the server’s real processes, not just the container’s.network_mode: hostshows real network traffic, and serves the web UI on port61208.- The read-only
docker.sockadds per-container stats. /etc/os-releaseshows the host’s OS name instead of the container’s.- Mount any extra drives you want to track (read-only), like my external storage drive.
-wstarts web server mode.
Running in a container, Glances also sees a lot of internal mounts that clutter the disk list. A small glances.conf hides them:
[fs]
hide=/etc/.*,/var/run/.*,/run/.*,/glances/.*
Start it with docker compose up -d and browse to http://<your-server-ip>:61208.
Security note The Glances web UI has no login by default, and it shows a lot about your machine. Keep it on your home network, or start it with --password to require one.
Putting them together
Add a Glances tile to your Homarr board, and you have one page that gets you to every service and to the health of the server underneath. With more than one server, run the same Glances compose file on each and give each its own tile.
New to Docker? Start with Getting started with Docker and Portainer.

Leave a Reply