Zum Inhalt

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

  1. 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.

  2. Pi5 Docker-Compose aufräumen — Die Definitionen der migrierten Container sind noch in der Compose-Datei (aber gestoppt). Sollten entfernt werden.

  3. Finance-Exporter migrieren — Läuft noch als systemd-Service auf dem Pi5, sollte auf den VPS.

  4. Grafana Admin-Passwort — Aktuell admin/admin, sollte geändert werden.

  5. Gatus absichern — Aktuell ohne Authentifizierung öffentlich erreichbar.

Mittelfristig

  1. AVV mit Hetzner abschließen — DSGVO-Auftragsverarbeitungsvertrag über https://accounts.hetzner.com → Administration → Datenschutz.

  2. Nabu Casa Abo — Trial endet am 14.04.2026, muss vorher abgeschlossen werden (für Home-Assistant-Fernzugriff und Alexa-Integration).

  3. 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)