Homelab: Proxmox-Cluster
Selbst gebauter 3-Node-Proxmox-Cluster mit HA, getrennten VLANs, eigener Firewall, zentralem Backup und über 30 selbst gehosteten Diensten — vollständig dokumentiert als Git-Repository.
ProxmoxOPNsenseDockerZFSPBS
IT-Infrastruktur · Netzwerk & Security · Virtualisierung
Ich betreue die IT-Infrastruktur einer Münchner Privatbank — Netzwerk, Firewalls, Virtualisierung. Privat betreibe ich ein eigenes kleines Rechenzentrum: drei Server, segmentiertes Netz, alles als Code dokumentiert. In die IT bin ich als Quereinsteiger gekommen — ohne klassische IT-Ausbildung, dafür mit umso mehr Eigenantrieb. Dass ich nach Feierabend freiwillig genau das mache, was ich beruflich tue, sagt vermutlich mehr über mich als jedes Anschreiben.
robin@homelab
Rolle: Spezialist IT-Service — Infra & Virtualisierung
Arbeitgeber: Merkur Privatbank, München
Homelab: 3-Node-Proxmox-Cluster · 30+ Dienste
Stack: OPNsense · VMware · Ansible · Docker
Fokus: Infrastructure as Code
Uptime: in der IT seit 2018 — begeistert deutlich länger
$ play ·
München
pfSenseSophosLANCOMVMwareSANWindows ServerPRTGSIEM
München
VMwareDataCorePRTG
Memmingen
Windows ServerCitrix
Memmingen
Mein Homelab ist mein Labor: Hier probiere ich Technologien aus, bevor ich sie ernst nehme, und betreibe alles, was ich selbst hosten kann. Es läuft produktiv für die ganze Familie — Ausfälle fallen also auf.
Selbst gebauter 3-Node-Proxmox-Cluster mit HA, getrennten VLANs, eigener Firewall, zentralem Backup und über 30 selbst gehosteten Diensten — vollständig dokumentiert als Git-Repository.
ProxmoxOPNsenseDockerZFSPBS
Schrittweise Migration des Homelabs auf deklarative Provisionierung: OpenTofu erstellt die Container, Ansible konfiguriert sie, die Docker-Compose-Stacks deployt Komodo per GitOps direkt aus dem Git-Repo — CI prüft jede Änderung.
OpenTofuAnsibleDocker ComposeKomodoForgejo ActionsSOPS
Drei kurze Ausschnitte aus meinem Homelab-Repository — für die Veröffentlichung umgeschrieben und anonymisiert, aber echt in Struktur und Stil. Aufklappen zum Lesen.
Ansible-Playbook (Ausschnitt): alle Container werden in Batches aktualisiert; nach dem Upgrade prüft ein Healthcheck den Docker-Stack — auffällige Hosts werden angehalten statt weitergerollt.
- name: Update LXC containers in controlled batches
hosts: lxc_all
serial: 5
tasks:
- name: Apply pending upgrades
ansible.builtin.apt:
update_cache: true
upgrade: dist
- name: Health check — compose stack still running?
ansible.builtin.command: docker compose ps --status running -q
args:
chdir: /opt/{{ service_name }}
register: health
changed_when: false
failed_when: health.stdout == ""
- name: Hold host for manual review instead of rolling on
ansible.builtin.file:
path: /var/lib/updates/hold/{{ inventory_hostname }}
state: touch
when: health is failed So entsteht ein neuer LXC: ein OpenTofu-Modulaufruf. Die Konventionen (Template, unprivilegiert, Backup, Löschschutz) erzwingt das Modul — nicht die Disziplin des Aufrufers.
module "webapp01" {
source = "./modules/lxc-standard"
hostname = "webapp01"
vmid = 4210
ip_address = "192.0.2.10/24" # documentation range — real IPs stay private
gateway = "192.0.2.1"
target_node = "node01"
cores = 2
memory_mb = 2048
disk_gb = 16
# the module enforces the conventions, not the caller:
# Debian 12 template, unprivileged, onboot, firewall on,
# backups scheduled, prevent_destroy unless marked otherwise
tags = ["docker", "web"]
destroyable = false
} Das Git-Repo ist die Wahrheit: Ein Timer vergleicht den Live-Cluster mit dem Inventar und meldet Abweichungen per Push-Nachricht.
#!/usr/bin/env bash
# Nightly: is the live cluster still what the Git repo says it is?
set -euo pipefail
repo=/opt/homelab
"$repo/scripts/collect/guests.sh" > "$repo/inventory/guests.yml"
cd "$repo"
if git diff --quiet -I '^# generated:' -- inventory/; then
exit 0 # no drift — stay silent
fi
git diff --stat -- inventory/ | tail -1 \
| curl -s -H "Title: inventory drift detected" -H "Priority: high" \
-d @- "https://ntfy.example.org/alerts" Auch unter Zeitdruck Übersicht behalten, strukturiert priorisieren und sauber kommunizieren — hektisch wird es von allein.
Patch-, Change- und Incident-Management mit Test und Freigabe — Änderungen an produktiven Systemen brauchen einen Rückweg.
Technische Dokumentation und Notfallanweisungen entstehen mit der Änderung — nicht irgendwann danach.
Jede Entscheidung, jedes Runbook, jedes Inventar liegt versioniert im Git-Repo. Was nicht dokumentiert ist, existiert nicht.
Gehärtete Container, minimale Rechte, verschlüsselte Secrets, kein direkter Zugang von außen.
Was zweimal manuell gemacht wurde, wird beim dritten Mal ein Skript, ein Playbook oder eine Pipeline.
Neue Technologien werden im Lab evaluiert, dokumentiert und erst dann produktiv eingesetzt.
Am schnellsten erreichen Sie mich per E-Mail.
game over —