homelab

Homelab Master-Doku

Stand 27.05.2026 · Wiesbaden · Wenn du das nach einem Jahr Pause liest: fang oben an.

⚡ Quick-Start

Wo bin ich? Was läuft? Wie komme ich rein?

Proxmox 1 (Haupt)
scpve · 192.168.178.8
Proxmox 2
pveforum · 192.168.178.192
NAS / Backups
DSSEC · 192.168.178.3
Reverse Proxy
LXC 133 · .131 :81
Docker-GUI (Dockge)
.131:5001
Webserver-VM
VM 122 · .122
SSH von
bigbrain@MacBook
Off-Site
pCloud (Restic)
Wichtigste 3 Befehle wenn was brennt:
ssh root@192.168.178.8         # auf den Haupt-Proxmox
pct list                        # alle LXCs anzeigen
qm list                         # alle VMs anzeigen

📚 Doku-Bibliothek

TL;DR
17 Original-Dokus mit Kernpunkten, Tags und "Wann brauchst du das?"-Auslösern. Suche und Filter helfen dir, schnell die richtige zu finden. Beim Öffnen wird die Doku als "zuletzt verwendet" markiert.
Typ:
Komponente:
17 Dokus angezeigt

Homelab-Zine · Migrations-Geschichte

Magazin-Stil · Issue Mai 2026
übersicht

Die Migrations-Story von LXC 131 (TurnKey) zu LXC 133 (Debian 13 Trixie) — als Magazin aufbereitet, mit kompletter Infra-Karte und Defense-in-Depth-Architektur.

  • Komplette Infrastruktur-Map beider Proxmox-Hosts auf einen Blick
  • Migrations-Timeline mit Vorher/Nachher
  • 3-Schichten-Security-Modell (CrowdSec CAPI + Live-Logs + iptables)
Wann?Überblick verschaffen · Architektur nachschlagen · Migrations-Stand prüfen
lxc-133 docker npm crowdsec migration
docs/homelab-zine.html öffnen →

Backup-Architektur · DSSEC + pCloud

3-2-1-Strategie · 10 Kapitel
referenz

Die komplette Backup-Architektur beider Proxmox-Hosts mit Synology DSSEC und pCloud Off-Site. Inklusive aller Skripte (vollständiger Code), 4 Restore-Szenarien und Troubleshooting.

  • Komplettes Sync-Skript (DSSEC→pCloud) mit Retention, Pre-Check, Email
  • Host-Config-Backup-Skript für /etc/pve
  • Restore-Szenarien A-D: einzelne VM bis Total-Crash
Wann?Backup fehlt/fehlerhaft · Restore nötig · neuer Host hinzu · Synology-Wechsel
backup proxmox synology pcloud rclone restic kritisch
docs/proxmox-backup-dokumentation.html öffnen →

Proxmox VE 8 → 9 Upgrade

Step-by-Step · 17 Schritte
anleitung

Vollständige Major-Upgrade-Anleitung 8.4.1 → 9.1 mit pve8to9-Check, Repo-Wechsel auf Trixie, Reboot-Strategie. Single-Node ohne Cluster.

  • Vorbereitung mit tmux, Subscription-Check, Backups
  • pve8to9-Check ausführen + Warnings interpretieren
  • Repos sauber von Bookworm auf Trixie umstellen
Wann?nächste Major-Version steht an · PVE 9 → 10 (Vorlage)
proxmox upgrade major kritisch
docs/proxmox-upgrade-8-zu-9.html öffnen →

NetWatch · LXC 101

Proxmox + Debian 13 · komplettes Setup
anleitung

Schritt-für-Schritt-Installation von NetWatch auf einer neuen Debian-13-VM. Mit Mac-Terminal-Falle-Workarounds und Heredoc-sicheren Paste-Mustern.

  • VM-Anlage in Proxmox mit allen empfohlenen Settings
  • Statische IP setzen ohne SSH-Verbindung zu verlieren
  • SSH härten mit Backup-Tab-Trick (gegen Aussperren)
Wann?NetWatch neu aufsetzen · neuer LXC nach gleichem Muster
lxc-101 netwatch debian-13 setup
docs/anleitung-proxmox-debian.html öffnen →

LXC 131 · alter Docker-Host

Übersicht des Fallback-Containers
referenz

Dashboard und Inventur des alten Docker-Hosts (Debian 12 Bookworm), der nach der Migration noch als Fallback bereitsteht.

  • Was lief auf dem alten Host (vor Migration)
  • Snapshot 'pre-migration' Hinweise
Wann?Fallback auf alten Stand · vor dem Löschen prüfen was noch wichtig ist
lxc-131 docker fallback deprecated
docs/lxc131-dashboard.html öffnen →

Linux Admin Handbuch

Befehlsreferenz · durchsuchbar
referenz

Allgemeine Linux-Admin-Befehle als durchsuchbare Referenz: Dateien, Verzeichnisse, Cron, Apache, Nginx, Fail2ban, Firewall.

  • cd/ls/cp/mv/chmod & Co. mit Beispielen
  • Crontab-Syntax mit ASCII-Erklärung
  • Apache + Nginx-Befehle nebeneinander
Wann?Befehl vergessen · Syntax nachschlagen
linux cli reference cheatsheet
docs/linux-handbuch.html öffnen →

Cool_DB Catta · Komplette App-Doku

VM 121 · Features, Stolz-Projekt, Handbuch, Technik
referenz

Vollständige Feature-Übersicht und technische Dokumentation der Cool_DB Catta-App. Reminder-System, ToDos, Kalender, Shopping-Listen, Backup-Strategie, Mobile-UI.

  • 4-Reminder-System (Fälligkeitstag, Min vor Uhrzeit, 2× Tage vorher)
  • Migration IONOS → Proxmox: minütlicher Cron statt 15-Min
  • Mobile-First Design + Theme-System (Dark/Light/Auto)
Wann?Feature checken · App-Bug debuggen · neue Features planen
vm-121 cooldb php mariadb app
docs/docs.html öffnen →

Cool_DB Catta · Disaster Recovery

VM 121 · komplette Wiederherstellung ab Null
recovery

