Homepage: Das Dashboard für dein Homelab
Du hast 20, 30 oder noch mehr Services in deinem Homelab laufen. Proxmox-VMs, Docker-Container, Media-Server, Monitoring-Tools. Aber keinen Überblick. Du springst zwischen Browser-Tabs hin und her, merkst dir IP-Adressen und Port-Nummern, verlierst den Überblick. Es muss einen besseren Weg geben. Genau hier kommt Homepage ins Spiel: Ein schlankes, blitzschnelles Dashboard, das all deine Services an einem Ort zusammenführt und dabei noch verdammt gut aussieht.
Was ist Homepage?
Homepage ist ein Open-Source-Dashboard, das speziell für Homelabs und Self-Hosted-Umgebungen entwickelt wurde. Im Gegensatz zu einfachen Bookmark-Seiten bietet Homepage echte Integration mit deinen Services: Live-Status, Statistiken, API-Anbindungen. Das Projekt wird aktiv auf GitHub entwickelt und hat sich in den letzten Jahren zur ersten Wahl für viele Homelab-Enthusiasten entwickelt.
Die Stärken auf einen Blick:
- Geschrieben in Next.js, lädt in Millisekunden
- Über 100 vorgefertigte Service-Widgets mit API-Integration
- YAML-basierte Konfiguration, versionierbar mit Git
- Docker-native mit automatischer Container-Erkennung via Labels
- Keine Datenbank erforderlich
- Themable und anpassbar bis ins Detail
Homepage ist nicht nur eine Linksammlung, sondern ein vollwertiges Monitoring-Dashboard. Du siehst auf einen Blick: Läuft Plex? Wie viele Downloads hat Sonarr? Wie ausgelastet ist Proxmox?
Features im Überblick
Homepage bringt eine beeindruckende Feature-Liste mit, die weit über simple Bookmarks hinausgeht:
Service-Widgets: Über 100 vorgefertigte Integrationen für populäre Self-Hosted-Services. Proxmox, Sonarr, Radarr, Jellyfin, Pi-hole, Home Assistant, Portainer, GitLab, Nextcloud und viele mehr. Jedes Widget zeigt relevante Live-Daten: CPU-Auslastung, aktive Downloads, User-Counts, API-Status.
Docker-Integration: Homepage kann direkt mit dem Docker-Socket kommunizieren und Container automatisch erkennen. Via Docker-Labels konfigurierst du Services, ohne die YAML-Config anzufassen. Besonders praktisch in dynamischen Umgebungen.
Bookmarks: Klassische Lesezeichen-Gruppen für Webseiten ohne API-Integration. GitHub, Reddit, Monitoring-Dashboards, dokumentation.
System-Info-Widgets: CPU, RAM, Disk, Network-Traffic deines Hosts. Auch für Remote-Hosts via SSH oder API.
Wetter-Widget: Lokales Wetter via OpenMeteo-API, keine Registrierung nötig.
Suchleiste: Quick-Launch für alle Services plus Integration mit Google, DuckDuckGo, Custom-Search-Engines.
Tastatur-Navigation: Spotlight-artige Suche mit Strg+K, perfekt für Power-User.
Custom CSS: Vollständig themable. Dark Mode, Light Mode, Custom Colors.
Multi-Language: Deutsche UI verfügbar.
Kubernetes-Support: Für größere Setups mit K8s-Clustern.
Die Widget-Liste wächst kontinuierlich. Fehlt dein Lieblings-Service? Die Community ist aktiv, neue Integrationen werden regelmäßig hinzugefügt. Alternativ kannst du Custom-API-Widgets nutzen.
Installation
Die Installation ist denkbar einfach. Homepage läuft am besten als Docker-Container. Hier eine minimale docker-compose.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- 3000:3000
volumes:
- ./homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Europe/Berlin
- PUID=1000
- PGID=1000
restart: unless-stopped
Einige wichtige Punkte zur Compose-Datei:
- Port 3000: Standard-Port für Homepage. Du kannst ihn natürlich anpassen.
- Volume ./homepage: Hier liegen die Konfig-Dateien. Wird automatisch angelegt.
- Docker-Socket: Read-Only-Zugriff auf
/var/run/docker.sockermöglicht Docker-Integration. - Timezone: Wichtig für korrekte Zeitanzeigen in Widgets.
- PUID/PGID: User- und Group-ID für Dateiberechtigungen.
Nach dem ersten Start erstellt Homepage automatisch die nötigen Config-Dateien:
1
2
3
4
5
6
7
homepage/
├── bookmarks.yaml # Lesezeichen-Gruppen
├── docker.yaml # Docker-Integration-Config
├── services.yaml # Service-Definitionen mit Widgets
├── settings.yaml # Globale Einstellungen (Theme, Layout)
├── widgets.yaml # Dashboard-Widgets (CPU, Wetter, etc.)
└── custom.css # Optionales Custom-Styling
Der erste Aufruf von http://localhost:3000 zeigt dir ein leeres Dashboard mit Beispiel-Config. Zeit zum Konfigurieren.
Docker-Socket-Zugriff ist mächtig. In Produktivumgebungen solltest du einen Docker-Socket-Proxy wie Tecnativa/docker-socket-proxy verwenden, um den Zugriff einzuschränken.
Konfiguration: settings.yaml
Die settings.yaml ist das Herzstück der globalen Einstellungen. Hier legst du Theme, Layout und generelle Optionen fest:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
title: Homelab Dashboard
favicon: https://gethomepage.dev/img/favicon.ico
theme: dark
color: slate
headerStyle: boxed
layout:
Infrastruktur:
style: row
columns: 3
Media:
style: row
columns: 4
Entwicklung:
style: row
columns: 2
quicklaunch:
searchDescriptions: true
hideInternetSearch: false
hideVisitURL: false
background:
image: /images/background.png
blur: sm
saturate: 50
brightness: 50
opacity: 20
cardBlur: md
language: de
providers:
openweathermap: openweathermapapikey
weatherapi: weatherapiapikey
hideErrors: false
showStats: true
Die wichtigsten Optionen im Detail:
Theme und Color: Homepage bietet mehrere Themes (dark, light) und Farbpaletten (slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose). Experimentiere mit Kombinationen.
Layout: Definiere pro Service-Gruppe Style und Spaltenanzahl. row für horizontales Layout, column für vertikales. Praktisch für unterschiedliche Service-Typen.
Quicklaunch: Die Suchleiste. searchDescriptions durchsucht auch Service-Beschreibungen, nicht nur Namen.
Background: Custom-Background-Image mit Blur, Saturate, Brightness, Opacity. Für dezente Hintergründe.
Language: de für deutsches Interface.
Nutze
cardBlurfür einen Glasmorphism-Effekt auf Service-Cards. Sieht mit Background-Images besonders gut aus.
Konfiguration: services.yaml
Die services.yaml definiert deine Services, gruppiert und mit Widget-Integration. Hier ein Beispiel aus einem echten Homelab:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
---
- Infrastruktur:
- Proxmox:
icon: proxmox.png
href: https://192.168.60.15:8006
description: Virtualisierung
widget:
type: proxmox
url: https://192.168.60.15:8006
username: monitoring@pve
password: monitoring-password
- Pi-hole:
icon: pi-hole.png
href: http://192.168.2.20/admin
description: DNS Adblocker
widget:
type: pihole
url: http://192.168.2.20
key: pihole-api-key
- Nginx Proxy Manager:
icon: nginx-proxy-manager.png
href: https://192.168.60.65
description: Reverse Proxy
widget:
type: npm
url: http://192.168.60.65:81
username: [email protected]
password: npm-password
- Portainer:
icon: portainer.png
href: https://portainer.newsxc.net
description: Docker Management
widget:
type: portainer
url: http://192.168.60.100:9000
env: 1
key: portainer-api-key
- Media:
- Jellyfin:
icon: jellyfin.png
href: https://jellyfin.newsxc.net
description: Media Server
widget:
type: jellyfin
url: http://192.168.60.80:8096
key: jellyfin-api-key
enableBlocks: true
enableNowPlaying: true
- Sonarr:
icon: sonarr.png
href: https://sonarr.newsxc.net
description: TV Shows
widget:
type: sonarr
url: http://192.168.60.85:8989
key: sonarr-api-key
enableQueue: true
- Radarr:
icon: radarr.png
href: https://radarr.newsxc.net
description: Filme
widget:
type: radarr
url: http://192.168.60.85:7878
key: radarr-api-key
enableQueue: true
- Prowlarr:
icon: prowlarr.png
href: https://prowlarr.newsxc.net
description: Indexer Manager
widget:
type: prowlarr
url: http://192.168.60.85:9696
key: prowlarr-api-key
- Entwicklung:
- GitLab:
icon: gitlab.png
href: https://gitlab.newsxc.net
description: Git Repository
widget:
type: gitlab
url: https://gitlab.newsxc.net
key: gitlab-api-key
- Gitea:
icon: gitea.png
href: https://gitea.newsxc.net
description: Leichtgewichtige Git-Forge
- Code Server:
icon: code-server.png
href: https://code.newsxc.net
description: VS Code im Browser
Die Struktur ist selbsterklärend:
-
Gruppen: Top-Level sind Gruppen (z.B.
Infrastruktur,Media). Diese korrespondieren mit den Layout-Einstellungen insettings.yaml. -
Services: Jeder Service hat Name, Icon, URL, Beschreibung.
-
Widget: Optional, aber das macht Homepage mächtig. Über 100 Widget-Typen verfügbar. Wichtigste Parameter:
type: Widget-Typ (proxmox, pihole, sonarr, etc.)url: API-Endpoint des Serviceskey: API-Key (bei Auth-pflichtigen APIs)username/password: Basic Auth oder Service-spezifische Credentials- Widget-spezifische Optionen (z.B.
enableQueuebei Sonarr)
API-Keys findest du meist in den Einstellungen deiner Services. Proxmox benötigt einen dedizierten Monitoring-User. Pi-hole zeigt den API-Key in Settings → API. Sonarr/Radarr unter Settings → General → API Key.
Konfiguration: widgets.yaml
Die widgets.yaml definiert Dashboard-weite Widgets, die nicht zu einzelnen Services gehören. Denk an System-Info, Wetter, Suche:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
---
- logo:
icon: https://gethomepage.dev/img/favicon.ico
- search:
provider: google
target: _blank
showSearchSuggestions: true
- datetime:
text_size: xl
format:
timeStyle: short
dateStyle: short
hourCycle: h23
- openmeteo:
label: Berlin
latitude: 52.52
longitude: 13.40
units: metric
cache: 5
timezone: Europe/Berlin
- resources:
cpu: true
memory: true
disk: /
cputemp: true
uptime: true
units: metric
refresh: 3000
- resources:
label: NAS
cpu: true
memory: true
disk: /mnt/storage
expanded: true
units: metric
refresh: 5000
Die Widget-Typen im Detail:
Logo: Zeigt ein Logo oder Icon oben im Dashboard.
Search: Suchleiste mit Provider-Auswahl (Google, DuckDuckGo, Brave, Custom). showSearchSuggestions aktiviert Live-Suggestions.
Datetime: Datum und Uhrzeit. Formatierung via Intl-Optionen. hourCycle: h23 für 24-Stunden-Format.
Openmeteo: Wetter-Widget via OpenMeteo-API (kostenlos, keine Registrierung). Latitude/Longitude deines Standorts. cache in Minuten.
Resources: System-Ressourcen. CPU, Memory, Disk, CPU-Temp, Uptime. disk nimmt Mount-Point (z.B. /, /mnt/data). Du kannst mehrere Resources-Widgets für verschiedene Hosts definieren (via label).
Für Remote-Hosts (NAS, andere Server) kannst du
resourcesmit SSH-Zugriff oder Custom-APIs kombinieren. Alterativ nutze Node-Exporter + Prometheus und baue Custom-Widgets.
Konfiguration: bookmarks.yaml
Für Services ohne Widget-Integration oder einfache Webseiten nutzt du Bookmarks:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
---
- Entwicklung:
- GitHub:
- icon: github.png
href: https://github.com
description: Code Repository
- Stack Overflow:
- icon: stackoverflow.png
href: https://stackoverflow.com
description: Q&A Community
- DevDocs:
- icon: devdocs.png
href: https://devdocs.io
description: API Documentation
- Social:
- Reddit r/selfhosted:
- icon: reddit.png
href: https://reddit.com/r/selfhosted
description: Self-Hosting Community
- Hacker News:
- icon: hackernews.png
href: https://news.ycombinator.com
description: Tech News
- Tools:
- regex101:
- icon: regex101.png
href: https://regex101.com
description: Regex Tester
- JSON Formatter:
- icon: json.png
href: https://jsonformatter.org
description: JSON Tools
- CyberChef:
- icon: cyberchef.png
href: https://gchq.github.io/CyberChef/
description: Data Transformation
- Monitoring:
- Uptime Kuma:
- icon: uptime-kuma.png
href: https://uptime.newsxc.net
description: Uptime Monitoring
- Grafana:
- icon: grafana.png
href: https://grafana.newsxc.net
description: Metrics Dashboard
Bookmarks sind einfach strukturiert: Gruppen, dann Services mit Icon, URL, Beschreibung. Kein Widget-Support, aber dafür null Config-Aufwand. Perfekt für statische Links.
Docker-Integration via Labels
Einer der cleversten Features von Homepage ist die Docker-Label-Integration. Statt Services in services.yaml zu definieren, annotierst du deine Container mit Labels. Homepage erkennt sie automatisch.
Beispiel: Ein Nginx Proxy Manager-Container mit Homepage-Labels:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./npm/data:/data
- ./npm/letsencrypt:/etc/letsencrypt
labels:
- "homepage.group=Infrastruktur"
- "homepage.name=Nginx Proxy Manager"
- "homepage.icon=nginx-proxy-manager.png"
- "homepage.href=https://npm.newsxc.net"
- "homepage.description=Reverse Proxy & SSL"
- "homepage.widget.type=npm"
- "homepage.widget.url=http://npm:81"
- "[email protected]"
- "homepage.widget.password=npm-password"
Das gleiche Prinzip funktioniert mit jedem Container. Hier ein Traefik-Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
services:
traefik:
image: traefik:v2.10
container_name: traefik
labels:
- "homepage.group=Infrastruktur"
- "homepage.name=Traefik"
- "homepage.icon=traefik.png"
- "homepage.href=https://traefik.newsxc.net"
- "homepage.description=Reverse Proxy & Load Balancer"
- "homepage.widget.type=traefik"
- "homepage.widget.url=http://traefik:8080"
Die Label-Syntax:
homepage.group: Service-Gruppe (entspricht Gruppen in services.yaml)homepage.name: Service-Namehomepage.icon: Icon-Datei (aus Icon-Pack oder URL)homepage.href: Externe URL zum Servicehomepage.description: Beschreibunghomepage.widget.type: Widget-Typhomepage.widget.url: Widget-API-URLhomepage.widget.key: API-Key (für Auth-pflichtige Widgets)homepage.widget.*: Weitere Widget-spezifische Parameter
Damit Homepage Docker-Container erkennt, brauchst du noch die docker.yaml:
1
2
3
4
---
docker:
my-docker:
socket: /var/run/docker.sock
Oder für Remote-Docker-Hosts:
1
2
3
4
5
6
7
8
---
docker:
local:
socket: /var/run/docker.sock
remote-host:
host: 192.168.60.100
port: 2375
Docker-API über TCP (Port 2375) ist unsicher. Nutze TLS (Port 2376) mit Zertifikaten oder einen Socket-Proxy. Niemals ungeschützten Docker-Socket im Netzwerk exposen.
Vorteile der Label-Methode:
- Dezentrale Config: Service-Definition direkt beim Container
- Dynamische Discovery: Neue Container werden automatisch erkannt
- Weniger Config-Dateien zu pflegen
- Ideal für Stacks mit vielen Containern
Nachteile:
- Weniger Übersicht: Config verteilt über viele Compose-Dateien
- Erfordert Container-Restart bei Label-Änderungen
- Nicht für Non-Docker-Services (VMs, Bare-Metal)
Kombination möglich: Nutze Labels für Docker-Services,
services.yamlfür VMs und Bare-Metal-Services. Homepage merged beide Quellen.
Layout und Design
Homepage ist hochgradig anpassbar. Neben den Theme-Optionen in settings.yaml kannst du Custom-CSS nutzen.
Beispiel: Eigenes custom.css für Dark-Theme-Tweaks:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* Dunkleres Background für Glasmorphism */
body {
--background-opacity: 0.1;
}
/* Accent-Color für Links */
a {
color: #60a5fa;
}
a:hover {
color: #93c5fd;
}
/* Service-Cards mit mehr Schatten */
.service-card {
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
}
/* Widget-Text größer */
.widget-text {
font-size: 1.1rem;
}
/* Custom-Background für spezifische Gruppen */
[data-group="Media"] {
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(139, 92, 246, 0.1) 100%);
border-radius: 0.5rem;
padding: 1rem;
}
Das Custom-CSS muss im Config-Volume liegen (./homepage/custom.css). Homepage lädt es automatisch.
Layout-Optionen in settings.yaml:
1
2
3
4
5
6
7
8
9
10
11
12
13
layout:
Infrastruktur:
style: row # Horizontales Layout
columns: 3 # 3 Spalten
Media:
style: column # Vertikales Layout
columns: 2 # 2 Spalten
Entwicklung:
style: row
columns: 4
header: false # Gruppe ohne Header
Tab-Layout:
Für sehr viele Services kannst du Tab-Layout nutzen. Jede Gruppe wird ein Tab:
1
2
3
4
5
6
7
layout:
style: tabs
tabs:
- Infrastruktur
- Media
- Entwicklung
- Monitoring
Background-Images:
1
2
3
4
5
6
background:
image: /images/homelab-bg.jpg
blur: md
saturate: 100
brightness: 50
opacity: 30
Das Image muss im homepage/public/images/ Ordner liegen.
Für professionelle Background-Images schau dir Unsplash oder Pexels an. Suche nach “server room”, “data center”, “circuit board” für Homelab-Vibe.
Vergleich: Homepage vs. Homarr vs. Dashy vs. Heimdall
Homepage ist nicht die einzige Dashboard-Lösung. Hier ein Vergleich mit populären Alternativen:
| Feature | Homepage | Homarr | Dashy | Heimdall |
|---|---|---|---|---|
| Service-Widgets | 100+ mit Live-Daten | 50+ mit Live-Daten | Ping-Status nur | Ping-Status nur |
| Docker-Integration | Native via Labels | Native via Labels | Nein | Nein |
| Konfiguration | YAML-Dateien | Web-UI + JSON | YAML oder Web-UI | Web-UI + DB |
| Bookmarks | Ja | Ja | Ja | Ja |
| Suchleiste | Ja, mit Providern | Ja | Ja | Nein |
| System-Widgets | CPU, RAM, Disk, Temp | CPU, RAM, Disk | Nein | Nein |
| Custom CSS | Ja | Ja | Ja | Begrenzt |
| Themes | Dark/Light + Colors | Dark/Light + Custom | 20+ Themes | Dark/Light |
| Kubernetes | Ja | Nein | Nein | Nein |
| Performance | Exzellent (Next.js) | Sehr gut (React) | Gut (Vue) | Gut (PHP) |
| Mobile-UI | Responsive | Responsive | Responsive | Responsive |
| Auth | Reverse-Proxy | Integriert | Integriert | Integriert |
| Datenbank | Keine | Keine | Keine | SQLite |
| Aktive Entwicklung | Sehr aktiv | Sehr aktiv | Aktiv | Wenig aktiv |
| Community | Groß | Wachsend | Groß | Mittel |
Zusammenfassung:
-
Homepage: Beste Wahl für Live-Monitoring und Docker-Integration. YAML-Config perfekt für Git-Versioning. Schnellste Performance.
-
Homarr: Ähnlich Homepage, aber mit Web-UI-Config. Gut für User, die YAML scheuen. Weniger Widgets als Homepage.
-
Dashy: Feature-reich, viele Themes, aber keine echten Service-Widgets. Gut für reine Bookmark-Dashboards.
-
Heimdall: Simpel, solide, aber wenig aktive Entwicklung. Keine Widget-Integration. Eher Legacy.
Meine Empfehlung: Homepage für Power-User mit vielen Services. Homarr für Einsteiger mit Web-UI-Präferenz. Dashy für Design-Fokus ohne Monitoring-Bedarf.
Widgets: Die Killer-Features
Der wahre Mehrwert von Homepage liegt in den Service-Widgets. Hier eine Auswahl der wichtigsten Integrations-Typen:
Infrastruktur
Proxmox: Zeigt Cluster-Status, VM/CT-Anzahl, CPU/RAM-Auslastung, Node-Status.
1
2
3
4
5
6
widget:
type: proxmox
url: https://192.168.60.15:8006
username: monitoring@pve
password: monitoring-password
node: gandalf
Pi-hole: DNS-Queries, Blocked Percentage, Ads Blocked Today.
1
2
3
4
widget:
type: pihole
url: http://192.168.2.20
key: pihole-api-key
Nginx Proxy Manager: Proxy Hosts, SSL Certificates, Redirections.
1
2
3
4
5
widget:
type: npm
url: http://192.168.60.65:81
username: [email protected]
password: npm-password
Portainer: Containers Running, Images, Volumes, Networks.
1
2
3
4
5
widget:
type: portainer
url: http://192.168.60.100:9000
env: 1
key: portainer-api-key
Media
Jellyfin: Users, Now Playing, Library Stats.
1
2
3
4
5
6
widget:
type: jellyfin
url: http://192.168.60.80:8096
key: jellyfin-api-key
enableBlocks: true
enableNowPlaying: true
Sonarr/Radarr: Queue, Wanted, Calendar, Missing.
1
2
3
4
5
widget:
type: sonarr
url: http://192.168.60.85:8989
key: sonarr-api-key
enableQueue: true
Plex: Now Playing, Streams, Bandwidth.
1
2
3
4
widget:
type: plex
url: http://192.168.60.75:32400
key: plex-token
Monitoring
Prometheus: Query Results als Metric.
1
2
3
4
widget:
type: prometheus
url: http://192.168.60.90:9090
query: up{job="node"}
Grafana: Dashboards, Alerts.
1
2
3
4
5
widget:
type: grafana
url: http://192.168.60.91:3000
username: admin
password: grafana-password
Uptime Kuma: Monitor-Status, Uptime-Percentage.
1
2
3
4
widget:
type: uptimekuma
url: http://192.168.60.92:3001
slug: uptime-slug
Development
GitLab: Projects, Issues, Merge Requests.
1
2
3
4
widget:
type: gitlab
url: https://gitlab.newsxc.net
key: gitlab-api-key
GitHub: Repositories, Stars, Issues, PRs.
1
2
3
4
widget:
type: github
username: your-username
key: github-token
Jenkins: Build Status, Queue.
1
2
3
4
5
widget:
type: jenkins
url: http://192.168.60.95:8080
username: admin
password: jenkins-password
Die vollständige Widget-Liste findest du in der Homepage-Dokumentation. Neue Widgets werden regelmäßig hinzugefügt. Check GitHub für aktuelle PRs.
Custom API Widgets
Dein Service hat kein fertiges Widget? Kein Problem. Homepage unterstützt Custom-API-Widgets mit JSONPath-Mapping:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- Custom Service:
icon: custom.png
href: http://192.168.60.200:8080
description: Mein Custom-Service
widget:
type: customapi
url: http://192.168.60.200:8080/api/stats
mappings:
- field: users
label: Users
format: number
- field: requests
label: Requests
format: number
- field: uptime
label: Uptime
format: text
Das Widget holt JSON von der URL und mappt Felder via JSONPath. format definiert die Darstellung (number, text, bytes, percent, date).
Für komplexere APIs mit Auth:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
widget:
type: customapi
url: http://api.example.com/metrics
method: POST
headers:
Authorization: Bearer your-token-here
Content-Type: application/json
body: '{"query": "stats"}'
mappings:
- field:
data: cpu_usage
label: CPU
format: percent
- field:
data: memory_used
label: RAM
format: bytes
Custom-API-Widgets sind mächtig, erfordern aber Kenntnis der Service-API. Tools wie
curlundjqhelfen beim Testen der API-Antworten.
Tipps für die Praxis
Nach Monaten Homepage-Nutzung im echten Homelab haben sich diese Best Practices herauskristallisiert:
Git-Versionierung
Homepage-Configs sind YAML-Dateien. Perfekt für Git:
1
2
3
4
5
6
cd homepage
git init
git add .
git commit -m "Initial homepage config"
git remote add origin https://gitlab.newsxc.net/homelab/homepage.git
git push -u origin main
Vorteile: Änderungshistorie, Rollback bei Fehlern, Sync zwischen Hosts.
Erstelle ein
.gitignorefür sensitive Daten:
1 2 3 custom.css.bak *.log .env
Secrets via Environment Variables
API-Keys nicht direkt in YAML-Files. Nutze Environment-Variables:
1
2
3
4
widget:
type: sonarr
url: http://192.168.60.85:8989
key:
Im Docker-Compose:
1
2
environment:
- HOMEPAGE_VAR_SONARR_KEY=actual-api-key-here
Oder via .env-File:
1
2
HOMEPAGE_VAR_SONARR_KEY=actual-api-key-here
HOMEPAGE_VAR_RADARR_KEY=another-key
Homepage ersetzt `` automatisch.
Docker-Socket-Proxy
Direkter Socket-Zugriff ist ein Sicherheitsrisiko. Nutze Tecnativa Docker-Socket-Proxy:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
docker-proxy:
image: tecnativa/docker-socket-proxy
container_name: docker-proxy
environment:
- CONTAINERS=1
- POST=0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 2375:2375
restart: unless-stopped
homepage:
image: ghcr.io/gethomepage/homepage:latest
depends_on:
- docker-proxy
environment:
- DOCKER_HOST=docker-proxy:2375
Der Proxy limitiert API-Zugriff (read-only, nur Container-Info).
Icons: Dashboard-Icons-Repository
Homepage nutzt das walkxcode/dashboard-icons Repository. Über 1000 Service-Icons verfügbar.
Icon-Verwendung:
1
2
3
4
icon: sonarr.png # Aus Dashboard-Icons
icon: mdi-server # Material Design Icons
icon: https://example.com/icon.png # Custom-URL
icon: /images/custom.png # Lokales File in public/images/
Für Custom-Icons: Lege sie in homepage/public/images/ ab.
Responsive Design
Homepage ist mobile-responsive, aber für sehr viele Services wird’s eng. Tipps:
- Nutze Tab-Layout für viele Gruppen
- Reduziere Spaltenanzahl auf Mobile (Homepage passt automatisch an)
- Verstecke weniger wichtige Services via
hideHeader: true
Performance-Optimierung
Bei vielen Widgets (30+) kann Homepage langsam werden:
- Widget-Caching: Setze
cachein Widget-Configs (in Sekunden)1 2 3 4 5
widget: type: sonarr url: http://... key: ... cache: 60
- Disable Unused Widgets: Weniger ist mehr
- External Monitoring: Für Heavy-Metrics nutze Grafana-Embed statt Homepage-Widgets
Backup
Homepage-Config ist klein. Tägliches Backup:
1
2
3
#!/bin/bash
tar -czf homepage-backup-$(date +%Y%m%d).tar.gz -C /path/to/homepage .
# Upload zu NAS, S3, etc.
Oder als Cronjob im Container:
1
2
3
4
5
6
7
services:
homepage:
# ...
volumes:
- ./homepage:/app/config
- ./backups:/backups
entrypoint: /bin/sh -c "crond && node server.js"
Backups sollten API-Keys nicht im Klartext enthalten. Nutze verschlüsselte Backups (z.B.
gpg,age) oder separates Secrets-Management (Vault, Bitwarden).
Reverse-Proxy und SSL
Homepage läuft per default auf HTTP Port 3000. Für Produktiv-Einsatz brauchst du SSL via Reverse-Proxy.
Nginx Proxy Manager
NPM ist die einfachste Lösung. Erstelle einen Proxy-Host:
- Domain:
homepage.newsxc.net - Scheme:
http - Forward Hostname:
192.168.60.100(Homepage-Host) - Forward Port:
3000 - SSL: Let’s Encrypt-Zertifikat
- Force SSL: Ja
- Websockets: Ja (für Live-Updates)
Traefik
Für Traefik-User via Docker-Labels:
1
2
3
4
5
6
7
8
9
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.homepage.rule=Host(`homepage.newsxc.net`)"
- "traefik.http.routers.homepage.entrypoints=websecure"
- "traefik.http.routers.homepage.tls.certresolver=letsencrypt"
- "traefik.http.services.homepage.loadbalancer.server.port=3000"
Authelia / Authentik
Homepage hat keine integrierte Auth. Für Multi-User-Szenarien nutze einen Auth-Proxy:
- Authelia: OIDC/LDAP-basierte Auth
- Authentik: Moderne SSO-Lösung
- OAuth2-Proxy: Simpler OAuth2-Proxy
Config-Beispiel für Authelia:
1
2
# In NPM: Access List mit Authelia-Integration
# Oder in Traefik: Middleware für Authelia
Für Homelab-internen Zugriff ist Auth optional. Für Internet-Exposition (via Cloudflare Tunnel, VPN) unbedingt Auth aktivieren.
Troubleshooting
Häufige Probleme und Lösungen:
Widget zeigt “API Error”
Ursachen:
- Falsche URL/Credentials
- API nicht erreichbar (Firewall, Network)
- Service unterstützt API nicht / API deaktiviert
Debug:
1
2
# Test API-Zugriff vom Homepage-Container
docker exec -it homepage curl http://sonarr:8989/api/v3/system/status?apikey=KEY
Lösung: Check URL, Key, Network-Connectivity. Viele Services haben API-Einstellungen, die aktiviert werden müssen.
Docker-Container werden nicht erkannt
Ursachen:
- Socket nicht gemountet
- Falsche
docker.yaml-Config - Labels fehlen
Debug:
1
2
3
4
5
# Check Socket-Mount
docker exec -it homepage ls -la /var/run/docker.sock
# Check Docker-API-Zugriff
docker exec -it homepage curl --unix-socket /var/run/docker.sock http://localhost/containers/json
Lösung: Stelle sicher, dass /var/run/docker.sock gemountet ist und docker.yaml korrekt konfiguriert ist.
Custom CSS wird nicht geladen
Ursachen:
- Datei nicht im richtigen Pfad
- Syntax-Fehler im CSS
- Browser-Cache
Lösung:
- CSS muss in
/app/config/custom.cssliegen (Volume-Path:./homepage/custom.css) - Check CSS-Syntax mit Validator
- Hard-Refresh im Browser (Ctrl+F5)
Performance-Probleme
Ursachen:
- Zu viele Widgets ohne Caching
- Langsame Service-APIs
- Ressourcen-Mangel (CPU/RAM)
Lösung:
- Aktiviere Widget-Caching
- Reduziere Widget-Anzahl
- Upgrade Homepage-Container-Ressourcen
- Check Service-API-Response-Times
YAML-Config-Fehler
Ursachen:
- Syntax-Fehler (Einrückung, Quotes)
- Ungültige Widget-Parameter
Debug:
1
2
3
4
5
# YAML-Validierung
docker logs homepage | grep -i error
# Online-YAML-Validator
cat services.yaml | pbcopy # und paste in yamllint.com
Lösung: YAML ist Whitespace-sensitiv. Nutze 2 Spaces für Einrückung, keine Tabs. Achte auf korrekte Quotes bei Sonderzeichen.
Nutze einen Editor mit YAML-Support (VS Code + YAML-Extension, Neovim + yaml-language-server). Syntax-Highlighting und Validation sparen Zeit.
Advanced: Kubernetes-Integration
Homepage unterstützt Kubernetes-Cluster. Hier eine Kurzübersicht:
Installation via Helm
1
2
helm repo add jameswynn https://jameswynn.github.io/helm-charts
helm install homepage jameswynn/homepage
Ingress
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homepage
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
rules:
- host: homepage.k8s.newsxc.net
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: homepage
port:
number: 3000
tls:
- hosts:
- homepage.k8s.newsxc.net
secretName: homepage-tls
Service-Discovery
Homepage kann K8s-Services via API entdecken. Nutze Annotations ähnlich Docker-Labels:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Service
metadata:
name: my-app
annotations:
homepage.group: "Applications"
homepage.name: "My App"
homepage.icon: "my-app.png"
homepage.href: "https://my-app.k8s.newsxc.net"
homepage.description: "My awesome app"
homepage.widget.type: "kubernetes"
homepage.widget.namespace: "default"
spec:
selector:
app: my-app
ports:
- port: 80
K8s-Integration ist fortgeschritten und braucht RBAC-Config. Für Homelab-Zwecke ist Docker-Integration meist ausreichend. K8s ist Overkill für <100 Services.
Fazit
Homepage ist das beste Dashboard für moderne Homelabs. Die Kombination aus über 100 Service-Widgets, Docker-Integration, YAML-Config und Performance macht es zur ersten Wahl. Egal ob du 5 oder 50 Services laufen hast: Homepage gibt dir den Überblick, den du brauchst.
Die wichtigsten Vorteile noch mal:
- Live-Monitoring: Echte API-Integration, nicht nur Bookmarks
- Docker-Native: Auto-Discovery via Labels spart Config-Zeit
- Git-Friendly: YAML-Configs perfekt für Versioning
- Performance: Next.js macht es blitzschnell
- Customizable: Themes, Custom CSS, Layouts nach Wunsch
- Community: Aktive Entwicklung, neue Widgets regelmäßig
Einziger Nachteil: Die initiale Config kann bei vielen Services aufwändig sein. Aber dank Docker-Labels und Git-Versionierung ist das einmalige Investment schnell amortisiert.
Wenn du dein Homelab-Dashboard upgraden willst: Homepage ist die Antwort. Probier es aus, du wirst nicht zurückwechseln.
Start small: Installiere Homepage, konfiguriere deine 5-10 wichtigsten Services. Erweitere iterativ. Nach einer Woche willst du’s nicht mehr missen.
Ressourcen
Offizielle Links
- Homepage GitHub: github.com/gethomepage/homepage
- Homepage Dokumentation: gethomepage.dev
- Widget-Liste: gethomepage.dev/widgets
- Docker Hub: ghcr.io/gethomepage/homepage
Icon-Ressourcen
- Dashboard Icons: github.com/walkxcode/dashboard-icons
- Material Design Icons: materialdesignicons.com
- Simple Icons: simpleicons.org
Community
- r/selfhosted: reddit.com/r/selfhosted
- Homepage Discord: Link im GitHub-Repo
- GitHub Discussions: Issues & Feature-Requests
Alternativen zum Vergleich
- Homarr: homarr.dev
- Dashy: dashy.to
- Heimdall: heimdall.site
- Organizr: organizr.app
Security-Tools
- Docker Socket Proxy: github.com/Tecnativa/docker-socket-proxy
- Authelia: authelia.com
- Authentik: goauthentik.io
Background Images
- Unsplash: Suche nach “server room”, “data center”, “circuit board”
- Pexels: Kostenlose High-Res-Bilder
- Wallhaven: Community-Wallpapers
Happy Dashboarding!