Heim Hosting mit Traefik, Grafana und Prometheus: Der perfekte Einstieg mit Docker Compose
Im Zeitalter der Digitalisierung ist der Wunsch nach Unabhängigkeit von Cloud-Anbietern für viele Technikbegeisterte groß.
Warum also nicht die wichtigsten Tools für Monitoring, Tracing und Service-Discovery selbst hosten?
Und das ganz bequem von zu Hause aus?
In diesem Blogartikel zeige ich, wie man mit einem einzigen Docker compose-File einen leistungsfähigen Home-Hosting-Stack aus Traefik, Prometheus, Grafana, Jaeger und cAdvisor aufsetzt.
Was ist Home-Hosting?
Beim Home-Hosting betreibt man eigene Serverdienste im privaten Netzwerk, um zum Beispiel Webseiten, Monitoring oder interne Dashboards unabhängig von externen Cloud-Angeboten zu betreiben.
Das gibt volle Kontrolle über Daten, Sicherheit und Infrastruktur und macht Spaß beim Lernen!
Unsere Bausteine im Überblick
- Traefik: Moderner Reverse Proxy und Load Balancer mit automatischer Let's Encrypt SSL Verwaltung.
- Prometheus: Leistungsstarkes Monitoring- und Alarming-System für Metriken.
- Grafana: Visualization-Tool für Metriken und Logs.
- Jaeger: Open-Source Distributed Tracing für Microservices.
- cAdvisor: Ressourcennutzung und Performance-Analyse für Container.
Der Compose Stack im Detail
1. Traefik
Traefik lauscht auf HTTP (80) und HTTPS (443), kümmert sich um SSL mit automatischen Let's Encrypt Zertifikaten und bietet ein sicheres Dashboard.
Durch die Definition einer entsprechenden middleware lässt sich der Zugriff auf das Dashboard auf einen lokalen IP-Bereich einschränken.
Es integriert sich automatisch mit den anderen Docker-Services.
traefik:
image: traefik:v3.6.2
container_name: traefik
command:
- "--log.level=INFO"
- "--accesslog"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--providers.docker"
- "--providers.docker.exposedByDefault=false"
- "--api.dashboard=true"
- "--api.insecure=false"
- "--certificatesresolvers.leresolver.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.leresolver.acme.email=${DOMAIN_EMAIL}"
- "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.leresolver.acme.httpchallenge=true"
- "--certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web"
#Prometheus Metrics
- "--metrics.prometheus=true"
- "--metrics.prometheus.addEntryPointsLabels=true"
- "--metrics.prometheus.addServicesLabels=true"
#Jaeger tracing
- "--tracing.otlp=true"
- "--tracing.otlp.grpc.endpoint=jaeger:4317"
- "--tracing.sampleRate=1.0"
ports:
- "80:80"
- "443:443"
volumes:
- "./traefik/acme.json:/letsencrypt/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock"
labels:
- "traefik.enable=true"
# Dashboard Route
- "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.tls.certresolver=leresolver"
# Restrict dashboard to local IPs
- "traefik.http.routers.traefik.middlewares=local-ipallowlist"
- "traefik.http.middlewares.local-ipallowlist.ipallowlist.sourcerange=192.168.0.0/16"
restart: unless-stopped
networks:
- servicenet
2. Prometheus
Prometheus sammelt Metriken von anderen Diensten (z.B. Traefik oder cAdvisor) und stellt sie unter dem `prometheus.${DOMAIN}/metrics` Endpunkt bereit.
Über das Traefik-Label wird Prometheus automatisch sicher erreichbar, das Traefik Compose Label sorgt für die Weiterleitung mit Zertifikaten.
prometheus:
image: prom/prometheus:latest
container_name: prometheus
command:
- "--web.enable-lifecycle"
- "--web.enable-admin-api"
- "--config.file=/etc/prometheus/prometheus.yml"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
labels:
- "traefik.enable=true"
- "traefik.http.routers.prometheus.rule=Host(`prometheus.${DOMAIN}`)"
- "traefik.http.routers.prometheus.entrypoints=websecure"
- "traefik.http.routers.prometheus.tls.certresolver=leresolver"
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
- "traefik.http.routers.prometheus.middlewares=local-ipallowlist"
restart: unless-stopped
networks:
- servicenet
3. Grafana
Grafana visualisiert die von Prometheus gesammelten Daten als Dashboards unter `grafana.${DOMAIN}`. Die Zugangsdaten werden über Umgebungsvariablen gesetzt.
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMINUSER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
labels:
- "traefik.enable=true"
- "traefik.http.routers.grafana.rule=Host(`grafana.${DOMAIN}`)"
- "traefik.http.routers.grafana.entrypoints=websecure"
- "traefik.http.routers.grafana.tls.certresolver=leresolver"
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
- "traefik.http.routers.grafana.middlewares=local-ipallowlist"
restart: unless-stopped
networks:
- servicenet
4. Jaeger
Jaeger dient dem verteilten Tracing und kann insbesondere mit Traefik zur detaillierteren Analyse von Anfragen genutzt werden.
jaeger:
image: jaegertracing/all-in-one:latest
container_name: jaeger
labels:
- "traefik.enable=true"
- "traefik.http.routers.jaeger.rule=Host(`jaeger.${DOMAIN}`)"
- "traefik.http.routers.jaeger.entrypoints=websecure"
- "traefik.http.routers.jaeger.tls.certresolver=leresolver"
- "traefik.http.services.jaeger.loadbalancer.server.port=16686"
- "traefik.http.routers.jaeger.middlewares=local-ipallowlist"
networks:
- servicenet
5 cAdvisor
cAdvisor schreibt Container- und Systemmetriken für Prometheus und ist damit das Auge für die Hardware-Ressourcenüberwachung.
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- "127.0.0.1:8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: unless-stopped
networks:
- servicenet
Schritt-für-Schritt-Anleitung
Vorbereitung
- Domain anpassen:
Setze eine Variable `DOMAIN` mit deiner gewünschten Domain oder trage sie im compose file direkt ein.
Beispiel:
export DOMAIN=meine-home-domain.de - Traefik vorbereiten:
Erstelle das Verzeichnis und die Datei für die ACME-Zertifikate einmalig:
mkdir -p traefik touch traefik/acme.json chmod 600 traefik/acme.json - Prometheus konfigurieren
Konfigurations Datei für Prometheus:
Prometheus Config File here!
Stack starten
docker compose up -d
Übersicht und Zugriffe auf Dienste
| Service/Dashboard | URL | Hinweis | |
| Traefik | https://traefik.${DOMAIN} | nur über LAN (192.168..0/16) erreichbar | |
| Prometheus | https://prometheus.${DOMAIN} | via Traefik LAN beschränkt | |
| Grafana | https://grafana.${DOMAIN} | via Traefik LAN beschränkt | |
| Jaeger | https://jaeger.${DOMAIN} | via Traefik LAN beschränkt | |
| cAdvisor | http://localhost:8080 | Nur von der Maschine selbst aus erreichbar |
Fazit
Mit minimalem Aufwand entsteht so eine flexible Home-Hosting-Plattform für Überwachung, Visualisierung und modernes Service-Management.
Traefik übernimmt dabei fast die gesamte Reverse Proxy Magie, während Prometheus und Grafana wertvolle Einblicke in dein System bieten.
Diese Compose-Datei eignet sich hervorragend als Ausgangsbasis.
Mit Hilfe von Traefiks automatischem Discovery feature lassen sich weitere Anwendungen ganz einfach über Docker Labels integrieren und verwalten.
Probiere es aus und bringe Home-Hosting auf das nächste Level!