Disaster-Recovery-Anleitung für die CoolDB-VM: Frische Debian-13-VM, Pakete, Restic-Restore aus pCloud, DB einspielen, Apache + Cron aktivieren.

  • System-Inventur als Tabelle (alle Versionen + Pfade)
  • Recovery-Bundle Voraussetzungen (rclone.conf, .restic-password, Skripte)
  • 8 nummerierte Recovery-Schritte mit Verifikations-Befehlen
Wann?VM 121 komplett verloren · Migration auf neue VM · DR-Probe
vm-121 cooldb recovery kritisch notfall
docs/Recovery.html öffnen →

Hausi · Hausverwaltung

LXC 124 · Setup, Architektur, API, Backup
referenz

Komplette Doku der Hausi-App: Python/FastAPI-Backend, 14-Tabellen-Datenmodell, PDF-Generator mit WeasyPrint, 2FA mit pyotp, systemd-Service.

  • Setup von Null in 10 nummerierten Schritten
  • Datenmodell als ASCII-Diagramm + Tabellen-Übersicht
  • Berechnungs-Logik (Mietzeit-Faktor, Umlageschlüssel)
Wann?Hausi-Setup neu aufsetzen · API erweitern · DB-Schema verstehen
lxc-124 hausi python fastapi mariadb app
docs/hausi-doku.html öffnen →

Webserver g50zeiten · Admin-Doku

VM 122 + LXC 132 · DNS-Updates, Apache, neue Website
anleitung

Die Bibel für neue Subdomains. 5-Schritt-Schnellanleitung, ipv64-DNS-Update-Skripte, Apache-VHost-Bug-Fix, Tokens-Sicherheitsstufen.

  • Neue Website in 10 Min (5 Schritte mit allen Befehlen)
  • Apache-VHost-Bug: Symptom + Diagnose + Fix
  • Token-Sicherheitsstufen (Record vs. Domain vs. Account)
Wann?neue Subdomain anlegen · ipv64-DNS-Probleme · Apache-Site funktioniert nicht
vm-122 lxc-132 apache nginx ipv64 dns ssl
docs/webserver-doku.html öffnen →

LXC 132 · Webserver-Nginx Admin

Ubuntu 24.04 · nginx 1.24 · DNS-Cronjobs
referenz

Admin-Doku der nginx-VM: 4 interne Doku-Sites (Ports 84/85/86), HTTP-Basic-Auth, DNS-Update-Cronjobs, Passwort-Management mit htpasswd.

  • Server-Blocks nach Port-Schema (80/84/85/86)
  • Wichtig: htpasswd nie mit -c bei bestehender Datei
  • DNS-Update-Skripte sind chmod 700 (Token-Schutz)
Wann?Doku-Site nicht erreichbar · htpasswd ändern · neuen Port hinzufügen
lxc-132 nginx ubuntu ipv64 dns htpasswd
docs/webserver-nginx-132-doku.html öffnen →

Abo-Verwaltung · App auf VM 122

Apache + MariaDB · App-Admin
referenz

Admin-Doku der Abo-App: Datenbank-Struktur, Apache-Konfig, Backup-Workflow (3 Varianten), Passwort-Ändern, API-Tests.

  • Backup-Variante 1 (Browser), 2 (VM), 3 (API) im Vergleich
  • App-Passwort-Hash erzeugen ohne Login
  • JSON-Backup-Format für Daten-Migration
Wann?Abo-Daten sichern/wiederherstellen · App-Passwort ändern
vm-122 abos apache mariadb app
docs/abos-122-doku.html öffnen →

Doki · Dokumenten-App auf VM 122

OCR-Pipeline + FULLTEXT-Suche
referenz

Doki-Admin-Doku mit OCR-Pipeline-Details, FULLTEXT-Index für Volltextsuche, Backup-Aspekte (DB + Storage getrennt).

  • OCR-Worker-Flow: Tesseract + Pillow + pdftotext
  • Backup hat zwei Aspekte (DB + Storage)
  • FULLTEXT-Index muss nach Restore neu aufgebaut werden
Wann?OCR fehlt/falsch · Volltextsuche kaputt · Doku-Storage voll
vm-122 doki apache mariadb ocr app
docs/doki-122-doku.html öffnen →

Stundenabrechnung · App auf VM 122

Excel + PDF Export · Custom-Engine
referenz

Doku der Stundenabrechnung mit eigener Excel/PDF-Engine (ohne externe Libs). Kundendaten und Stundensätze in config.php, Jahresarchiv-Strategie.

  • Tabellen-Struktur stunden_eintraege
  • Stundensätze + MwSt + Pauschalen anpassen
  • Jahresarchiv: Daten in DB lassen (empfohlen) oder Snapshot
Wann?Stundensätze ändern · Excel-Export kaputt · Jahresende-Archivierung
vm-122 stunden apache mariadb app excel
docs/stunden-doku.html öffnen →

Tretbeckenreinigung · App auf VM 122

Termin-App · Personen, Kategorien, Einträge
referenz

Admin-Doku der Tretbecken-Reinigungs-App: Tabellen termin/kategorien/eintraege, Personen-Management, Reset vor neuem Treff.

  • 3-Tabellen-Schema (termin/kategorien/eintraege)
  • Personen-Workflow (Hinzufügen, Umbenennen, Entfernen)
  • Reset-Workflow vor neuem Treff (alle Daten löschen)
Wann?neuer Treff steht an (Reset) · Person hinzufügen · Backup
vm-122 treckertreff apache mariadb app
docs/treckertreff-doku.html öffnen →

Neue Website · Spickzettel

Interaktiver Spickzettel · selbst editierbar
anleitung

Interaktive Schritt-für-Schritt-Anleitung mit Platzhaltern: trägst deine Werte (Subdomain, Nummer, Key) ein, Befehle werden automatisch befüllt. Mit Häkchen pro Schritt.

  • 9 Schritte mit eingefügten Werten
  • Häkchen-System mit localStorage-Speicherung
  • DNS bei ipv64 → SSH → Verzeichnis → nginx → Cron → NPM → SSL
Wann?NEUE Subdomain anlegen · schneller Reminder beim 3. Mal
spickzettel neue-website nginx ipv64 npm ssl schnell
docs/website-spickzettel.html öffnen →

