Homeserver 2025: Raspberry Pi mit AdGuard und Traefik

Schritt-für-Schritt den Raspberry Pi als Proxy Manager und Adblocker einrichten mit Docker, AdGuard, Traefik und Heimdall.

Homeserver 2025: Raspberry Pi mit AdGuard und Traefik-heroimage

Im Jahr 2021 hatte ich einen Blogpost zur Einrichtung eines Raspberry Pi als Heimserver mit Proxy Manager und Werbeblocker veröffentlicht. Seitdem hat sich einiges verändert. In diesem aktualisierten Beitrag zeige ich, wie du im Jahr 2025 einen effizienten Heimserver auf Basis eines Raspberry Pi einrichtest.

Möchtest du lieber ein Video sehen, dann schau dir dieses YouTube-Video an.

Voraussetzungen und Hardware-Empfehlungen

Für einen zuverlässigen Heimserver benötigst du nicht zwingend den neuesten Raspberry Pi. Als Minimum empfehle ich einen Raspberry Pi 4 mit mindestens 4GB RAM für bessere Performance bei mehreren parallelen Diensten. Grundsätzlich kann auch ein komplett anderes Gerät mit Debian als Betriebssystem genutzt werden.

SD-Karten sind definitiv nicht für den Dauerbetrieb als Systemspeicher geeignet. Sie haben begrenzte Schreib-/Lesezyklen und versagen früher oder später bei intensiver Nutzung. Stattdessen empfehle ich dringend eine externe SSD, die via USB 3.0 angeschlossen wird. Die Vorteile sind deutlich: höhere Geschwindigkeit, längere Lebensdauer und mehr Zuverlässigkeit.

Externe SSD als System Festplatte

Der Stromverbrauch eines Raspberry Pi bleibt weiterhin überschaubar. Ein Raspberry Pi 5 benötigt etwa 4-5 Watt im Leerlauf und bis zu 10 Watt unter Volllast. Im Vergleich zu einem ausgewachsenen Server ist das immer noch sehr wirtschaftlich

Ergebnis



OS installieren: Headless-Setup mit Raspberry Pi OS

Der Raspberry Pi Imager ist deutlich komfortabler geworden und bietet mehr Konfigurationsmöglichkeiten direkt beim Erstellen des Boot-Mediums.

Lade zunächst den aktuellen Raspberry Pi Imager von der offiziellen Website herunter. Nach dem Start wählst du als Betriebssystem die “Raspberry Pi OS Lite (64-bit)“-Version aus. Die 64-Bit-Version ist mittlerweile die Standardempfehlung und nicht mehr als Beta gekennzeichnet. Die Lite-Version ohne Desktop ist für einen Server völlig ausreichend und spart wertvolle Ressourcen.

Bevor du auf “Schreiben” klickst, öffne die erweiterten Optionen. Hier kannst du jetzt:

  1. SSH direkt aktivieren (wähle “SSH mit Passwortauthentifizierung”)
  2. Benutzername und Passwort festlegen (nicht mehr der unsichere Standardbenutzer “pi”)
  3. WLAN-Konfiguration vornehmen, falls kein LAN-Kabel verwendet wird

Diese Vorabkonfiguration erspart dir später viele manuelle Schritte. Wähle als Speichermedium deine externe SSD und klicke auf “Schreiben”. Nach Abschluss des Schreibvorgangs kann die SSD direkt an den Raspberry Pi angeschlossen werden.

Nach dem ersten Start kannst du dich per SSH mit deinem Pi verbinden. Unter Windows geht das am einfachsten über die PowerShell oder Windows Terminal:

ssh benutzername@ip-adresse

Verwende die IP-Adresse, die du in den Einstellungen deines Routers findest.

Raspberry Pi OS konfigurieren

Nach der erfolgreichen Verbindung aktualisieren wir als erstes das System:

sudo apt update -y
sudo apt upgrade -y
sudo apt autoremove -y

Dies kann einige Zeit in Anspruch nehmen. Im Anschluss ist es sinnvoll, die grundlegenden Systemeinstellungen zu überprüfen:

# Zeitzone überprüfen
date

# Falls nötig, Zeitzone neu setzen
sudo timedatectl set-timezone 'Europe/Berlin'

# Systemauslastung beobachten
htop

# Temperatur überwachen
cat /sys/class/thermal/thermal_zone0/temp

Der letzte Befehl zeigt die CPU-Temperatur in Milligrad Celsius an (also den angezeigten Wert durch 1000 teilen). Bei längerer Nutzung unter Last solltest du auf adäquate Kühlung achten. Moderne Raspberry Pi 5 Modelle erzeugen mehr Wärme als ihre Vorgänger und benötigen in der Regel aktive Kühlung.

Docker und Docker Compose installieren

Docker hat sich zum de-facto Standard für die Bereitstellung von Anwendungen entwickelt. Die Installation von Docker unter Raspberry Pi OS erfolgt nunmehr über die offiziellen Debian-Repositories:

