VPS-Migration: Vom Raspberry Pi zum Hetzner Cloud Server
Datum: 28. März 2026 Autor: Andreas Knorr, unterstützt durch Claude Code Status: Abgeschlossen, produktiv
Ausgangslage
Seit Herbst 2025 betreibt die Stiftung Creative Kirche ein umfangreiches IT-Monitoring auf einem Raspberry Pi 5 (raspip5) im Heimnetz von Andreas Knorr. Der kleine Einplatinenrechner mit 8 GB RAM lief rund um die Uhr und überwachte zwei Standorte der Creative Kirche (Pferdebachstraße und Ruhrstraße in Witten), deren Sophos-Firewalls, WLAN-Infrastruktur, Microsoft-Cloud-Dienste und diverse interne Systeme.
Gleichzeitig diente derselbe Raspberry Pi als Smart-Home-Zentrale: Home Assistant steuerte Heizung, Beleuchtung, Photovoltaik-Anlage und diverse Zigbee-Geräte im Privathaushalt.
Das Problem
Mit der Zeit wuchs der Stack auf 26 Docker-Container. Der Pi5 arbeitete permanent an seiner Leistungsgrenze:
- RAM-Engpass: 3,4 GB von 8 GB belegt, 600 MB Swap aktiv, nur 288 MB frei. Bei längeren Claude-Code-Sessions drohte ein Out-of-Memory-Absturz (tatsächlich vorgefallen am 18.03.2026).
- DS-Lite-Einschränkung: Der Heimanschluss hat keine öffentliche IPv4-Adresse. Externe Zugriffe auf Grafana oder Gitea waren nur über IPv6 und DynDNS möglich — funktionierte nicht mit allen Clients und Diensten.
- Verfügbarkeitsrisiko: Fiel das Internet zuhause aus, war das gesamte CK-Monitoring nicht erreichbar. Auch Stromausfälle betrafen alles gleichzeitig.
- Vermischung: Private Smart-Home-Dienste und berufliches CK-Monitoring liefen auf demselben System. Ein fehlgeschlagenes Container-Update konnte beides lahmlegen.
Die Idee
Trennung der Dienste in zwei Systeme: - Lokal (Pi5): Alles was physischen Zugang zum Heimnetz braucht — Smart Home, PV-Anlage, DNS, Backup. - Extern (VPS): Alles was mit der Creative Kirche zu tun hat — Monitoring, Alerting, Dokumentation, Web-Zugang.
Anbieterauswahl
Nach Vergleich von acht Anbietern (Hetzner, Netcup, Contabo, IONOS, OVHcloud, DigitalOcean, Linode, Vultr) fiel die Wahl auf Hetzner Cloud aus folgenden Gründen:
- Standort Deutschland (Nürnberg) — DSGVO-konform, kurze Latenzen
- Keine Vertragsbindung — stündliche Abrechnung, jederzeit löschbar
- Feste IPv4-Adresse — löst das DS-Lite-Problem sofort
- Gutes Preis-Leistungs-Verhältnis — CPX32 mit 4 vCPUs, 8 GB RAM, 160 GB NVMe für 10,99 €/Monat
- Exzellente API und Dokumentation — wichtig für Automatisierung
Gewähltes Produkt
| Eigenschaft | Wert |
|---|---|
| Produkt | Hetzner Cloud CPX32 |
| Hostname | sck-debian-nbg |
| Standort | Nürnberg |
| IPv4 | 178.104.125.96 |
| IPv6 | 2a01:4f8:1c18:13cb::/64 |
| CPU | 4 vCPUs (AMD EPYC, shared) |
| RAM | 8 GB |
| Storage | 160 GB NVMe SSD |
| Traffic | 20 TB/Monat |
| OS | Debian 13 (Trixie) |
| Kosten | 10,99 €/Monat (inkl. IPv4) |
Was wurde migriert
Auf den VPS verschoben (17 Container)
Monitoring-Stack: - Prometheus — zentrale Metrik-Datenbank (30 Tage Retention, 80 Scrape-Targets) - Grafana — 16 Dashboards in 4 Ordnern (Netzwerk, Standorte, System, KLV) - Alertmanager — Alert-Routing an ntfy (Push) und E-Mail - Alertmanager-ntfy-Bridge — formatiert Alerts als lesbare Nachrichten - ntfy — Push-Notification-Server - Loki — Log-Aggregation (Docker-Logs + Sophos Syslog) - Promtail — Log-Collector
Netzwerk-Probes und Exporter: - Blackbox-Exporter — HTTP, DNS, ICMP Probes zu Microsoft-Cloud, Sophos, WLAN APs - Sophos-Central-Exporter — Firewall-Status über Sophos Cloud API - Dynamics-365-Exporter — CRM Performance und Service Health - Oxidized — automatisches Backup der Sophos-Firewall-Konfigurationen
Web-Services: - Caddy — HTTPS Reverse Proxy mit automatischen Let's-Encrypt-Zertifikaten - Gitea — Git-Server für Dokumentation, Konfigurationen und Code - Gatus — Uptime-Monitoring und SLA-Reporting - Homepage — Service-Dashboard mit Live-Widgets
Infrastruktur: - Node-Exporter — Systemmetriken des VPS selbst - Watchtower — automatische Docker-Image-Updates (täglich 04:00)
Auf dem Pi5 verblieben (9 Container)
- Home Assistant — Smart-Home-Zentrale
- Zigbee2MQTT — Zigbee-Gateway (USB-Coordinator)
- Mosquitto — MQTT-Broker
- Matter-Server — Matter/Thread-Bridge
- Pi-hole — DNS-Blocker für das Heimnetz
- Sungrow-Exporter — PV-Wechselrichter Monitoring (Modbus TCP)
- FritzBox-Exporter — Router-Metriken (TR-064)
- Node-Exporter — Systemmetriken des Pi5
- Blackbox-Exporter — Probes vom Heimnetz-Standort (Referenz-Messungen)
- Samba Time Machine — macOS-Backup (401 GB)
Netzwerk-Architektur
Die drei Systeme sind über verschlüsselte Tunnel verbunden:
Internet
│
┌────────┴────────┐
│ VPS Hetzner │
│ 178.104.125.96 │
│ sck-debian-nbg │
└───┬─────────┬───┘
│ │
WireGuard OpenVPN
10.100.0.1 10.244.2.2
│ │
┌───┴───┐ │
│ Pi5 │ │
│raspip5│ │
│.178.199│ │
└───┬───┘ │
│ vpn.creative-kirche.de
Heimnetz │
192.168.178.x │
┌───┴────────┐
│ CK-Netz │
│ 10.128.40.x│
│ 10.128.30.x│
└────────────┘
WireGuard-Tunnel (VPS ↔ Pi5)
Der VPS erreicht die lokalen Dienste auf dem Pi5 (Sungrow, FritzBox, Node-Exporter, etc.) über einen verschlüsselten WireGuard-Tunnel mit 14 ms Latenz. Dieser Tunnel transportiert auch die "Referenz-Probes" — Latenzmessungen vom Heimnetz-Standort aus, die als Vergleichswert zu den Standort-Messungen dienen.
| Seite | WireGuard-IP |
|---|---|
| VPS | 10.100.0.1 |
| Pi5 | 10.100.0.2 |
| MTU | 1280 (DS-Lite-kompatibel) |
OpenVPN-Tunnel (VPS → CK-Netz)
Der VPS hat eine eigene VPN-Verbindung zum Creative-Kirche-Netz über die Sophos-Firewall. Damit ist das CK-Monitoring komplett unabhängig vom Heimnetz — wenn zuhause das Internet ausfällt, überwacht der VPS die CK-Standorte trotzdem weiter.
| Eigenschaft | Wert |
|---|---|
| Endpunkt | vpn.creative-kirche.de:7443 |
| VPN-User | ankn-vps (eigener Account) |
| VPN-IP | 10.244.2.2 |
| Modus | Split-Tunnel (nur CK-Netze) |
| Erreichbar | 10.128.40.x, 10.128.30.x, 10.244.2.x |
Prometheus Scrape-Routing
Die 80 Monitoring-Targets werden über drei verschiedene Wege abgefragt:
| Route | Targets | Beispiele |
|---|---|---|
| VPS direkt (Internet) | 16 | HTTP-Probes zu Microsoft, Google; lokale Container |
| VPS → OpenVPN → CK-Netz | 21 | SNMP Sophos-Firewalls, ICMP WLAN APs |
| VPS → WireGuard → Pi5 | 31 | Lokale Exporter, Referenz-Probes, DNS-Probes |
| VPS → WireGuard → Pi5 → SSH-Tunnel | 12 | SNMP via SaltoServer, Salto Metrics, DNS-Probes XGS |
Sicherheitskonzept
Zugriffsschutz
Der VPS ist gehärtet: - SSH: Nur Key-Authentifizierung, kein Passwort-Login - fail2ban: Sperrt IPs nach 3 fehlgeschlagenen SSH-Versuchen für 1 Stunde - Firewall (ufw): Nur Ports 22 (SSH), 80/443 (HTTPS), 51820/UDP (WireGuard) offen - Docker-Ports: Interne Dienste (Prometheus, Alertmanager, ntfy, Homepage) nur über WireGuard erreichbar, nicht aus dem Internet
Externe Dienste (HTTPS)
Nur drei Dienste sind aus dem Internet erreichbar, alle über HTTPS mit Let's-Encrypt-Zertifikaten:
| URL | Dienst | Authentifizierung |
|---|---|---|
| https://anknorr.ddnss.de | Grafana | Anonym (Viewer-Rolle) |
| https://gatus-anknorr.ddnss.de | Gatus | Offen (nur Statusseite) |
| https://gitea-anknorr.ddnss.de | Gitea | Gitea-Login erforderlich |
| https://hp-anknorr.ddnss.de | Homepage | Basic Auth (ak/zaphod42) |
Credential-Strategie
Grundregel: Sensible Zugangsdaten bleiben auf dem Pi5.
Der VPS speichert nur die API-Credentials für Sophos und Dynamics 365 (als Docker-Environment-Variablen). Alle anderen Secrets (1Password, Microsoft 365, Home Assistant, Dokumentation mit Klartext-Passwörtern) verbleiben auf dem Pi5 im Heimnetz, das durch DS-Lite praktisch nicht aus dem Internet erreichbar ist.
Ergebnis
Vorher vs. Nachher
| Kennzahl | Vorher (nur Pi5) | Nachher (Hybrid) |
|---|---|---|
| Container auf Pi5 | 26 | 9 |
| RAM belegt (Pi5) | 3,4 GB + 600 MB Swap | 1,35 GB |
| RAM frei (Pi5) | 288 MB | 5,1 GB |
| Externer Zugang | DS-Lite, IPv6-only, unzuverlässig | Feste IPv4, immer erreichbar |
| CK-Monitoring bei Heimnetz-Ausfall | Offline | Weiterhin aktiv |
| Prometheus Targets | 80/80 | 80/80 (unverändert) |
| Grafana Dashboards | 16 | 16 (alle migriert) |
| Monatliche Kosten | ~1,50 € (Strom Pi5) | ~12,50 € (Strom + VPS) |
Zeitleiste
| Zeit | Schritt |
|---|---|
| 09:10 | Hetzner-Account angelegt |
| 09:15 | CPX32 bestellt, SSH-Keys hinterlegt |
| 09:20 | Server online, erste SSH-Verbindung |
| 09:25 | Grundinstallation (User, SSH-Härtung, fail2ban, Firewall) |
| 09:35 | Docker installiert |
| 09:40 | WireGuard-Tunnel Pi5 ↔ VPS |
| 09:50 | Configs und Daten auf VPS kopiert |
| 10:00 | Docker-Compose erstellt, 17 Container gestartet |
| 10:15 | MTU-Problem gelöst (1420 → 1280) |
| 10:25 | Prometheus 80/80 Targets UP |
| 10:35 | 16 Grafana-Dashboards importiert |
| 10:40 | DNS umgestellt (ddnss.de → VPS-IP) |
| 10:45 | Let's-Encrypt-Zertifikate aktiv |
| 10:50 | Pi5 aufgeräumt (17 Container entfernt) |
| 11:00 | OpenVPN zum CK-Netz eingerichtet |
| 11:20 | DNS-Probes gefixt, alle 80 Targets grün |
| 11:30 | Homepage angepasst, interne Ports abgesichert |
| 12:00 | Syslog-Weiterleitung, Claude Code auf VPS, Sync erweitert |
| 12:30 | iptables persistent, AVV-Info, Dokumentation |
Gesamtdauer: ca. 3,5 Stunden von der Bestellung bis zum produktiven Betrieb.
Offene Punkte
Kurzfristig
-
Sophos DNS vom VPN erlauben — 12 DNS-Probes laufen noch über einen Umweg (VPS → Pi5 → rpp1 → SaltoServer), weil die Sophos XGS-40 DNS-Anfragen von VPN-IPs blockiert. Lösung: "Administration → Gerätezugriff → DNS → Zone VPN aktivieren" auf der Sophos.
-
Pi5 Docker-Compose aufräumen — Die Definitionen der migrierten Container sind noch in der Compose-Datei (aber gestoppt). Sollten entfernt werden.
-
Finance-Exporter migrieren — Läuft noch als systemd-Service auf dem Pi5, sollte auf den VPS.
-
Grafana Admin-Passwort — Aktuell admin/admin, sollte geändert werden.
-
Gatus absichern — Aktuell ohne Authentifizierung öffentlich erreichbar.
Mittelfristig
-
AVV mit Hetzner abschließen — DSGVO-Auftragsverarbeitungsvertrag über https://accounts.hetzner.com → Administration → Datenschutz.
-
Nabu Casa Abo — Trial endet am 14.04.2026, muss vorher abgeschlossen werden (für Home-Assistant-Fernzugriff und Alexa-Integration).
-
Sophos Syslog direkt an VPS — Aktuell: Sophos → rpp1 → Pi5 → VPS. Ziel: Sophos → VPS direkt (wenn VPN-DNS-Problem gelöst).
Fazit
Die Migration war in einem halben Tag abgeschlossen und bringt erhebliche Verbesserungen:
- Der Pi5 hat jetzt Luft zum Atmen — 5 GB freier RAM statt 288 MB, kein Swap-Thrashing mehr.
- Das CK-Monitoring ist hochverfügbar — unabhängig vom Heimnetz, feste IPv4, 99,9% SLA.
- Die Trennung zwischen privatem Smart Home und beruflichem CK-Monitoring ist sauber.
- Die Kosten sind mit ~11 €/Monat überschaubar.
- Die Migration war ohne Datenverlust und ohne Ausfallzeit — alle 80 Monitoring-Targets liefen innerhalb von Minuten nach der Umstellung wieder.
Erstellt: 28.03.2026 System: Claude Code auf raspip5 (192.168.178.199)