VPN-Monitor · Mac-Skript

Shell-Skript für VPN-Verbindungs-Monitoring
anleitung

Shell-Skript zum Monitoring der VPN-Verbindung am Mac (kein Server-Bestandteil). Mit caffeinate, Logdatei-Auswertung, Live-Mitlesen.

  • Shell-Skript ausführen mit/ohne caffeinate
  • Logdatei-Auswertung (last 20, live, nach Abbrüchen filtern)
  • Aktivität pro Tag zählen
Wann?VPN-Probleme analysieren · Verbindungsabbrüche tracken
vpn mac shell tool
docs/doku.html öffnen →

✓ TODOs & offene Aufgaben

TL;DR
Abhakbare Aufgaben mit Priorität und optionaler Fälligkeit. Erledigte rutschen nach unten und werden ausgegraut. Wird im Browser gespeichert (mit Export/Import).
0
überfällig
0
offen
0
erledigt

📝 Changelog

TL;DR
"Was hab ich wann gemacht?"-Logbuch. Jeder Eintrag mit Datum, Typ und Notiz. Neueste oben. Hilft beim Wiederfinden was bei einem Problem zuletzt geändert wurde.

📊 Versionen & Update-Status

TL;DR
Trag pro Komponente die installierte Version + Update-Datum ein. Die Anzeige wird automatisch grün/gelb/rot — und alles bleibt im Browser gespeichert (localStorage). Mit Export sicherst du den Stand als JSON.
0
aktuell
0
prüfen
0
überfällig
0
gesamt
Komponente Typ Installierte Version Letztes Update Nächste Prüfung Notiz
Proxmox scpveHost Proxmox VE 9.1 Kernel 6.17.13-9-pve
Proxmox pveforumHost Proxmox VE 9.1.7 2026-05-26 ~152 Updates ausstehend
LXC 133 131-Docker-NPMLXC Debian 13 Trixie 2026-05-26 Docker 29.5.2, Compose v5.1.4
VM 121 CoolDB-CattaVM Debian 13 Trixie PHP 8.4.16, MariaDB 11.8.6, Apache 2.4.66
VM 122 g50zeitenVM Debian / Apache Apps: g50zeiten, abos, doki, stunden, treckertreff
LXC 132 Webserver-nginxLXC Ubuntu 24.04 LTS · nginx 1.24 statische Docs + ipv64 DNS-Skripte
LXC 124 HausiLXC Debian 13 LXC Python-Backend + MariaDB 11.8
LXC 101 NetWatchLXC Debian 13 Netzwerk-Monitoring
nginx-proxy-managerDocker v2.14.0 2026-05-26 15 Proxy Hosts, MariaDB-Aria Backend
DockgeDocker latest 2026-05-26 Compose-GUI auf :5001
CrowdSecDocker v1.7.8 2026-05-26 + iptables-bouncer v0.0.34 am Host
MariaDB-AriaDocker v10.11.5 2026-05-26 NPM-Backend, nur intern :3306
Netdata (pveforum)Tool v2.10.3 2026-05-26 Cloud-Anbindung verloren — neu claimen!
⚙ Schwellenwerte anpassen
🔴 rot: alles darüber

📌 Meine Notizen zu dieser Sektion

🌐 IPs & Hosts

TL;DR
Subnetz 192.168.178.0/24 (FritzBox-LAN). Zwei Proxmox-Hosts (.8 und .192), NAS auf .3. Container-IDs entsprechen fast dem letzten Oktett — aber LXC 133 nutzt z.B. IP .131 (Migrations-Erbe).

Physische Hosts & Infrastruktur

GerätIPRolleOS / Version
FritzBox192.168.178.1Gateway, DHCP, DNS
DSSEC192.168.178.3Synology NAS · Backup-ZielDSM
scpve (Mini-PC)192.168.178.8Proxmox Host 1 (Hauptsystem)Proxmox VE 9.1, Kernel 6.17.13-9-pve
pveforum192.168.178.192Proxmox Host 2 (16 cores, 65 GB)Proxmox VE 9.1.7
MacBook (mgmt)DHCPAdmin-Workstation (bigbrain@MacBook-Pro-von-Steffen)macOS

VMs & LXCs auf scpve (.8)

IDIPHostnameRolle / AppsOSStatus
LXC 101192.168.178.101NetWatchNetzwerk-MonitoringDebian 13aktiv
LXC 120debian13-templateTemplate zum KlonenDebian 13Template
LXC 121testTest-Containerlöschen!
VM 121192.168.178.121121-CoolDB-CattaCool_DB Catta — Web-App + DBDebian 13 Trixieaktiv
LXC/VM 122192.168.178.122122-g50zeitenWebserver-Apps: g50zeiten, abos, doki, stunden, treckertreffDebian / Apacheaktiv
LXC 123123-g50riscaktiv
LXC 124192.168.178.124hausiHausi · Python-App + MariaDB 11.8Debian 13 LXCaktiv
LXC 131Docker-Debian (ALT)alter Docker-Host vor MigrationDebian 12 BookwormFallback · löschen in 1-2 Wo
LXC 132192.168.178.132132-Webserver-nginxstatische Docs + ipv64 DNS-Update-SkripteUbuntu 24.04 LTS · nginx 1.24aktiv
LXC 133192.168.178.131131-Docker-NPMDocker-Host: NPM, Dockge, CrowdSec, MariaDB-AriaDebian 13 Trixieaktiv · NEU
Achtung Verwechslungsgefahr: LXC 133 hat die IP .131 und Hostname 131-Docker-NPM. Das ist Erbe der Migration vom alten LXC 131. Die aktuelle Docker-Maschine ist 133, der alte 131 wartet noch ein paar Wochen als Fallback.

VMs & LXCs auf pveforum (.192)

IDHostnameRolleStatus
CT 100, 102, 105(siehe Backup-Doku)diverse Containergem. Backup-Doku
VM 101, 103, 105(siehe Backup-Doku)diverse VMsgem. Backup-Doku

Hinweis: Detail-Inventur von pveforum noch nicht vollständig dokumentiert — siehe Original-Dokus.

