VPS Hybrid-Konzept: Lokaler Pi5 + Externer Server
Stand: 28. März 2026 Status: Konzept / Entscheidungsvorlage
Motivation
Der Raspberry Pi 5 (raspip5) betreibt aktuell 26 Docker-Container mit 3,4 GB RAM + Swap. Das umfasst sowohl den lokalen Smart-Home-Stack als auch das CK-Netzwerk-Monitoring.
Ziel: Trennung in zwei Systeme: - Pi5 (lokal): Smart Home, lokale Geräte, Credentials - VPS (extern): CK-Monitoring, Dokumentation, Web-Services
Container-Aufteilung
Lokal auf Pi5 — Smart Home Hub (~1,5 GB RAM, 9 Container)
| Container | RAM | Grund: lokal |
|---|---|---|
| homeassistant | 775 MB | Zigbee, Hue, Meross, Matter, Modbus |
| zigbee2mqtt | 116 MB | USB-Coordinator am Pi |
| mosquitto | 4 MB | MQTT-Broker für Z2M |
| matter-server | 61 MB | Lokale Matter-Geräte |
| pihole | 170 MB | DNS-Blocker für Heimnetz |
| sungrow-exporter | 20 MB | Modbus TCP 192.168.100.75 |
| fritzbox-exporter | 37 MB | TR-064 lokal |
| node-exporter | 23 MB | Pi5 Systemmetriken |
| samba-timemachine | 140 MB | Time Machine Backup (401 GB Daten) |
VPS extern — CK Monitoring & Doku (~1,5 GB RAM, 17 Container)
| Container | RAM | Funktion |
|---|---|---|
| prometheus | 126 MB | Zentrale Metrik-DB (30d Retention) |
| grafana | 280 MB | Dashboards, extern erreichbar |
| loki | 182 MB | Log-Aggregation |
| promtail | 64 MB | Log-Collector |
| caddy | 33 MB | HTTPS Reverse Proxy |
| alertmanager | 25 MB | Alert-Routing |
| alertmanager-ntfy-bridge | 5 MB | ntfy-Integration |
| ntfy | 14 MB | Push-Benachrichtigungen |
| gatus | 31 MB | Uptime-Monitoring |
| homepage | 108 MB | Service-Dashboard |
| gitea | 123 MB | Git-Repos, Dokumentation |
| oxidized | 37 MB | Netzwerk-Config-Backup |
| blackbox-exporter | 44 MB | HTTP/ICMP Probes |
| sophos-central-exporter | 23 MB | Sophos Cloud API |
| dynamics365-exporter | 27 MB | D365 Business Central API |
| duplicati | 216 MB | Offsite-Backup |
| watchtower | 20 MB | Container-Auto-Updates |
VPS-Anforderung
| Ressource | Minimum | Komfort |
|---|---|---|
| RAM | 4 GB | 8 GB |
| vCPUs | 2 | 4 |
| Storage | 80 GB SSD | 160 GB SSD |
| Traffic | 5 TB/Monat | 20 TB/Monat |
| IPv4 + IPv6 | ja | ja |
| Standort | DE/EU (DSGVO) | DE/EU (DSGVO) |
Daten-Volumen auf dem VPS: Prometheus ~300 MB, Loki ~8 GB, Gitea ~115 MB, Rest minimal. Die 401 GB Samba-Daten bleiben lokal auf dem Pi5.
Preisvergleich (DE-Anbieter, ca. Q1 2025/2026)
Variante A: Minimum (4 GB / 2 vCPU / 80 GB)
| # | Anbieter | Produkt | vCPU | RAM | SSD | Preis/Monat |
|---|---|---|---|---|---|---|
| 1 | Contabo | Cloud VPS S | 4 | 8 GB | 200 GB | ~5 € |
| 2 | OVHcloud | VPS Value | 2 | 4 GB | 80 GB | ~7 € |
| 3 | Hetzner | CPX21 | 3 | 4 GB | 80 GB | ~7,50 € |
| 4 | Netcup | VPS 1000 G11 | 4 | 8 GB | 256 GB | ~8 € |
| 5 | IONOS | VPS M | 2 | 4 GB | 160 GB | ~9 € |
Variante B: Komfort (8 GB / 4 vCPU / 160 GB)
| # | Anbieter | Produkt | vCPU | RAM | SSD | Preis/Monat |
|---|---|---|---|---|---|---|
| 1 | Contabo | Cloud VPS M | 6 | 16 GB | 400 GB | ~9 € |
| 2 | Hetzner | CPX31 | 4 | 8 GB | 160 GB | ~13,50 € |
| 3 | Netcup | VPS 2000 G11 | 6 | 16 GB | 512 GB | ~14,50 € |
| 4 | OVHcloud | VPS Essential | 4 | 8 GB | 160 GB | ~14,40 € |
| 5 | IONOS | VPS L | 4 | 8 GB | 240 GB | ~15 € |
US-Anbieter (DigitalOcean, Linode, Vultr): ~22-44 €/Mo, nicht empfohlen für DE/DSGVO.
Empfehlung
Hetzner CPX21 (~7,50 €/Mo) — bestes Gesamtpaket: - Seriöser DE-Anbieter, DSGVO-konform - Exzellente API (Terraform, CLI) - Feste IPv4 → kein DS-Lite/DynDNS mehr - Snapshots günstig (0,01 €/GB/Mo) - Standort Falkenstein oder Nürnberg
Alternative: Netcup VPS 1000 (~8 €/Mo) für mehr RAM/Storage (8 GB / 256 GB).
Verbindung Pi5 ↔ VPS
WireGuard-Tunnel zwischen Pi5 und VPS:
Pi5 (192.168.178.199) WireGuard VPS (feste IPv4)
├── node-exporter:9100 ──────────────────→ Prometheus scrapet
├── fritzbox-exporter:9787 ─────────────────→ Prometheus scrapet
├── sungrow-exporter:9789 ─────────────────→ Prometheus scrapet
├── pihole-exporter:9617 ─────────────────→ Prometheus scrapet
├── HA API :8123 ─────────────────→ Gatus Health-Check
└── Syslog (Sophos) ─────────────────→ Promtail/Loki
Alternative: Lokale Exporter nutzen Prometheus Remote-Write und pushen Metriken zum VPS. Vorteil: VPS braucht keinen Zugriff auf das Heimnetz.
Sicherheitsbewertung: Credentials
Credentials-Bestand auf dem Pi5
| Datei/Ort | Inhalt |
|---|---|
.env.sophos |
Sophos Central API Key |
.env.m365 |
Microsoft 365 Credentials |
.env.dynamics |
Dynamics 365 API |
.env.docbox |
DocBox API |
.env.frb |
FundraisingBox API |
dokumentation/ |
Klartext-Passwörter in Markdown |
.storage/auth |
Home Assistant Refresh Tokens |
docker-compose.yml |
Pi-hole PW, Grafana PW |
CLAUDE.md / Memory |
SSH-Passwörter, Service-Zugänge |
| 1Password CLI | Service-Account Token, Vault-Zugriff |
Vergleich: Pi5 vs. VPS
| Kriterium | Pi5 (zuhause) | VPS (Rechenzentrum) |
|---|---|---|
| Physischer Zugriff | Nur wer ins Haus kommt | Hoster-Personal hat Zugang |
| Netzwerk-Exposition | DS-Lite, kein IPv4 inbound | Feste IPv4, permanent exponiert |
| SSH-Angriffsfläche | Nur Heimnetz | Sofort von Bots gescannt |
| Disk-Zugriff Dritter | Niemand | Hoster theoretisch möglich |
| DSGVO | Eigenverantwortung | AVV (Auftragsverarbeitung) nötig |
| Ausfallrisiko | Strom/Internet zuhause | 99,9% SLA, redundant |
Bewertung
Der Pi5 ist für Credentials sicherer: 1. Kein Inbound-IPv4 (DS-Lite) — praktisch nicht aus dem Internet angreifbar 2. Physisch im eigenen Haushalt — kein Dritter hat Festplattenzugriff 3. Kein Hosting-Anbieter der bei Insolvenz/Beschlagnahme Zugriff erhält
Ein VPS wäre für Credentials schlechter: 1. Feste IPv4 = permanent exponiert (SSH-Brute-Force, Port-Scans) 2. Hoster-Personal hat theoretisch physischen Disk-Zugriff 3. Bei Beschlagnahme oder Anbieterfehler: Daten potenziell offengelegt
Empfehlung: Credential-Strategie im Hybrid-Setup
Grundregel: Alle Secrets bleiben auf dem Pi5. Der VPS speichert keine Credentials.
| Pi5 (Secrets-Vault) | VPS (keine Secrets) |
|---|---|
| Alle .env-Dateien | Prometheus (keine Secrets nötig) |
| 1Password CLI + Token | Grafana (admin/admin, unkritisch) |
| HA Auth Tokens | Caddy (Let's Encrypt, automatisch) |
| Dokumentation mit Passwörtern | Gitea (eigene Auth, keine Klartext-PWs in Repos!) |
| CLAUDE.md mit Credentials | Loki (Logs, keine Secrets) |
Exporter mit API-Keys (Sophos, D365, DocBox): - Laufen auf dem VPS, aber Credentials werden NICHT auf der VPS-Disk gespeichert - Stattdessen: Environment-Variablen per 1Password CLI oder HashiCorp Vault zur Laufzeit injiziert - Alternativ: Exporter bleiben auf dem Pi5 und pushen per Remote-Write
VPS-Härtung: - SSH nur per Key-Auth (kein Passwort-Login) - fail2ban gegen Brute-Force - ufw-Firewall: nur Ports 22, 80, 443, WireGuard offen - Disk-Encryption (LUKS) wenn vom Anbieter unterstützt - Automatische Security-Updates (unattended-upgrades)
Vorteile nach Migration
| Thema | Vorher (alles auf Pi5) | Nachher (Hybrid) |
|---|---|---|
| Grafana extern | DS-Lite, IPv6-only, DynDNS | Feste IPv4, direkt erreichbar |
| Pi5 RAM | 3,4 GB + Swap, OOM-Risiko | ~1,5 GB, entspannt |
| Monitoring-Verfügbarkeit | Abhängig von Heim-Internet | 99,9% SLA im RZ |
| Credentials | Alles auf einem System | Getrennt: Secrets lokal, Services extern |
| Claude Code | OOM-Risiko bei langen Sessions | Kann auf VPS laufen (mehr RAM) |
| Kosten | ~5 € Strom/Monat (Pi5) | ~5 € Strom + ~8 € VPS = ~13 €/Mo |
Server-Daten (bestellt 28.03.2026)
| Anbieter | Hetzner Cloud |
| Produkt | CPX32 |
| Hostname | sck-debian-nbg |
| IPv4 | 178.104.125.96 |
| IPv6 | 2a01:4f8:1c18:13cb::/64 |
| Standort | Nürnberg |
| OS | Debian 13 (Trixie) |
| Specs | 4 vCPU AMD, 8 GB RAM, 160 GB NVMe |
| Preis | 10,99 €/Mo (inkl. IPv4) |
| Kundennr. | K0397824026 |
| SSH | ssh ak@178.104.125.96 (Key-Auth) |
| Hetzner Console | https://console.hetzner.com |
| Credentials | 1Password Vault CK → "Hetzner" |
WireGuard-Tunnel
| IP | |
|---|---|
| VPS (wg0) | 10.100.0.1 |
| Pi5 (wg0) | 10.100.0.2 |
| Latenz | ~14 ms |
| Config | /etc/wireguard/wg0.conf (beide Seiten) |
Grundinstallation (erledigt 28.03.2026)
- [x] User ak + SSH-Keys (Pi5 + Mac)
- [x] SSH-Härtung (Key-only, kein Passwort-Login)
- [x] fail2ban (SSH, 3 Versuche, 1h Ban)
- [x] ufw Firewall (22, 80, 443, 51820/udp)
- [x] Docker CE 29.3.1 + Compose 5.1.1
- [x] WireGuard-Tunnel Pi5 ↔ VPS
Migration (erledigt 28.03.2026)
- [x] Docker-Compose für VPS erstellen (17 Container)
- [x] Configs + Daten (Prometheus, Grafana, Alertmanager, Caddy, Loki, Gitea, ...) kopiert
- [x] Alle Container gestartet und getestet
- [x] Prometheus Scrape-Config: lokale Targets via WireGuard, CK-Targets via VPN
- [x] Grafana: 16 Dashboards importiert (alle Ordner: Netzwerk, Standorte, System, KLV)
- [x] Caddy + Let's Encrypt auf VPS (3 externe Domains)
- [x] DNS umgestellt (anknorr.ddnss.de → 178.104.125.96, A+AAAA)
- [x] ddclient auf Pi5 deaktiviert
- [x] Pi5 aufgeräumt (17 Container entfernt, 9 verbleiben)
- [x] Homepage-Config angepasst (neue URLs)
- [x] Interne Ports abgesichert (nur via WireGuard, nicht aus Internet)
- [x] WireGuard MTU auf 1280 gesetzt (DS-Lite Kompatibilität)
- [x] OpenVPN Split-Tunnel zum CK-Netz (User ankn-vps, direkt ohne Pi5)
OpenVPN zum CK-Netz
| Endpoint | vpn.creative-kirche.de:7443 |
| User | ankn-vps |
| Passwort | 1Password Vault CK → "Hetzner" |
| VPN-IP | 10.244.2.2 |
| Modus | Split-Tunnel (nur 10.128.x.x und 10.244.2.x) |
| Config | /etc/openvpn/client/ck-vpn.conf |
| Service | openvpn-client@ck-vpn.service |
Netzwerk-Architektur
VPS (178.104.125.96)
├── OpenVPN → vpn.creative-kirche.de (10.244.2.2)
│ └── Direkt: Sophos XGS, WLAN APs, SaltoServer SNMP
│ (ICMP, HTTP, DNS, SNMP Probes — 40 Targets)
├── WireGuard → Pi5 (10.100.0.2)
│ └── Node-Exporter, FritzBox, Sungrow, Finance, Salto Metrics
│ (lokale Exporter — 7 Targets)
└── Internet (feste IPv4)
└── HTTPS: Grafana, Gatus, Gitea (via Caddy)
└── Eigene Probes: HTTP/DNS/ICMP vom VPS-Standort (33 Targets)
Prometheus: 80/80 Targets UP
Noch offen
- Claude Code auf VPS installieren
- Sync-Script auf 3 Instanzen erweitern (Pi5, VPS, Mac)
- AVV mit Hetzner abschließen (DSGVO)
- Sophos Syslog auf VPS umleiten (aktuell noch auf Pi5)
- Finance-Exporter auf VPS migrieren (aktuell systemd auf Pi5)
Erstellt: 28.03.2026, Migration abgeschlossen: 28.03.2026