Ein Raspberry Pi als Homeserver ist leise, sparsam und erstaunlich leistungsfähig. In diesem Guide nehme ich dich mit durch das komplette Setup: von der Auswahl der Hardware über die Absicherung per SSH bis hin zu Backups und Performance-Tuning. Alles praxisnah, mit echten Befehlen und Konfigurationen.
Die richtige Hardware wählen
Meine klare Empfehlung ist der Raspberry Pi 5 mit 8 GB RAM. Der Quad-Core Cortex-A76 bei 2,4 GHz liefert genug Leistung für mehrere Services gleichzeitig. Dazu gehört ein gutes Netzteil (das offizielle 27W USB-C), eine schnelle microSD-Karte (A2-Rating) oder – noch besser – eine NVMe-SSD über den PCIe-Anschluss.
Tipp: Investiert in ein passives Aluminiumgehäuse. Ohne aktive Kühlung throttled der Pi 5 unter Dauerlast bei etwa 80°C.
Raspberry Pi OS Lite installieren
Wir brauchen keine Desktop-Umgebung. Raspberry Pi OS Lite (64-bit, Debian Bookworm-basiert) ist die richtige Wahl:
- Raspberry Pi Imager öffnen und
Raspberry Pi OS Lite (64-bit)auswählen - Unter OS-Einstellungen: Hostname setzen, SSH aktivieren, Benutzer und Passwort anlegen
- Auf die SD-Karte schreiben, einlegen, booten
sudo apt update && sudo apt full-upgrade -y
sudo reboot
SSH härten
SSH-Key generieren (auf deinem Rechner)
ssh-keygen -t ed25519 -C "homeserver"
ssh-copy-id -i ~/.ssh/id_ed25519.pub deinuser@pi-ip
SSH-Daemon konfigurieren
Auf dem Pi die Datei /etc/ssh/sshd_config.d/hardening.conf anlegen:
# /etc/ssh/sshd_config.d/hardening.conf
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
sudo systemctl restart sshd
Wichtig: Testet die Verbindung in einer neuen Session, bevor ihr die alte schließt. Sonst sperrt ihr euch aus.
Firewall mit ufw einrichten
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable
sudo ufw status verbose
Essenzielle Dienste installieren
nginx als Reverse Proxy
sudo apt install nginx -y
sudo systemctl enable nginx
server {
listen 80;
server_name example.deinedomain.de;
location / {
proxy_pass http://127.0.0.1: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;
}
}
PostgreSQL
sudo apt install postgresql postgresql-contrib -y
sudo systemctl enable postgresql
sudo -u postgres createuser --interactive
sudo -u postgres createdb meine_datenbank
SSL-Zertifikate mit certbot
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.deinedomain.de
sudo certbot renew --dry-run
Dynamisches DNS einrichten
# /usr/local/bin/duckdns-update.sh
#!/bin/bash
DOMAIN="deinname"
TOKEN="dein-token-hier"
curl -s "https://www.duckdns.org/update?domains=${DOMAIN}&token=${TOKEN}&ip=" \
> /var/log/duckdns.log 2>&1
chmod +x /usr/local/bin/duckdns-update.sh
(crontab -l; echo "*/5 * * * * /usr/local/bin/duckdns-update.sh") | crontab -
Backup-Strategien
Kein Backup, kein Mitleid. Mein Setup: tägliche inkrementelle Backups mit rsync auf eine externe USB-Festplatte, plus wöchentliche Datenbankdumps.
#!/bin/bash
# /usr/local/bin/backup.sh
BACKUP_DIR="/mnt/backup/homeserver"
TIMESTAMP=$(date +%Y-%m-%d_%H%M)
LOG="/var/log/backup.log"
mkdir -p "${BACKUP_DIR}"
echo "[${TIMESTAMP}] Backup gestartet" >> "${LOG}"
sudo -u postgres pg_dumpall | gzip > "${BACKUP_DIR}/postgres_${TIMESTAMP}.sql.gz"
rsync -az --delete --exclude='/proc' --exclude='/sys' --exclude='/tmp' \
/etc/ "${BACKUP_DIR}/etc/"
rsync -az --delete /home/ "${BACKUP_DIR}/home/"
rsync -az --delete /var/www/ "${BACKUP_DIR}/www/"
echo "[${TIMESTAMP}] Backup abgeschlossen" >> "${LOG}"
find "${BACKUP_DIR}" -name "postgres_*.sql.gz" -mtime +30 -delete
sudo chmod +x /usr/local/bin/backup.sh
(sudo crontab -l; echo "0 3 * * * /usr/local/bin/backup.sh") | sudo crontab -
Tipp: Testet regelmäßig, ob ihr aus euren Backups wiederherstellen könnt. Ein Backup, das niemand testet, ist kein Backup.
Performance-Tipps für ARM
- NVMe statt SD-Karte: Der PCIe-Anschluss des Pi 5 liefert bis zu 800 MB/s statt der ~40 MB/s einer SD-Karte.
- zram statt Swap auf der SD: Komprimierter RAM als Swap reduziert I/O-Last erheblich.
- tmpfs für /tmp: Flüchtige Daten gehören in den RAM.
- PostgreSQL tunen:
shared_buffersauf 25% des RAMs setzen,work_memauf64MB.
sudo apt install zram-tools -y
# In /etc/default/zramswap anpassen:
# ALGO=zstd
# PERCENT=50
sudo systemctl restart zramswap
# /etc/fstab
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,size=512M 0 0
vcgencmd measure_temp
# Sollte unter Last dauerhaft unter 75°C bleiben
Fazit
Ein Raspberry Pi 5 mit gehärtetem SSH, Firewall, nginx, PostgreSQL und automatischen Backups ist eine solide Grundlage für euer Selfhosting-Projekt. Die initiale Einrichtung dauert ein bis zwei Stunden. Danach läuft das Ding monatelang stabil – bei Stromkosten von unter 3 Euro im Monat.