Subdomains & öffentliche Dienste

StackEingangReverse ProxyBackend
NPM Admin:81 (intern)LXC 133 / .131:81
Dockge:5001 (intern)LXC 133 / .131:5001
15 SubdomainsHTTPS via Let's EncryptNPM auf .131diverse VMs (.121, .122, .124, …)
ipv64 DNS-UpdatesCron auf .132aktualisiert rusti.ipv64.net

📌 Meine Notizen zu dieser Sektion

🗺️ Infrastruktur-Karte

┌─ scpve · 192.168.178.8 ──────────────────────────────────── │ Proxmox VE 9.1 · Kernel 6.17.13-9-pve · ZFS-POOL1 · backup-lokal-sata │ │ ● LXC 133 · 131-Docker-NPM → .131 Debian 13 Trixie ★ HUB │ ├─ docker: nginx-proxy-manager v2.14.0 (15 Hosts, LE-Certs) │ ├─ docker: mariadb-aria v10.11.5 (intern :3306) │ ├─ docker: dockge (Compose-GUI :5001) │ ├─ docker: crowdsec v1.7.8 (Security) │ └─ host: iptables-bouncer v0.0.34 │ │ ● LXC 132 · 132-Webserver-nginx → .132 Ubuntu 24.04 LTS │ └─ nginx 1.24 + ipv64 DNS-Update-Skripte (Cron) │ │ ● VM 121 · 121-CoolDB-Catta → .121 Debian 13 Trixie │ └─ Apache 2.4.66 + PHP 8.4.16 + MariaDB 11.8.6 │ │ ● LXC 124 · hausi → .124 Debian 13 │ └─ Python-Backend + MariaDB 11.8 │ │ ● LXC 122 · 122-g50zeiten → .122 Apache │ └─ Apps: g50zeiten, abos, doki, stunden, treckertreff │ │ ● LXC 123 · 123-g50risc → ? │ ● LXC 101 · NetWatch → .101 │ │ ○ LXC 131 · Docker-Debian (ALT, gestoppt, Fallback 1-2 Wo)○ LXC 121 · test (LÖSCHEN!)⬚ LXC 120 · debian13-template └───────────────────────────────────────────────────────────────────── ┌─ pveforum · 192.168.178.192 ────────────────────────────────── │ Proxmox VE 9.1.7 · 16 cores · 65 GB RAM · ~3 TB Disk │ │ ● Netdata Agent v2.10.3 (Cloud-Anbindung neu claimen!) │ ● diverse CTs/VMs (siehe Backup-Doku) │ ⚠ ~152 Updates pending — vor Reboot Kernel-Pakete prüfen └───────────────────────────────────────────────────────────────────── ┌─ DSSEC · 192.168.178.3 ───────────────────────────────────── │ Synology NAS · SMB-Freigabe als Proxmox-Backup-Storage │ └─ Off-Site: pCloud via rclone (Restic-Repo) └─────────────────────────────────────────────────────────────────────

📌 Meine Notizen zu dieser Sektion

🛠️ Wie mache ich…?

TL;DR
Die häufigsten Tasks als Quick-Reference. Für Details immer in die jeweilige Original-Doku springen.

SSH-Zugriff

# Vom Mac (bigbrain@MacBook-Pro-von-Steffen) per ed25519-Key:
ssh root@192.168.178.8           # scpve (Haupt-Proxmox)
ssh root@192.168.178.192         # pveforum
ssh bigbrain@192.168.178.131     # Docker-Host LXC 133
ssh bigbrain@192.168.178.121     # CoolDB-VM (alias: catta-DB)
ssh root@192.168.178.122         # Webserver-VM

LXC anlegen, starten, stoppen, löschen

# Liste aller LXCs
pct list

# LXC starten / stoppen
pct start <ID>
pct stop  <ID>
pct shutdown <ID>

# In LXC reingehen
pct enter <ID>          # direkt rein (root)
pct exec  <ID> -- <cmd> # einen Befehl ausführen

# Aus Template klonen (LXC 120 ist Debian-13-Template)
pct clone 120 <NEUE-ID> --hostname neuer-name --full

# Endgültig löschen
pct destroy <ID>

VM anlegen, starten, stoppen

qm list                  # alle VMs
qm start <ID>
qm shutdown <ID>
qm stop <ID>             # hart!
qm destroy <ID>           # löschen

Docker-Stacks auf LXC 133 verwalten

Alle Stacks liegen unter /opt/stacks/. Dockge ist die GUI dafür auf :5001.

ssh bigbrain@192.168.178.131
cd /opt/stacks/<stack-name>
docker compose ps                         # Status
docker compose logs -f                    # Logs live
docker compose pull && docker compose up -d   # Update
docker compose down                       # Stoppen
docker compose up -d                      # (neu) starten

Neue Website / Subdomain anlegen (5 Schritte, ~10 min)

  1. App vorbereiten auf VM .122 (Verzeichnis, DB, config.php, Apache-Site)
  2. DNS-Record bei ipv64 anlegen (A-Record mit Präfix)
  3. DNS-Update-URL ins Cron-Skript auf VM .132 eintragen
  4. NPM Proxy Host auf .131:81 mit Let's-Encrypt-SSL anlegen
  5. Im Browser testen: https://meinedienst.rusti.ipv64.net

Detaillierte Anleitung mit allen Befehlen: Interaktiver Spickzettel 📄 Webserver-Doku

Logs lesen — wo ist was?

WoWasBefehl
Proxmox-HostSystem-Logjournalctl -xe
Proxmox-HostBackup-Logcat /var/log/vzdump/<id>.log
LXC 133Docker-Container-Logdocker logs <name> oder docker compose logs
LXC 133NPM-LogsNPM Web-UI → Streams oder /data/compose/4/data/logs/
VM 121/122Apache-Errorstail -30 /var/log/apache2/error.log
VM 132nginx-Errorstail -30 /var/log/nginx/error.log
VM 121Cron / Backuptail -f /var/log/syslog | grep CRON

Backup-Status prüfen

# Proxmox-Host: letzte Backups
ls -lh /var/lib/vz/dump/                                    # lokales Backup
ls -lh /mnt/pve/<synology-mount>/dump/                       # auf Synology

