Homepage
One landing page with a tile per service and live container status, configured from files you own.
Names and addresses are placeholders. The list says what each one stands for.
What it does here
Homepage is the front page of the box: a tile for each service, each showing whether its container is running.
Canonical setup
One container with a config folder, plus the Docker socket for live status. Services are described in YAML files in that folder.
Upstream: Homepage: Docker installation.
In this build
- Config under /srv/stacks/homepage/configOwned by you, so tiles can be edited without sudo.
- Config written before the first startHomepage fills an empty folder with its own placeholder config.
- HOMEPAGE_ALLOWED_HOSTS setHomepage refuses hostnames it hasn't been told about.
- The socket mounted read-onlyStatus only.
- 127.0.0.1:3002 outside, 3000 insideCaddy serves it as
home.dev.tailnet.example.
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
ports:
- "127.0.0.1:3002:3000"
volumes:
- /srv/stacks/homepage/config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- HOMEPAGE_ALLOWED_HOSTS=home.dev.tailnet.examplemy-docker:
socket: /var/run/docker.sock- Source Control:
- Forgejo:
href: https://git.dev.tailnet.example
server: my-docker
container: forgejo
- Dashboards:
- Dockge:
href: https://dockge.dev.tailnet.example
server: my-docker
container: dockge
- Beszel:
href: https://metrics.dev.tailnet.example
server: my-docker
container: beszel
- Uptime Kuma:
href: https://status.dev.tailnet.example
server: my-docker
container: uptime-kumaWrite both files, then docker compose up -d. Homepage reloads valid config on its own and doesn't overwrite files that exist. An empty config/bookmarks.yaml drops the default bookmarks.
Seams
Where this meets the rest of the build. Each one leads with what you will actually see.
SymptomMy First Group, and bookmarks you didn't add
Homepage wrote its defaults before your files existed. Overwrite services.yaml and docker.yaml with yours and docker restart homepage.
Symptom403 on home.dev.tailnet.example
The host isn't in HOMEPAGE_ALLOWED_HOSTS. Add it and recreate the container.
Symptompermission denied editing services.yaml
If Homepage created the files, they belong to root. sudo chown -R youruser:youruser /srv/stacks/homepage/config once.
Verify
https://home.dev.tailnet.example loads with your groups, and each tile shows its container as running.
- 17 Oct 2026First written.