Homer Dashboard selbst hosten

In der heutigen Zeit, in der Homelab-Enthusiasten und IT-Profis zunehmend Wert auf Datenschutz und Kontrolle über ihre digitalen Dienste legen, wird das Selbsthosten von Anwendungen immer beliebter. Eine der praktischsten und elegantesten Lösungen für die Organisation und den Zugriff auf selbstgehostete Dienste ist Homer – ein schlankes, statisches Dashboard, das speziell für Homelabs entwickelt wurde.

Was ist Homer?

Homer ist ein Open-Source-Dashboard, das als zentrale Anlaufstelle für alle Ihre selbstgehosteten Dienste fungiert. Im Gegensatz zu dynamischen Dashboard-Lösungen ist Homer komplett statisch und benötigt keine Datenbank oder komplexe Backend-Infrastruktur. Es wird vollständig über YAML-Konfigurationsdateien gesteuert und bietet trotz seiner Einfachheit eine Fülle von Funktionen.

Hauptmerkmale von Homer:

  • Vollständig statisch: Keine Datenbank oder Server-Backend erforderlich
  • Konfiguration per YAML: Einfache, menschenlesbare Konfiguration
  • Responsive Design: Optimiert für Desktop, Tablet und Mobilgeräte
  • Themes und Anpassungsmöglichkeiten: Verschiedene Farbschemata und Layout-Optionen
  • Service-Integration: Direkte Statusanzeige für viele populäre Dienste
  • Schnelle Suche: Integrierte Suchfunktion für alle konfigurierten Services
  • Icon-Unterstützung: Font Awesome Icons und eigene Grafiken
  • Mehrsprachigkeit: Unterstützung für verschiedene Sprachen

Systemvoraussetzungen

Homer ist bewusst ressourcenschonend konzipiert. Die minimalen Anforderungen sind:

  • RAM: 128 MB (empfohlen: 512 MB)
  • CPU: Jeder moderne Prozessor, auch ARM-basierte SBCs wie Raspberry Pi
  • Speicher: 50 MB für die Anwendung selbst
  • Betriebssystem: Linux, Windows, macOS oder jedes System mit Docker-Unterstützung

Installation mit Docker

Schnellstart mit Docker

Die einfachste Methode, Homer zu installieren, ist über Docker:

# Erstellen Sie ein Verzeichnis für die Konfiguration
mkdir ~/homer
cd ~/homer

# Laden Sie die Standard-Konfigurationsdatei herunter
wget https://raw.githubusercontent.com/bastienwirtz/homer/main/public/assets/config.yml.dist -O config.yml

# Starten Sie Homer
docker run -d \
  -p 8080:8080 \
  -v $PWD/config.yml:/www/assets/config.yml \
  --name homer \
  b4bz/homer:latest

Docker Compose Setup (empfohlen)

Für eine produktivere Umgebung erstellen Sie eine docker-compose.yml:

version: "3.8"
services:
  homer:
    image: b4bz/homer:latest
    container_name: homer
    volumes:
      - ./config.yml:/www/assets/config.yml:ro
      - ./icons:/www/assets/icons:ro
    ports:
      - "8080:8080"
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin

Starten Sie das Dashboard mit:

docker-compose up -d

Konfiguration

Grundkonfiguration

Die gesamte Konfiguration von Homer erfolgt über eine YAML-Datei. Hier ist eine Beispielkonfiguration:

---
# Grundeinstellungen
title: "Mein Homelab Dashboard"
subtitle: "Willkommen in meinem digitalen Zuhause"
logo: "assets/icons/home.png"
icon: "fas fa-home"

# Kopfzeile konfigurieren
header: true
footer: '<p>Erstellt mit <a href="https://github.com/bastienwirtz/homer">Homer</a></p>'

# Theme auswählen
theme: default
colors:
  light:
    highlight-primary: "#3367d6"
    highlight-secondary: "#4285f4"
    highlight-hover: "#5a95f5"
    background: "#f5f5f5"
    card-background: "#ffffff"
    text: "#363636"
    text-header: "#ffffff"
    text-title: "#303030"
    text-subtitle: "#424242"
    card-shadow: rgba(0, 0, 0, 0.1)
  dark:
    highlight-primary: "#3367d6"
    highlight-secondary: "#4285f4"
    highlight-hover: "#5a95f5"
    background: "#131313"
    card-background: "#2b2b2b"
    text: "#eaeaea"
    text-header: "#ffffff"
    text-title: "#fafafa"
    text-subtitle: "#f5f5f5"
    card-shadow: rgba(0, 0, 0, 0.4)

# Navigationswerkzeuge
links:
  - name: "GitHub"
    icon: "fab fa-github"
    url: "https://github.com/"
    target: "_blank"
  - name: "Dokumentation"
    icon: "fas fa-book"
    url: "https://homer-demo.netlify.app/"