# CoolDB-VM: Restic-Snapshots in pCloud
ssh bigbrain@catta-DB
sudo -E restic -r rclone:pcloud:Backups/CoolDB-Catta-Restic snapshots

📌 Meine Notizen zu dieser Sektion

🔄 Updates

TL;DR
Update-Reihenfolge: Erst pveforum (weniger kritisch), dann scpve. Vor jedem Host-Update Snapshot von wichtigen VMs/LXCs. Docker-Stacks via Dockge oder compose pull && up -d pro Stack.

Proxmox-Host Updates

Vorbereitung (immer!)

  1. Snapshots der wichtigsten VMs/LXCs anlegen (mind. LXC 133, VM 121, VM 122, LXC 124)
  2. Wartungsfenster ankündigen — alle laufenden Sessions schließen
  3. Pending-Updates prüfen: apt list --upgradable 2>/dev/null | wc -l
  4. Schauen ob ein Kernel-Update dabei ist → dann ist Reboot Pflicht:
    apt list --upgradable 2>/dev/null | grep -E 'proxmox-kernel|pve-kernel|linux-image'

Update durchführen

# Auf dem jeweiligen Host
ssh root@192.168.178.8    # oder .192

apt update
apt list --upgradable    # Letzter Blick was kommt
apt dist-upgrade -y      # WICHTIG: dist-upgrade, nicht nur upgrade

# Nach Kernel-Update: reboot
reboot

Nach dem Update prüfen

pveversion -v             # Version + Kernel
pct list                  # LXCs alle wieder hochgekommen?
qm list                   # VMs alle wieder hochgekommen?
systemctl status pve-cluster pvedaemon pveproxy pvestatd
Reihenfolge bei 2 Hosts: Erst pveforum (.192) updaten und testen → läuft alles? Dann scpve (.8). Falls eine VM auf scpve abhängig ist von einer auf pveforum, kann die in der Zwischenzeit migriert werden.

Major-Upgrade Proxmox VE 8 → 9

Falls noch jemals nötig: Der komplette Pfad ist in der Original-Doku dokumentiert. Kernpunkte:

  • Alle VMs/LXCs vorher sichern
  • System komplett auf 8.4.x aktuell bringen
  • pve8to9-Check fahren — alle Warnungen abarbeiten
  • Repos auf trixie umstellen
  • apt dist-upgrade → Reboot

📂 Komplette Upgrade-Doku öffnen

VM/LXC Updates (Debian/Ubuntu)

# In den Container/VM einsteigen
ssh root@<ip>     # oder pct enter <id>

apt update
apt dist-upgrade -y
apt autoremove -y
apt autoclean

# Reboot wenn neuer Kernel (bei VMs) oder bei systemd/glibc-Updates
reboot

Docker-Container / Stacks updaten

Variante 1: Per Stack über die Shell (LXC 133)

ssh bigbrain@192.168.178.131
cd /opt/stacks/nginx-proxymanager    # oder /dockge, /crowdsec, ...
docker compose pull
docker compose up -d
docker compose ps                     # Status prüfen
docker image prune -f                 # alte Images aufräumen

Variante 2: Per Dockge-GUI

Browser → http://192.168.178.131:5001 → Stack auswählen → Update. Dockge zeigt Pull + Restart live.

Update-Reihenfolge der Docker-Stacks

  1. CrowdSec (Security zuerst — neue Patterns/CVEs)
  2. MariaDB-Aria (vorsichtig: Backup vorher!)
  3. nginx-proxy-manager (kurz erreichbar nicht — Reverse Proxy!)
  4. Dockge (zuletzt — egal wenn kurz weg)
Vor MariaDB-Update: Datenbank-Dump erstellen:
docker exec mariadb-aria mysqldump -uroot -p<pw> --all-databases > backup-$(date +%F).sql

Update-Erinnerungen (Empfehlung)

KomponenteFrequenzNach Update prüfen
Proxmox-HostsmonatlichVMs/LXCs wieder online, Cluster ok
Debian/Ubuntu VMsmonatlich (Security weekly via unattended-upgrades)Dienste laufen, kein Reboot-needed nach apt
Docker-StacksmonatlichContainer alle healthy, Logs sauber
CrowdSecwöchentlich (Collections)cscli collections list
Backups testenmonatlich (Restore-Test!)siehe Backup-Sektion

📌 Meine Notizen zu dieser Sektion

💾 Backups & Restore

TL;DR · 3-2-1-Strategie
3 Kopien (Live + Lokal + Remote) · 2 verschiedene Medien (SSD + NAS/Cloud) · 1 Off-Site (pCloud). Backups laufen täglich nachts. Restore-Test monatlich!
📚 Tiefer einsteigen: Die komplette Backup-Architektur mit allen Skripten (Host-Config-Backup, Sync-Skript zu pCloud, Email-Versand) findest du in der Original-Doku. 📂 Backup-Architektur öffnen 🚨 CoolDB-Recovery

Wo liegen die Sicherungen?

Speicher-OrtWas liegt daTypRetention
scpve lokal
backup-lokal-sata
vzdump-Backups aller VMs/LXCs auf scpveSATA-SSD am Mini-PCkurz (1–2 Wochen)
pveforum lokalvzdump-Backups aller VMs/LXCs auf pveforuminternes Storagekurz
DSSEC (NAS, .3)vzdump-Backups beider Hosts via SMB-MountSynology NASmittel-lang
pCloud (Off-Site)App-Daten der CoolDB (Restic-Repo) + Sync von DSSECCloud-Storagelang

Wer macht was?

Proxmox-Backup-Jobs

In Datacenter → Backup definiert. Pro Host ein Job, Ziel: lokales Storage + Synology-Mount.

# Auf dem Host: vzdump manuell
vzdump <id> --mode snapshot --storage backup-lokal-sata --compress zstd

# Backup-Konfiguration ansehen
cat /etc/pve/jobs.cfg

Host-Config-Backup (Proxmox selbst)

Eigenes Skript sichert /etc/pve/, /etc/network/, /root/ etc. nach DSSEC. Details + Skript-Code siehe Original-Doku.

App-Daten der CoolDB (VM 121)

Eigener Restic-Backup-Pfad (unabhängig vom Proxmox-Backup):

/usr/local/bin/cooldb-backup.sh       # Backup-Skript (täglich 03:00 via cron.d)
/usr/local/bin/cooldb-bak-rotate.sh   # Rotation
/root/.restic-password                # Restic-Passwort
/root/.config/rclone/rclone.conf      # pCloud-Token

# Restic-Repo
rclone:pcloud:Backups/CoolDB-Catta-Restic

Sync-Skript DSSEC → pCloud

Auf der Synology läuft ein Aufgabenplaner-Job, der per rclone alle Backups nach pCloud spiegelt. Pfad und Quellcode siehe Original-Doku.

Backups prüfen — täglich/wöchentlich

Schnellcheck (5 Min wöchentlich)

# Auf jedem Proxmox-Host
ls -lh /var/lib/vz/dump/ | tail -10               # neueste Backups
ls -lh /mnt/pve/<synology-mount>/dump/ | tail -10  # auf Synology
journalctl -u vzdump --since "1 week ago" | grep -E "ERROR|FAIL"

# Restic auf VM 121
ssh bigbrain@catta-DB
sudo -E restic -r rclone:pcloud:Backups/CoolDB-Catta-Restic snapshots | tail -5
sudo -E restic -r rclone:pcloud:Backups/CoolDB-Catta-Restic check

Restore-Test (monatlich)

  1. Eine VM/LXC aus Backup als neue ID wiederherstellen (nicht überschreiben!)
  2. Test-VM hochfahren, prüfen ob Dienst läuft
  3. Wieder löschen

Restore-Szenarien

Szenario A — Einzelne VM/LXC zurückspielen

# In Proxmox-GUI:
#   Storage (backup-lokal-sata / synology) → Backups → Eintrag wählen → Restore
#   ⚠ Bei "Restore as new VM" andere ID wählen, sonst wird das Original überschrieben

# Per CLI:
qmrestore  /var/lib/vz/dump/vzdump-qemu-121-...vma.zst <neue-id>     # für VMs
pct restore <neue-id> /var/lib/vz/dump/vzdump-lxc-133-...tar.zst    # für LXCs

Szenario B — Aus pCloud restoren (Synology kaputt)

Backup-Pakete erst per rclone copy von pCloud auf einen Proxmox-Host kopieren, dann wie Szenario A.

Szenario C — Kompletter Proxmox-Host neu

  1. Proxmox VE 9.x von ISO neu installieren
  2. Storages neu einbinden (Synology-SMB, ZFS-POOL1)
  3. Host-Config-Backup zurückspielen (/etc/pve/, Netzwerk, etc.)
  4. VMs/LXCs einzeln aus Backup restoren

Szenario D — CoolDB-VM komplett verloren

Komplette Schritt-für-Schritt-Anleitung in der separaten Recovery-Doku (Recovery.html). Voraussetzung: Recovery-Bundle mit rclone.conf, .restic-password, Skripten, msmtprc auf USB-Stick.

⚠ Ohne Recovery-Bundle kein Restore möglich! Das Bundle enthält die Geheimnisse (Tokens, Passwörter). Es muss außerhalb des Homelabs vorgehalten werden (USB-Stick, Mac, KeePass o.ä.).

📌 Meine Notizen zu dieser Sektion

🖥️ Proxmox-Hosts

scpve Haupt-Host
192.168.178.8 · vmbr0/enp1s0
  • Proxmox VE 9.1, Kernel 6.17.13-9-pve
  • Storage: ZFS-POOL1 (Subvolumes für LXCs)
  • Backup-Storage: backup-lokal-sata + DSSEC-SMB
  • Bridges: vmbr0 aktiv · vmbr1-3 (192.168.180/190/200.8) kein Carrier
  • Web-UI: https://192.168.178.8:8006

VMs/LXCs hier

LXC 101 NetWatch, LXC 120 template, LXC 121 test, VM 121 CoolDB, LXC/VM 122 g50zeiten, LXC 123 g50risc, LXC 124 hausi, LXC 131 (alt), LXC 132 nginx, LXC 133 Docker-NPM (Hub)

pveforum Zweit-Host
192.168.178.192
  • Proxmox VE 9.1.7, 16 cores, 65 GB RAM, ~3 TB Disk
  • Netdata Agent v2.10.3 (Major-Upgrade von 1.45 am 26.05.2026)
  • Repos: Deb822 unter /etc/apt/sources.list.d/netdata.sources (stable/trixie)
  • Web-UI: https://192.168.178.192:8006

TODOs

  • Netdata Cloud neu claimen (Token holen)
  • ~152 Updates einspielen — vorher Kernel-Pakete prüfen
  • apt autoremove für libzpool6linux

📌 Meine Notizen zu dieser Sektion

📦 VMs & LXCs im Detail

VM 121 · CoolDB-Catta ★ kritisch
192.168.178.121 · Hostname: 121-CoolDB-Catta · Debian 13 Trixie

Zweck: Eigene Datenbank-Web-App (Cool_DB Catta) — Vault-Items, ToDos, Anhänge mit großen Files.

Stack

  • Apache 2.4.66 (mod rewrite/ssl/php)
  • PHP 8.4.16 (mit 9 Modulen)
  • MariaDB 11.8.6 · cooldb/cooluser
  • max_allowed_packet: 128M (wegen Anhängen)
  • App-Pfad: /var/www/cool

Backups (eigenständig)

  • Skript: /usr/local/bin/cooldb-backup.sh (täglich 03:00 via cron.d)
  • Ziel: rclone:pcloud:Backups/CoolDB-Catta-Restic
  • Restic 0.18.0 + rclone (pCloud)

Security

  • UFW: 80/tcp, 443, 22/tcp nur aus 192.168.178.0/24
  • SSH-Key vom Mac, Alias catta-DB

📄 Komplette App-Doku 🚨 Recovery

VM 122 · g50zeiten
192.168.178.122 · Debian / Apache

Zweck: Multi-App-Webserver für mehrere PHP/MySQL-Anwendungen.