# Notwendige Pakete installieren
sudo apt-get update
sudo apt-get install -y ca-certificates curl

# Docker Repository einrichten
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Repository hinzufügen
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker installieren
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Im Jahr 2025 ist Docker Compose bereits als Plugin in Docker integriert und muss nicht mehr separat installiert werden. Um zu überprüfen, ob alles korrekt installiert wurde:

docker --version
docker compose version

Wir erstellen nun eine Grundstruktur für unsere Docker-Container:

mkdir -p ~/docker
cd ~/docker

AdGuard Home als Werbeblocker einrichten

Anstelle von Blocky, das im ursprünglichen Blogpost verwendet wurde, setzen wir jetzt auf AdGuard Home. Adguard Home bietet eine modernere Benutzeroberfläche, regelmäßige Updates und eine große Community-Unterstützung.

Wir erstellen einen Ordner für AdGuard Home und die notwendigen Unterordner:

mkdir -p ~/docker/adguard/{work,conf}
cd ~/docker/adguard

Jetzt erstellen wir die Docker-Compose-Datei:

nano docker-compose.yml

In diese Datei fügen wir folgende Konfiguration ein:

services:
    adguard:
        image: adguard/adguardhome
        container_name: adguard
        restart: unless-stopped
        ports:
            - "53:53/tcp"
            - "53:53/udp"
            - "81:80/tcp"
            - "3000:3000/tcp"
        volumes:
            - ./work:/opt/adguardhome/work
            - ./conf:/opt/adguardhome/conf
        environment:
            TZ: Europe/Berlin
        networks:
            - proxy

networks:
    proxy:
        external: true

Bevor wir den Container starten, müssen wir das Docker-Netzwerk “proxy” erstellen, das später von allen unseren Diensten genutzt wird:

sudo docker network create proxy

Jetzt können wir AdGuard Home starten:

sudo docker compose up -d

Nach dem Start ist AdGuard Home unter http://[raspberry-pi-ip]:3000 erreichbar. Beim ersten Aufruf führt dich ein Setup-Assistent durch die Konfiguration. Wähle hier Port 53 für den DNS-Dienst und Port 80 für die Web-Oberfläche. Anschließend legst du einen Administratorzugang fest.

Um AdGuard Home als DNS-Server in deinem gesamten Netzwerk zu nutzen, musst du in den Einstellungen deines Routers die IP-Adresse des Raspberry Pi als primären DNS-Server eintragen. Bei einer Fritz!Box findest du diese Einstellung unter “Internet > Zugangsdaten > DNS-Server”

Im AdGuard Dashboard kannst du unter “Filter” vorgefertigte Blocklisten hinzufügen. Ergänze diese mit einer Whitelist, um False-Positives zu vermeiden, beispielsweise diese Whitelist.

https://raw.githubusercontent.com/deployn/adguardhomelist/main/whitelist.txt

Traefik als Reverse Proxy einrichten

In der ursprünglichen Anleitung hatte ich den Nginx Proxy Manager verwendet. Für die aktualisierte Version setzen wir zur Abwechslung auf Traefik, der mittlerweile in Version 3 vorliegt und eine hervorragende Integration mit Docker bietet. Das Setup anderer Reverse Proxies wird auch in diesem Youtube-Video gezeigt.

Wir erstellen einen neuen Ordner für Traefik:

mkdir -p ~/docker/traefik
cd ~/docker/traefik

Dann erstellen wir die Docker-Compose-Datei:

nano docker-compose.yml

Mit folgendem Inhalt:

services:
    traefik:
        image: traefik:3
        container_name: traefik
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock:ro
            - ./traefik.yml:/etc/traefik/traefik.yml:ro
            - ./acme.json:/acme.json
        networks:
            - proxy
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.traefik.rule=Host(`traefik.home`)"
            - "traefik.http.routers.traefik.entrypoints=web"
            - "traefik.http.services.traefik.loadbalancer.server.port=8080"

networks:
    proxy:
        external: true

Nun benötigen wir die Traefik-Konfigurationsdatei:

nano traefik.yml

Mit diesem Inhalt:

entryPoints:
    web:
        address: ":80"
    websecure:
        address: ":443"

providers:
    docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false
        network: proxy

api:
    dashboard: true
    insecure: true

log:
    level: INFO

Und wir erstellen eine leere Datei für SSL-Zertifikate:

touch acme.json
chmod 600 acme.json

Jetzt können wir Traefik starten:

sudo docker compose up -d

Traefik ist nun unter https://traefik.home erreichbar. Das Dashboard zeigt dir alle aktiven Docker-Container und die konfigurierten Routen.

Heimdall als Dashboard einrichten