# Services-Konfiguration
services:
  - name: "Media Server"
    icon: "fas fa-play"
    items:
      - name: "Plex"
        logo: "assets/icons/plex.png"
        subtitle: "Media Streaming Server"
        url: "https://plex.example.com"
        type: "Plex"
        apikey: "your-plex-token"
        libraryType: "movie"
        
      - name: "Jellyfin"
        logo: "assets/icons/jellyfin.png"
        subtitle: "Open Source Media Server"
        url: "https://jellyfin.example.com"
        type: "Jellyfin"
        apikey: "your-jellyfin-api-key"

  - name: "Download & Automation"
    icon: "fas fa-download"
    items:
      - name: "Sonarr"
        logo: "assets/icons/sonarr.png"
        subtitle: "TV Series Management"
        url: "https://sonarr.example.com"
        type: "Sonarr"
        apikey: "your-sonarr-api-key"
        
      - name: "Radarr"
        logo: "assets/icons/radarr.png"
        subtitle: "Movie Management"
        url: "https://radarr.example.com"
        type: "Radarr"
        apikey: "your-radarr-api-key"

  - name: "Netzwerk & Infrastruktur"
    icon: "fas fa-network-wired"
    items:
      - name: "Pi-hole"
        logo: "assets/icons/pihole.png"
        subtitle: "DNS Ad Blocker"
        url: "https://pihole.example.com"
        type: "PiHole"
        
      - name: "Portainer"
        logo: "assets/icons/portainer.png"
        subtitle: "Docker Management"
        url: "https://portainer.example.com"
        type: "Portainer"
        apikey: "your-portainer-api-key"

Service-spezifische Integrationen

Homer unterstützt direkte API-Integrationen für viele populäre Services, die Statusinformationen und zusätzliche Details anzeigen können:

Plex Integration

- name: "Plex"
  type: "Plex"
  url: "https://plex.example.com"
  apikey: "your-plex-token"
  libraryType: "movie" # oder "tv", "music"

Sonarr/Radarr Integration

- name: "Sonarr"
  type: "Sonarr"
  url: "https://sonarr.example.com"
  apikey: "your-api-key"

Pi-hole Integration

- name: "Pi-hole"
  type: "PiHole"
  url: "https://pihole.example.com"

Erweiterte Konfigurationsoptionen

Custom CSS

Erstellen Sie eine custom.css Datei für individuelle Styling-Anpassungen:

/* Custom Styles für Homer */
.title {
  font-family: 'Roboto', sans-serif;
  font-weight: 300;
}

.card {
  border-radius: 10px;
  transition: transform 0.2s ease-in-out;
}