Apps

  • g50zeiten — Zeitenrechner (Haupt-App)
  • abos — Abo-Verwaltung
  • doki — Doki (Dokumenten-Tool)
  • stunden — Stundenabrechnung
  • treckertreff — Tretbeckenreinigungs-Team

Architektur

Apache Virtual Hosts pro App. Public über NPM auf .131 → Let's Encrypt → Subdomain auf rusti.ipv64.net. DNS-Updates per Cron auf .132.

📄 Webserver-Admin 📄 Abos 📄 Doki 📄 Stunden 📄 Treckertreff

LXC 124 · Hausi
192.168.178.124 · Debian 13 LXC

Zweck: Hausi-Web-App (eigene Anwendung, Setup ab Null dokumentiert).

Stack

  • Python-Backend (Flask/FastAPI) als systemd-Service
  • MariaDB 11.8
  • 2FA für Admin-Login
  • nginx-Reverse-Proxy (optional, sonst direkt)

📄 Hausi komplett (Setup + API + Backup)

LXC 132 · Webserver-nginx
192.168.178.132 · Ubuntu 24.04 LTS · nginx 1.24

Zweck: Statische Doku-Seiten + zentrale ipv64-DNS-Update-Skripte für alle dynamischen IPs.

Wichtige Pfade

/etc/cron.d/ipv64-update      # Cron-Job
/usr/local/bin/ipv64-update.sh # Update-Skript
/var/log/ipv64-update.log     # Log

📄 nginx-Admin-Doku

LXC 101 · NetWatch
192.168.178.101 · Debian 13

Zweck: NetWatch — Netzwerk-Monitoring-Tool.

📄 NetWatch Setup

LXC 131 · alter Docker-Host Fallback
aktuell gestoppt · Debian 12 Bookworm · TurnKey-Erbe

Alter Docker-Host vor der Migration zu LXC 133. Bleibt 1–2 Wochen als Fallback. Snapshot "pre-migration" vorhanden.

Danach: löschen.

📄 Alter Host (Fallback-Inventur)

📌 Meine Notizen zu dieser Sektion

🐳 Docker-Stacks auf LXC 133

TL;DR
Alle Stacks unter /opt/stacks/<name>. GUI: Dockge auf :5001. Eingang von außen läuft über NPM mit Let's-Encrypt-Certs.
StackImage / VersionPfadPortsZweck
nginx-proxy-manager jc21/nginx-proxy-manager v2.14.0 /opt/stacks/nginx-proxymanager/ 80, 81 (admin), 443 Reverse Proxy mit 15 Hosts, Let's-Encrypt-Certs
mariadb-aria jc21/mariadb-aria v10.11.5 /opt/stacks/nginx-proxymanager/ 3306 (intern) DB-Backend für NPM (User: npm/npm/npm)
dockge louislam/dockge:latest /opt/stacks/dockge/ 5001 Compose-GUI, liest direkt aus /opt/stacks/
crowdsec crowdsecurity/crowdsec v1.7.8 /opt/stacks/crowdsec/ 8080 (lokal), 6060 (metrics) Security-Engine, liest SSH+NPM-Logs

Bind-Mounts NPM

/data/compose/4/data         # NPM-Konfiguration
/data/compose/4/letsencrypt  # SSL-Zertifikate
/data/compose/4/mysql        # MariaDB-Daten

Bewusst NICHT übernommen aus alter Migration

  • Portainer — durch Dockge ersetzt
  • Drawio — nicht mehr genutzt

Bei Bedarf einfach neue Stacks unter /opt/stacks/ anlegen.

📌 Meine Notizen zu dieser Sektion

🛡️ Security

Defense-in-Depth · 3 Schichten
1. Community Intel via CrowdSec CAPI · 2. Live Log-Analyse (SSH, NPM, HTTP-CVE) · 3. iptables-Bouncer am Host. Fail2Ban gestoppt & disabled (CrowdSec ersetzt es).

CrowdSec Setup

  • Engine: Docker-Container auf LXC 133, API auf 127.0.0.1:8080
  • Collections: linux, sshd, nginx, nginx-proxy-manager, http-cve
  • Bouncer: iptables-bouncer v0.0.34 am Host (nicht im Container — von GitHub-Release, kein apt-Paket in Trixie)
  • NPM-Bouncer verworfen: Lua-Lib fehlt im NPM-Image

Wichtige Befehle

# Auf LXC 133:
docker exec crowdsec cscli decisions list    # Aktive Bans
docker exec crowdsec cscli alerts list       # Alert-Historie
docker exec crowdsec cscli collections list  # Installierte Collections
docker exec crowdsec cscli metrics           # Engine-Metriken

# iptables-Bans am Host prüfen
iptables -L CROWDSEC_CHAIN -n | head -20

Firewall-Regeln (UFW auf VM 121)

sudo ufw status verbose
# Erwartung:
#   80/tcp     ALLOW IN  Anywhere
#   443        ALLOW IN  Anywhere
#   22/tcp     ALLOW IN  192.168.178.0/24    ← SSH nur aus LAN!

📌 Meine Notizen zu dieser Sektion

🚑 Troubleshooting

"VM/LXC startet nicht"

# Status checken
pct status <id>      # für LXC
qm status <id>        # für VM

# Detail-Log
journalctl -u pve-container@<id> -n 50
qm showcmd <id>      # gibt KVM-Kommandozeile aus

# Häufige Ursachen:
# 1. Storage voll → df -h
# 2. Snapshot blockiert → qm/pct listsnapshot
# 3. RAM überbucht → cat /proc/meminfo
# 4. Lock-File → /var/lock/qemu-server/lock-<id>.conf entfernen (vorsichtig!)

"Subdomain nicht erreichbar (502 oder Connection refused)"

  1. NPM-Status prüfen: http://.131:81 → Stream-Status
  2. Backend-Erreichbarkeit von LXC 133 aus: curl -I http://192.168.178.122/
  3. Apache/nginx-Log auf Backend-VM: tail -30 /var/log/apache2/error.log
  4. DNS-Update auf .132: tail -20 /var/log/ipv64-update.log
  5. CrowdSec ban? docker exec crowdsec cscli decisions list | grep <ip>

"Backup fehlgeschlagen"

# Proxmox-Backup-Log
cat /var/log/vzdump/<id>-<date>.log

# Storage voll?
df -h
zpool list                 # auf scpve

# Snapshot hängt? 
zfs list -t snapshot | grep <id>

# Synology nicht erreichbar?
mount | grep synology
ping 192.168.178.3

"CoolDB: Anhänge laden nicht"

Meist max_allowed_packet zu klein:

sudo mysql -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
# Sollwert: 134217728  (= 128 MB)
# Falls weniger: /etc/mysql/mariadb.conf.d/50-server.cnf prüfen + restart

"CoolDB: Mail kommt nicht an"

echo "test $(date)" | msmtp deine@mail
# Bei Fehler: /etc/msmtprc prüfen (Permissions 640, owner root:msmtp)

"rclone/Restic: Invalid access_token"

# pCloud-Token abgelaufen — neu generieren
sudo rclone config reconnect pcloud:

"NPM-Update kaputt — kein Web-UI mehr"

cd /opt/stacks/nginx-proxymanager
docker compose logs nginx-proxy-manager | tail -50
docker compose down
docker compose up -d
# Im Notfall: vorherige Version festsetzen in docker-compose.yml

"Proxmox-Update: Reboot, aber VMs starten nicht"

  1. systemctl status pve-cluster pveproxy pvedaemon pvestatd
  2. Storage-Mounts prüfen: pvesm status
  3. ZFS-Pool: zpool status
  4. Auto-Start verfügbar: cat /etc/pve/qemu-server/<id>.conf | grep onboot

📌 Meine Notizen zu dieser Sektion

📖 Glossar

BegriffBedeutung
scpveHaupt-Proxmox-Host (Mini-PC, 192.168.178.8)
pveforumZweiter Proxmox-Host (192.168.178.192)
DSSECSynology-NAS auf .3, Backup-Ziel
LXCLinux Container — leichtgewichtige Virtualisierung in Proxmox
VMVirtual Machine — vollwertige Virtualisierung (KVM)
CTContainer — Synonym für LXC (in Proxmox-CLI)
NPMNginx Proxy Manager — Reverse-Proxy-GUI (jc21/nginx-proxy-manager)
DockgeDocker-Compose-GUI (louislam/dockge) auf :5001
CrowdSecSecurity-Engine, Community-basiert (Nachfolger von Fail2Ban)
ResticBackup-Tool (verschlüsselt, dedupliziert) für CoolDB-Daten nach pCloud
rclone"rsync für Cloud" — Sync zu pCloud
vzdumpProxmox-eigenes Backup-Tool für VMs/LXCs
ipv64Dyn-DNS-Anbieter, Domain rusti.ipv64.net
ZFS-POOL1ZFS-Storage-Pool auf scpve für LXC-Subvolumes
backup-lokal-sataLokale Backup-SSD am scpve
CoolDB / CattaEigene Web-App auf VM 121 (PHP/MariaDB)
g50zeitenWeb-App auf VM 122 — Zeitenrechner
HausiEigene Web-App auf LXC 124 (Python + MariaDB)
NetWatchNetzwerk-Monitoring-Tool auf LXC 101
CAPICrowdSec Central API — pullt Community-Blocklists
Recovery-BundleUSB-Stick mit Geheimnissen (rclone.conf, Restic-PW, Skripte) für CoolDB-Restore
catta-DBSSH-Alias vom Mac auf VM 121 (bigbrain@192.168.178.121)
bigbrainUsername auf den Linux-VMs für SSH-Zugang vom Mac

📌 Meine Notizen zu dieser Sektion

📚 Original-Dokus · Direkt-Übersicht

Alle 17 Dokus liegen auf dem Server unter docs/. Die übersichtliche Auswahl mit Filterung, Tags und "Wann brauchst du das?"-Hinweisen findest du in der Doku-Bibliothek. Unten die schnelle Direkt-Übersicht:

DateiTitelInhalt
homelab-zine.htmlhomelab.steffen — Issue 26.05.26Migrations-Geschichte LXC 131→133, Infra-Map, Defense-in-Depth
proxmox-backup-dokumentation.htmlBackup-Architektur DSSEC + ProxmoxKomplette Backup-Strategie, Skripte, 4 Restore-Szenarien
proxmox-upgrade-8-zu-9.htmlProxmox VE 8.4.1 → 9.1Major-Upgrade Step-by-Step
anleitung-proxmox-debian.htmlNetWatch — Installation auf Proxmox/Debian 13LXC 101 Setup
lxc131-dashboard.htmlLXC 131 · Docker-Debian ÜbersichtAlter Docker-Host (Debian 12 Bookworm) — Fallback
linux-handbuch.htmlLinux Administrator HandbuchAllgemeine Linux-Befehle
docs.htmlCool_DB Catta · Komplette DokuVM 121, Apache/PHP/MariaDB, App-Architektur
Recovery.htmlCool_DB-Catta RecoveryDisaster-Recovery für VM 121 (komplett ab Null)
hausi-doku.htmlHausi — Technische DokuLXC 124, Python+MariaDB, Setup ab Null
webserver-doku.htmlWebserver g50zeiten — Admin-DokuVM 122 + .132 DNS-Updates, 10-min-Quick-Start
webserver-nginx-132-doku.htmlWebserver-Nginx (.132)LXC 132, nginx, ipv64-Update-Skripte
abos-122-doku.htmlAbo-VerwaltungApp auf VM 122
doki-122-doku.htmlDokiApp auf VM 122
stunden-doku.htmlStundenabrechnungApp auf VM 122 (= stunden-122-doku, Duplikat)
treckertreff-doku.htmlTretbeckenreinigungs-TeamApp auf VM 122 (= treckertreff-122-doku, Duplikat)
website-spickzettel.htmlNeue Website anlegen — SpickzettelQuick-Start neue Subdomain
doku.htmlVPN-MonitorShell-Skript für VPN-Verbindungs-Monitoring (Mac-Tool, kein Server-Bestandteil)
Duplikate aussortiert: stunden-122-doku.html = stunden-doku.html und treckertreff-122-doku.html = treckertreff-doku.html (identische MD5-Hashes).

📌 Meine Notizen zu dieser Sektion