Als letzten Baustein unseres Grundsystems installieren wir Heimdall als modernes Dashboard, um alle unsere Dienste zentral zu verwalten. Homer, das in der ursprünglichen Anleitung verwendet wurde, ist nach wie vor eine gute Option, aber Heimdall bietet mehr Integrationsmöglichkeiten mit verschiedenen Diensten.

Wir erstellen einen neuen Ordner für Heimdall:

mkdir -p ~/docker/heimdall/config
cd ~/docker/heimdall

Dann erstellen wir die Docker-Compose-Datei:

nano docker-compose.yml

Mit folgendem Inhalt:

services:
    heimdall:
        image: linuxserver/heimdall:latest
        container_name: heimdall
        restart: unless-stopped
        volumes:
            - ./config:/config
        environment:
            - PUID=1000
            - PGID=1000
            - TZ=Europe/Berlin
        networks:
            - proxy
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.heimdall.rule=Host(`heimdall.home`)"
            - "traefik.http.routers.heimdall.entrypoints=web"
            - "traefik.http.services.heimdall.loadbalancer.server.port=80"

networks:
    proxy:
        external: true

Nun starten wir Heimdall:

sudo docker compose up -d

Heimdall ist jetzt über http://heimdall.home erreichbar und kann als zentrale Anlaufstelle für alle deine selbst gehosteten Dienste dienen. Du kannst hier Kacheln für AdGuard Home, Traefik und alle weiteren Dienste hinzufügen, die du später installierst.

Automatische Updates und Wartung

Ein oft vernachlässigter Aspekt bei Heimservern ist die regelmäßige Wartung. Wir richten zumindest automatische Updates für das Betriebssystem ein:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Für Docker-Container gibt es verschiedene Lösungen. Manuelle Updates sind einfach mit:

sudo docker compose -f ~/docker/adguard/docker-compose.yml pull
sudo docker compose -f ~/docker/træfik/docker-compose.yml pull
sudo docker compose -f ~/docker/heimdall/docker-compose.yml pull
sudo docker compose -f ~/docker/adguard/docker-compose.yml down && sudo docker compose -f ~/docker/adguard/docker-compose.yml up -d
sudo docker compose -f ~/docker/træfik/docker-compose.yml down && sudo docker compose -f ~/docker/træfik/docker-compose.yml up -d
sudo docker compose -f ~/docker/heimdall/docker-compose.yml down && sudo docker compose -f ~/docker/heimdall/docker-compose.yml up -d

Zusätzlich solltest du regelmäßig nicht mehr benötigte Docker-Images und -Volumes entfernen:

sudo docker system prune -af

Damit werden entfernt:

  • Alle gestoppten Container
  • Alle Netzwerke, die nicht von mindestens einem Container verwendet werden
  • Alle ungenutzten Images (nicht nur die “dangling” Images, dank der -a/—all Option)
  • Den ungenutzten Build-Cache

Die -f/--force Option überspringt die Bestätigungsaufforderung, sodass die Bereinigung sofort ohne Rückfrage ausgeführt wird.

Öffentlicher Zugang zu deinen Diensten

Wenn du deine Dienste auch von außerhalb deines Heimnetzwerks zugänglich machen möchtest, benötigst du:

  • Eine dynamische DNS-Lösung (z.B. DuckDNS)
  • Port-Weiterleitungen in deinem Router
  • SSL-Zertifikate für sichere Verbindungen

Um Let’s Encrypt-Zertifikate mit Traefik zu verwenden, musst du die Traefik-Konfiguration anpassen:

cd ~/docker/traefik
nano traefik.yml

Ergänze die Datei um folgende Abschnitte:

certificatesResolvers:
    letsencrypt:
        acme:
            email: deine@email.de
            storage: acme.json
            httpChallenge:
                entryPoint: web

Für einen Container, der öffentlich zugänglich sein soll, würdest du dann folgende Labels hinzufügen:

labels:
    - "traefik.enable=true"
    - "traefik.http.routers.dienst.rule=Host(`dienst.deine-domain.de`)"
    - "traefik.http.routers.dienst.entrypoints=websecure"
    - "traefik.http.routers.dienst.tls.certresolver=letsencrypt"
    - "traefik.http.services.dienst.loadbalancer.server.port=80"

Hast du keine öffentliche IP-Adresse, kannst du auch beispielsweise über Pangolin (Blogpost/Youtube Video) einen Tunnel zu deinem Heimserver aufbauen.

Fazit und Ausblick

Mit diesem Setup hast du einen modernen, effizienten und sicheren Heimserver auf Basis eines Raspberry Pi eingerichtet. Die Grundstruktur mit Docker, AdGuard Home als Werbeblocker, Traefik als Reverse Proxy und Heimdall als Dashboard bietet eine solide Basis für weitere Dienste.


Diese Website verwendet Cookies. Diese sind notwendig, um die Funktionalität der Website zu gewährleisten. Weitere Informationen finden Sie in der Datenschutzerklärung