.card:hover {
  transform: translateY(-5px);
  box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

Mehrere Konfigurationsdateien

Für komplexe Setups können Sie mehrere Konfigurationsdateien verwenden:

# Hauptkonfiguration
config.yml

# Service-spezifische Konfigurationen
configs/
  ├── media-services.yml
  ├── network-services.yml
  └── development-services.yml

Sicherheit und Best Practices

Reverse Proxy Setup

Für den produktiven Einsatz sollten Sie Homer hinter einem Reverse Proxy wie Nginx oder Traefik betreiben:

Nginx Konfiguration

server {
    listen 80;
    server_name dashboard.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name dashboard.example.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Traefik Labels (Docker Compose)

services:
  homer:
    image: b4bz/homer:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.homer.rule=Host(`dashboard.example.com`)"
      - "traefik.http.routers.homer.tls.certresolver=letsencrypt"
      - "traefik.http.services.homer.loadbalancer.server.port=8080"

Authentifizierung

Da Homer selbst keine Authentifizierung bietet, sollten Sie eine der folgenden Lösungen implementieren:

  1. Authelia: Open-Source Authentifizierungsserver
  2. OAuth2 Proxy: OAuth2/OIDC Authentifizierung
  3. Basic Auth über Nginx: Einfache HTTP Basic Authentication
  4. VPN: Zugriff nur über VPN-Verbindung

Backup-Strategie

Erstellen Sie regelmäßige Backups Ihrer Konfiguration:

#!/bin/bash
# Homer Backup Script

BACKUP_DIR="/backups/homer"
DATE=$(date +%Y%m%d_%H%M%S)
HOMER_DIR="/opt/homer"

mkdir -p "$BACKUP_DIR"

# Konfigurationsdateien sichern
tar -czf "$BACKUP_DIR/homer_config_$DATE.tar.gz" \
    -C "$HOMER_DIR" \
    config.yml \
    assets/ \
    icons/

# Alte Backups löschen (älter als 30 Tage)
find "$BACKUP_DIR" -name "homer_config_*.tar.gz" -mtime +30 -delete

echo "Homer Backup erstellt: homer_config_$DATE.tar.gz"

Monitoring und Wartung

Log-Management

# Docker Logs anzeigen
docker logs homer

# Logs in Echtzeit verfolgen
docker logs -f homer

# Logs rotieren
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 b4bz/homer

Performance-Optimierung

# Docker Compose mit Resource-Limits
services:
  homer:
    image: b4bz/homer:latest
    deploy:
      resources:
        limits:
          memory: 128M
          cpus: '0.25'
        reservations:
          memory: 64M
          cpus: '0.1'

Troubleshooting

Häufige Probleme und Lösungen

Problem: Konfigurationsdatei wird nicht geladen

# Überprüfen Sie die Dateiberechtigungen
ls -la config.yml

# Korrigieren Sie die Berechtigungen
chmod 644 config.yml
chown 1000:1000 config.yml

Problem: Icons werden nicht angezeigt

# Überprüfen Sie den Icons-Pfad im Volume-Mapping
docker run -v $PWD/icons:/www/assets/icons:ro b4bz/homer

Problem: API-Integrationen funktionieren nicht

# Testen Sie die API-Verbindung
curl -H "X-Api-Key: your-api-key" https://sonarr.example.com/api/v3/system/status

Debug-Modus

# Homer im Debug-Modus starten
docker run -e DEBUG=true b4bz/homer

Erweiterte Anpassungen

Custom Service Types

Erstellen Sie eigene Service-Typen für nicht unterstützte Anwendungen:

- name: "Custom Service"
  logo: "assets/icons/custom.png"
  subtitle: "Mein eigener Service"
  url: "https://custom.example.com"
  endpoint: "https://custom.example.com/api/health"
  tag: "custom"
  keywords: "monitoring health"

Automatisierte Konfiguration

#!/bin/bash
# Script zur automatischen Generierung der Homer-Konfiguration

SERVICES_FILE="services.json"
CONFIG_FILE="config.yml"

# Beginnen Sie mit der Basis-Konfiguration
cat > $CONFIG_FILE << 'EOF'
---
title: "Homelab Dashboard"
subtitle: "Automatisch generiert"
theme: default

services:
EOF

# Fügen Sie Services aus JSON hinzu
jq -r '.services[] | "  - name: \"\(.name)\"\n    logo: \"\(.logo)\"\n    url: \"\(.url)\"\n    type: \"\(.type // "Generic")\""' $SERVICES_FILE >> $CONFIG_FILE

Migration und Updates

Update-Prozess

# Backup erstellen
docker-compose exec homer tar -czf /tmp/homer-backup.tar.gz /www/assets/

# Container stoppen
docker-compose down

# Neues Image pullen
docker-compose pull

# Container neu starten
docker-compose up -d

# Logs überprüfen
docker-compose logs -f homer

Migration von anderen Dashboard-Lösungen

Wenn Sie von anderen Dashboard-Lösungen wie Heimdall oder Organizr migrieren möchten, können Sie Migrations-Scripts verwenden:

#!/usr/bin/env python3
# Heimdall zu Homer Migration Script

import json
import yaml

def convert_heimdall_to_homer(heimdall_config):
    homer_config = {
        'title': 'Migrated from Heimdall',
        'subtitle': 'Dashboard Migration',
        'theme': 'default',
        'services': []
    }
    
    for category in heimdall_config.get('categories', []):
        service_group = {
            'name': category['name'],
            'icon': 'fas fa-folder',
            'items': []
        }
        
        for app in category.get('apps', []):
            item = {
                'name': app['name'],
                'url': app['url'],
                'logo': app.get('icon', 'fas fa-globe'),
                'subtitle': app.get('description', '')
            }
            service_group['items'].append(item)
        
        homer_config['services'].append(service_group)
    
    return homer_config

# Verwendung des Scripts
with open('heimdall_export.json', 'r') as f:
    heimdall_data = json.load(f)

homer_data = convert_heimdall_to_homer(heimdall_data)

with open('config.yml', 'w') as f:
    yaml.dump(homer_data, f, default_flow_style=False, allow_unicode=True)

Fazit

Homer bietet eine elegante, minimalistische Lösung für die Organisation und den Zugriff auf selbstgehostete Dienste. Seine statische Natur macht es nicht nur ressourcenschonend, sondern auch äußerst zuverlässig und sicher. Mit der flexiblen YAML-Konfiguration, den vielfältigen Anpassungsmöglichkeiten und der breiten Service-Integration ist Homer eine ausgezeichnete Wahl für jeden Homelab-Enthusiasten.

Die Installation und Konfiguration sind dank Docker und der gut dokumentierten YAML-Syntax auch für Einsteiger gut machbar, während fortgeschrittene Benutzer von den umfangreichen Anpassungsmöglichkeiten und API-Integrationen profitieren können.

Durch die Kombination mit einem Reverse Proxy, ordentlicher Authentifizierung und regelmäßigen Backups erhalten Sie ein professionelles, selbstgehostetes Dashboard, das Ihnen jahrelang treue Dienste leisten wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert