Homepage: das Dashboard für alle deine selbstgehosteten Dienste
Ein aufgeräumtes Start-Dashboard für deinen Server: Homepage verlinkt alle Dienste, zeigt Systemlast und live den Docker-Container-Status – hinter Traefik.
Inhaltsverzeichnis
Je mehr Dienste du selbst hostest, desto mehr Lesezeichen und IP-Adressen musst du dir merken. Ein Dashboard löst das: eine einzige Startseite, die alle deine Dienste verlinkt, die Systemlast zeigt und dir sogar sagt, welche Container gerade laufen. Homepage ist dafür das schönste und schnellste Werkzeug.
Was bauen wir?
Ein zentrales Dashboard mit Homepage (v1.13.2) hinter Traefik, das du komplett über einfache YAML-Dateien konfigurierst. Am Ende hast du eine aufgeräumte Startseite mit Kacheln für alle Dienste, Widgets für CPU/RAM/Festplatte, ein Suchfeld – und die Killer-Funktion: Homepage liest den Docker-Socket und zeigt live an, ob ein Container läuft. Alles statisch generiert, ohne Datenbank, mit winzigem Ressourcenbedarf.
Voraussetzungen
- Ein Server mit laufendem Traefik und Docker Compose
- Eine Subdomain, die auf den Server zeigt – im Folgenden
DEINE_DOMAIN(z. B.start.deinedomain.de) - Ein paar bereits laufende Dienste, die du verlinken willst (macht mehr Spaß, ist aber nicht Pflicht)
VPS 1000 G12
4 vCore · 8 GB RAM · 256 GB NVMe
ab 10,36 €/Monat
Homepage ist extrem genügsam – läuft problemlos neben deinem übrigen Stack.
💶 5 € Gutschein für netcup-Neukunden:36nc17844976032
(nur Neukunden, keine Domains)
Schritt für Schritt
Schritt 1: Projekt und Konfigurationsordner anlegen
Homepage wird ausschließlich über YAML-Dateien in einem config-Ordner gesteuert. Lege die Struktur an:
mkdir -p /opt/homepage/config /opt/homepage/icons && cd /opt/homepageSchritt 2: Grundeinstellungen
Die config/settings.yaml bestimmt Aussehen und Layout. Wir definieren zwei Gruppen als Zeilen-Layout mit je drei Spalten:
title: Meine Serverküche
theme: dark
color: slate
headerStyle: boxed
layout:
Infrastruktur:
style: row
columns: 3
Medien:
style: row
columns: 3Die Namen unter layout: (Infrastruktur, Medien) müssen später exakt mit den Gruppennamen in der Dienste-Datei übereinstimmen – nur dann greift das Layout.
Schritt 3: Dienste verlinken
Die config/services.yaml ist das Herzstück – deine Kacheln. Jeder Dienst bekommt einen Namen, eine URL, eine Beschreibung und ein Icon (Homepage lädt passende Icons automatisch aus einem großen Katalog, wenn du name.png angibst):
- Infrastruktur:
- Nextcloud:
href: https://cloud.DEINE_DOMAIN
description: Eigene Cloud
icon: nextcloud.png
- Vaultwarden:
href: https://vault.DEINE_DOMAIN
description: Passwortmanager
icon: vaultwarden.png
- Medien:
- Immich:
href: https://fotos.DEINE_DOMAIN
description: Fotos
icon: immich.png
- Jellyfin:
href: https://media.DEINE_DOMAIN
description: Medienserver
icon: jellyfin.pngSo verlinkst du deine bereits installierten Dienste wie Nextcloud, Immich, Jellyfin oder Vaultwarden an einer zentralen Stelle.
Schritt 4: Widgets für Systemlast und Suche
Die config/widgets.yaml steuert die Info-Leiste oben. Ressourcen-Anzeige, ein Suchfeld und Datum/Uhrzeit:
- resources:
cpu: true
memory: true
disk: /
- search:
provider: duckduckgo
target: _blank
- datetime:
text_size: xl
format:
dateStyle: full
timeStyle: shortDas resources-Widget zeigt die Auslastung des Hosts. CPU und RAM liest Homepage direkt aus dem Container heraus (kein Docker-Socket nötig); den Socket binden wir erst im nächsten Schritt für den Container-Status ein.
Schritt 5: Mit Traefik verbinden – und der entscheidende Host-Schutz
Jetzt die compose.yaml. Ersetze DEINE_DOMAIN durch deine echte Subdomain:
services:
homepage:
image: ghcr.io/gethomepage/homepage:v1.13.2
restart: unless-stopped
environment:
HOMEPAGE_ALLOWED_HOSTS: DEINE_DOMAIN
volumes:
- ./config:/app/config
- ./icons:/app/public/icons
networks: [proxy]
labels:
- "traefik.enable=true"
- "traefik.http.routers.homepage.rule=Host(`DEINE_DOMAIN`)"
- "traefik.http.routers.homepage.entrypoints=websecure"
- "traefik.http.routers.homepage.tls.certresolver=le"
- "traefik.http.services.homepage.loadbalancer.server.port=3000"
networks:
proxy:
external: trueHOMEPAGE_ALLOWED_HOSTS ist Pflicht
HOMEPAGE_ALLOWED_HOSTS mit deiner Domain siehst du nur eine Fehlerseite („Host validation failed“). Trage dort exakt deine Domain ein – mehrere durch Komma getrennt.Starte das Dashboard:
docker compose up -dPrüfe von außen, dass es mit gültigem HTTPS antwortet:
curl -sI https://DEINE_DOMAIN/ | head -1HTTP/2 200Im Browser siehst du jetzt dein Dashboard mit den Kacheln und der Info-Leiste:

Schritt 6: Live-Container-Status über den Docker-Socket
Die stärkste Funktion: Homepage kann direkt aus Docker lesen, ob ein Container läuft, und CPU/RAM je Container anzeigen. Dafür legst du config/docker.yaml an:
my-docker:
socket: /var/run/docker.sockDann bindest du den Socket schreibgeschützt in den Container ein – ergänze in der compose.yaml unter volumes::
- /var/run/docker.sock:/var/run/docker.sock:roUnd verknüpfst eine Kachel mit ihrem Container (server verweist auf den Namen aus docker.yaml, container auf den echten Container-Namen):
- Infrastruktur:
- Traefik:
description: Reverse Proxy
icon: traefik.png
server: my-docker
container: traefik-traefik-1Nach docker compose up -d zeigt die Kachel ein grünes Status-Abzeichen, sobald der Container läuft:

Der Docker-Socket ist mächtig – nur lesend einbinden
/var/run/docker.sock ist faktisch Root-Zugriff auf den Host (siehe Benutzer & Rechte). Binde ihn deshalb immer mit :ro (read only) ein und veröffentliche Homepage nicht ungeschützt im Internet. Für echten Schutz gehört vor ein solches Dashboard eine Authentifizierung – etwa eine Traefik-BasicAuth-Middleware oder später ein Single-Sign-On.Schritt 7: Lesezeichen ergänzen (optional)
Neben Diensten kann Homepage auch reine Lesezeichen anzeigen – über config/bookmarks.yaml:
- Entwicklung:
- Serverküche:
- abbr: SK
href: https://serverkueche.deDamit hast du Dienste, Systemlast, Suche und Lesezeichen an einem Ort. Änderungen an den YAML-Dateien übernimmt Homepage automatisch – ein Neuladen im Browser genügt meist, kein Neustart nötig.
Wenn es nicht funktioniert
„Host validation failed" statt Dashboard. Die häufigste Stolperfalle: HOMEPAGE_ALLOWED_HOSTS fehlt oder enthält die falsche Domain. Genau die Domain eintragen, unter der du zugreifst, dann docker compose up -d.
Die Ressourcen-Widgets zeigen keine oder falsche Werte. CPU und RAM liest Homepage aus dem Container heraus (kein Socket nötig). Zeigt disk: / das Container-Dateisystem statt der Host-Platte, binde den gewünschten Pfad zusätzlich als Volume ein (z. B. - /:/host:ro und disk: /host).
Ein Icon wird nicht geladen. Der Name passt nicht zum Icon-Katalog. Schreibe den Dienstnamen klein und ohne Leerzeichen (nextcloud.png), oder lege ein eigenes Bild in den icons-Ordner (gemountet nach /app/public/icons) und referenziere es als /icons/name.png.
Die Container-Kachel zeigt keinen Status. Der Wert bei container: muss der exakte Container-Name sein. Finde ihn mit docker ps --format '{{.Names}}' – bei Compose ist das meist ordner-dienst-1 (z. B. traefik-traefik-1).
Änderungen an den YAML-Dateien greifen nicht. Ein Syntaxfehler bricht das Einlesen ab. YAML ist einrückungsempfindlich – prüfe die Logs mit docker compose logs homepage auf error-Zeilen und achte auf konsequente Leerzeichen (keine Tabs).
Wartung & Backups
- Updates sind unkritisch. Homepage hat keinen persistenten Zustand außer deinen Config-Dateien. Bump den Image-Tag (
ghcr.io/gethomepage/homepage:v1.13.2) gelegentlich auf die neue Version unddocker compose up -d; das übernimmt sonst dein normaler Update-Prozess. Prüfe nach größeren Sprüngen die Release-Notes, da sich Config-Optionen ändern können. - Das Backup ist winzig. Sichere nur den
config-Ordner (und ggf. eigeneicons) – das ist deine gesamte Konfiguration. Er gehört ins Restic-Backup; die Anwendung selbst wird jederzeit aus dem Image neu erzeugt. - Sicherheit nicht vergessen. Ein Dashboard mit Docker-Einblick ist ein lohnendes Ziel. Betreibe es nur hinter HTTPS (erledigt Traefik) und schütze es zusätzlich mit einer Authentifizierung, bevor es öffentlich erreichbar ist.
Feedback per E-Mail: feedback@serverkueche.de
Das könnte dir auch schmecken

Uptime Kuma installieren: Server-Monitoring hinter Traefik
Uptime Kuma hinter Traefik aufsetzen und deine Dienste überwachen: Monitore, Benachrichtigungen und eine Status-Seite – …

Monitoring mit Grafana & Prometheus: dein Server in Live-Dashboards
Ein vollständiger Monitoring-Stack aus Prometheus, node-exporter, cAdvisor und Grafana hinter Traefik – mit …

Die eigene Website mit Hugo hosten – wie die Serverküche selbst
Statische Website mit Hugo bauen und im Docker-Container hinter Traefik ausliefern – schnell, sicher, ohne Datenbank. …