Files
homelab/doc/plan/homelab-projekt-kontext.md
T

82 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# homelab rebuild — projekt-kontext / handoff
> Dieses Dokument bündelt den Stand des Homelab-Rebuild-Projekts, damit ein neuer Assistent (z.B. Claude Code) sofort im Bild ist. Stand: Juni 2026.
## ziel
Sauberer Komplett-Neuaufbau des Proxmox-Homelabs: PVE neu installieren mit **ZFS-Root**, den ZFS-Mirror `tank` neu anlegen, alles am geschriebenen **homelab-manifest** ausrichten. Vorher: backup-first Migration (alles sichern, verifizieren, *dann* wipen).
## kontext zur person
Architekt (Masterstudium berufsbegleitend, Luzern) mit kleinem Büro-Kontext, FOSS-/Linux-Mensch, entwickelt eigene Software-Suite **openbureau** (Rapport, Dossier, Pendenz) mit Claude Code. Vor-Architektur-Hintergrund: Elektroinstallation + BIM-Projektleitung. Werte: Datensouveränität, config-as-code, self-hosted.
## hardware
- Mini-PC Server
- 1× 1TB NVMe — **aktuell LVM-Thin (`local-lvm`) Root**, soll nach Reinstall **ZFS-Root (`rpool`)** werden
- 2× 4TB — **ZFS Mirror `tank`** (~3.6 TiB nutzbar, die Bulk-Daten)
- 1× 2TB externe HDD — `ext-hdd01` unter `/mnt/pve/ext-hdd01` (Directory, Backup-Ziel)
- 1× 2TB USB-C NVMe SSD — neu, für den **PBS-Datastore** (Pfad ist beim User zu bestätigen, Annahme `/mnt/pve/pbs-ssd`)
## aktuelles inventar (echte CTIDs/VMIDs)
LXC: 100 nextcloud · 101 immich · 102 vaultwarden · 103 mailserver · 105 obsidian-livesync · 106 gitea · 107 openbureau · 110 flarum · 111 nginx-proxy-manager · 200 kgva-website · 210 openbureau-web · 211 rapport-website · 212 dossier-website · 219 dev.openbureau · 220 trattoriamarina.ch · 900 rapport-server
VM: 500 windows · 800 homeassistant-os
## getroffene entscheidungen
**Architektur-Prinzipien:** filesystem-first (das FS ist die Wahrheit, Web/SMB/Sync sind Clients); FOSS + config-as-code in Gitea; öffentlich = Caddy / privat = WireGuard-only; RAID ≠ Backup (3-2-1); ZFS-Pool nie über 85%; grosse Daten mit `backup=0` + separat sichern; bewusster Hybrid (single-purpose Infra = native LXC, echte Multi-Container-Apps = ein Docker-LXC pro Stack).
**ZFS:** tank = Mirror (einzige sinnvolle Redundanz bei 2 Platten). rpool = Single-Disk-ZFS für Einheitlichkeit. ashift=12, lz4, atime=off.
**Speicher:** thin provisioning mit Quotas als Sicherheitsdeckel (nicht starr partitionieren). Reserve bewusst eingeplant.
**Reverse Proxy:** Caddy statt NPM (Binary, auto-HTTPS, Caddyfile config-as-code). Edge-Härtung (TLS, Header, CrowdSec) bei Caddy, nicht in den App-Containern.
**Nextcloud:** Docker-compose-Stack (NICHT native Rieger, NICHT AIO) — aber mit Rieger-Tuning-Werten (php opcache/JIT, APCu, Redis-Locking, MariaDB READ-COMMITTED). fpm + nginx-Sidecar. Inkl. Collabora + Whiteboard-Backend. Compose-Datei liegt vor (siehe Dateien).
**Supabase:** nur für die eigenen openbureau-Apps als eigener, getrennter Stack — NICHT als Nextcloud-DB. NC bekommt eine nackte MariaDB/Postgres. NC- und Supabase-DBs strikt getrennt.
**Shares:** zwei getrennte Datasets/Samba-Shares — `tank/business` (projektbasiert nach SIA-Phasen 0008) und `tank/private` (nach Lebensbereichen). Synology-artiger Zugriff via Samba + Filebrowser (Web + Share-Links) + Syncthing (das "Drive"). Bewusst kein Seafile (sperrt Files weg → SMB ginge nicht mehr).
**Architektur-spezifische Erweiterungen empfohlen:** Paperless-ngx (DMS+OCR), Stirling-PDF, BookStack-Wiki, Speckle (BIM-Datenhub, bei BIM-Arbeit), Authentik (SSO sobald mehr Leute). Plus Betrieb: Uptime Kuma, Beszel, Homepage. Privat: AdGuard Home, Linkwarden, Jellyfin/Navidrome, Miniflux.
**Backup-Kette:**
| Schicht | Werkzeug | Lokal | Offsite |
|---------|----------|-------|---------|
| Container + VMs | PBS | neue SSD | (aus Gitea reproduzierbar) |
| Tank-Daten | Restic | ext-hdd01 (HDD) | Hetzner Storage Box |
PBS läuft als privileged LXC, Datastore auf der SSD (überlebt den Wipe). Nach Reinstall: frisches PBS → bestehenden Datastore wieder einhängen → Gäste zurück. Tank: neu anlegen → Restic zurück. Verschlüsselungs-Key (falls genutzt) MUSS off-box gesichert werden.
## migrations-reihenfolge
1. PBS aufsetzen (Skript vorhanden), Datastore auf SSD.
2. Alle 18 Gäste per `vzdump --mode stop --storage pbs` sichern.
3. Stateful-Dienste app-level dumpen (mailserver-Backup + DKIM/DNS notieren; DB-Dumps).
4. Tank-Daten per Restic auf ext-hdd01 + Hetzner.
5. **Verifizieren + je 1 Container- und 1 Tank-Restore testen.**
6. Erst dann wipen: PVE neu auf NVMe (ZFS-root, NUR NVMe als Ziel), tank neu als Mirror.
7. Zurückspielen: PBS-Datastore wieder einhängen → Gäste; tank-Datasets nach Manifest → Restic zurück. Mailserver zuletzt.
8. Laufendes Backup-System einrichten (PBS-Job + sanoid + Restic-Cron).
## offene punkte (vom user noch zu liefern/bestätigen)
- [ ] Discovery-Output: `zfs list -o name,used,mountpoint -r tank` + `pct config <id>` aller Container → um die echten Restic-Pfade und `backup=0/1`-Flags zu fixieren. **Wichtig:** App-Daten liegen in `subvol-*`-Mountpoints (z.B. `subvol-100-disk-0` = Nextcloud-Data) — nicht über Dataset-Namen auto-erkennbar.
- [ ] Was ist `103 mailserver` genau (docker-mailserver / Mailcow)? → bestimmt Backup-Kommando + DKIM-Handling.
- [ ] Stateful-Bestätigung: 107 openbureau & 900 rapport-server = Postgres? 105 obsidian-livesync = CouchDB? 219 dev.openbureau = ?
- [ ] Pfad/Name der neuen SSD bestätigen (`cat /etc/pve/storage.cfg`).
- [ ] Hetzner Storage Box vorhanden oder Offsite später?
- [ ] PBS-Setup-Skript gelaufen? PBS sauber in PVE sichtbar?
## produzierte dateien
- `homelab-manifest.md` — die Referenz-Architektur (Pools, Dienste, CTID-Schema, Speicher-Quotas, Shares+Struktur, Netz, Backup, App-Katalog).
- `homelab-anleitung.md` — Aufbau-Anleitung Schritt 112 (Proxmox → Pools → Datasets → Fileserver → Caddy/WireGuard/AdGuard → Apps → Monitoring → Backup).
- `nextcloud-stack/` — docker-compose.yml + config/ (php-custom.ini, mariadb-tuning.cnf, nginx-nextcloud.conf) + .env.example.
- `migrations-backup-runbook.md` — Backup-vor-dem-Wipe Runbook mit echtem Inventar.
- `pbs-und-tank-backup-anleitung.md` — PBS aufsetzen + Tank sichern, Schritt für Schritt.
- `setup-pbs.sh` — interaktives, ungefährliches Skript das den PBS-LXC provisioniert.
- `homelab-projekt-kontext.md` — dieses Dokument.