Workflow: Infrastructure¶
Proxmox, LXC, Docker und Homelab-Setups planen und umsetzen.
Übersicht¶
| Aspekt | Details |
|---|---|
| Ziel | Reproduzierbare Infrastruktur-Deployments |
| Features | Plan Mode, Background Tasks, Skills |
| Scope | Proxmox, LXC, Docker, Networking |
| Output | Configs, Scripts, Dokumentation |
Feature-Kombination¶
┌─────────────────────────────────────────────────────────┐
│ PLAN MODE │
│ Architektur planen, Dependencies klären │
└───────────────────────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ CONFIG GENERIERUNG │
│ docker-compose, LXC configs, Ansible │
└───────────────────────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ BACKGROUND TASKS │
│ Deployment-Tests, Validierung │
└─────────────────────────────────────────────────────────┘
Workflow: Neuen Service deployen¶
Schritt 1: Anforderung beschreiben¶
Ich will Wazuh (SIEM) auf Proxmox deployen:
Ressourcen:
- 1 Manager Node
- 2 Worker Nodes (für Skalierung)
- Elasticsearch Cluster
Constraints:
- Proxmox VE 8.x
- LXC bevorzugt wo möglich
- Separate VLANs für Management und Data
Output: Deployment-Plan + Configs
Schritt 2: Plan Mode für Architektur¶
Claude liefert strukturierten Plan:
## Wazuh Deployment Plan
### Architektur
```text
┌─────────────┐ ┌─────────────┐
│ Wazuh │ │ Elastic │
│ Dashboard │────▶│ Kibana │
│ (LXC 201) │ │ (LXC 204) │
└─────────────┘ └─────────────┘
│ │
▼ ▼
┌─────────────┐ ┌───────────────┐
│ Wazuh │────▶│ Elasticsearch │
│ Manager │ │ Cluster │
│ (LXC 202) │ │ (VM 205-207) │
└─────────────┘ └───────────────┘
│
├────────────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Wazuh │ │ Wazuh │
│ Worker 1 │ │ Worker 2 │
│ (LXC 203) │ │ (LXC 204) │
└─────────────┘ └─────────────┘
Ressourcen¶
| Node | Typ | vCPU | RAM | Disk | VLAN |
|---|---|---|---|---|---|
| Dashboard | LXC | 2 | 4GB | 20GB | 10 |
| Manager | LXC | 4 | 8GB | 50GB | 10 |
| Worker 1 | LXC | 4 | 8GB | 50GB | 10 |
| Worker 2 | LXC | 4 | 8GB | 50GB | 10 |
| ES Node 1 | VM | 4 | 16GB | 200GB | 20 |
| ES Node 2 | VM | 4 | 16GB | 200GB | 20 |
| ES Node 3 | VM | 4 | 16GB | 200GB | 20 |
Deployment-Reihenfolge¶
- Netzwerk (VLANs, Firewall Rules)
- Elasticsearch Cluster
- Wazuh Manager
- Wazuh Workers
- Dashboard
- Agent-Enrollment testen Der Plan sieht gut aus. Generiere:
- LXC Create-Scripts für Proxmox
- Ansible Playbook für Wazuh Installation
- docker-compose für lokales Testing Erstelle docker-compose für Traefik + Authentik:
Requirements: - Traefik als Reverse Proxy - Authentik für SSO - Let's Encrypt Certs - Redis für Authentik
Network: proxy_net (extern) Volumes: in /opt/container-name/ Kein version: in compose file
Output:
```yaml
# /opt/traefik/docker-compose.yml
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./config:/etc/traefik:ro
- ./certs:/certs
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy_net
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=authentik@docker"
networks:
proxy_net:
external: true
Multi-Service Stack¶
Erstelle kompletten Monitoring Stack:
- Prometheus
- Grafana
- Alertmanager
- Node Exporter (als DaemonSet-Äquivalent)
Alle Services in einem Compose-File.
Persistente Volumes.
Interne Kommunikation über Docker Network.
Workflow: LXC auf Proxmox¶
LXC Template¶
Erstelle Proxmox LXC Config für einen Docker-Host:
Template: debian-12-standard
Resources: 4 vCPU, 8GB RAM, 50GB Disk
Network: VLAN 10, DHCP
Features: nesting=1, keyctl=1 (für Docker)
Output:
1. pct create Command
2. Post-Install Script für Docker
Output:
#!/bin/bash
# Create Docker-Host LXC
VMID=300
TEMPLATE="local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst"
STORAGE="local-zfs"
HOSTNAME="docker-host-01"
pct create $VMID $TEMPLATE \
--hostname $HOSTNAME \
--cores 4 \
--memory 8192 \
--swap 0 \
--rootfs $STORAGE:50 \
--net0 name=eth0,bridge=vmbr0,tag=10,ip=dhcp \
--features nesting=1,keyctl=1 \
--unprivileged 1 \
--onboot 1 \
--start 0
# Post-Create Setup
pct start $VMID
sleep 10
pct exec $VMID -- bash -c '
apt update && apt upgrade -y
apt install -y curl gnupg lsb-release
# Docker Install
curl -fsSL https://get.docker.com | sh
# Docker Compose Plugin
apt install -y docker-compose-plugin
# User Setup
useradd -m -s /bin/bash admin
usermod -aG docker admin
'
echo "LXC $VMID ($HOSTNAME) created and configured"
Workflow: Netzwerk-Design¶
VLAN-Struktur¶
Plane VLAN-Struktur für Homelab:
Anforderungen:
- Management (Proxmox, IPMI)
- Production Services (Docker, VMs)
- IoT (isoliert)
- Guest (isoliert, Internet only)
- Storage (nur intern)
Firewall: OPNsense
Switches: Managed, VLAN-fähig
Output: VLAN-Plan + Firewall-Regeln
IP-Adressierung¶
Erstelle IP-Adressierungsplan:
Netz: 10.0.0.0/16
VLANs: 10, 20, 30, 40, 50 (wie oben)
Pro VLAN:
- Subnetz
- Gateway (auf OPNsense)
- DHCP Range
- Statische IPs (Bereich)
- DNS Server
Infra-Skill erstellen¶
# ~/.claude/skills/infrastructure/SKILL.md
---
name: infra
description: Plant und generiert Infrastructure Configs.
Aktiviert bei Proxmox, LXC, Docker, VLAN, Deployment.
---
# Infrastructure Generator
## Proxmox Standards
- LXC IDs: 100-199 (Templates), 200-299 (Prod), 300-399 (Dev)
- VM IDs: 1000-1999 (Prod), 2000-2999 (Dev)
- Storage: local-zfs für VMs, local für ISOs
## Docker Standards
- Compose Files ohne version:
- Volumes in /opt/container-name/
- Networks: proxy_net (extern), app_net (intern)
- Restart: unless-stopped
- Container Namen: service-name (keine Underscores)
## Netzwerk Standards
- VLAN 1: Native (nicht nutzen)
- VLAN 10: Management
- VLAN 20: Production
- VLAN 30: Development
- VLAN 40: IoT
- VLAN 50: Guest
- VLAN 99: Storage
## Output Formate
- Shell Scripts für Proxmox
- docker-compose.yml für Docker
- Ansible Playbooks für Automation
- Markdown für Dokumentation
Tipps für gute Ergebnisse¶
DO ✅¶
Plane Deployment für Immich (Photo Management):
Umgebung:
- Proxmox VE 8.2
- LXC mit Docker (nesting enabled)
- Storage: NFS Share für Photos
- Reverse Proxy: Traefik (bereits vorhanden)
- Auth: Authentik (bereits vorhanden)
Ressourcen:
- Max 4 vCPU, 8GB RAM
- Photos-Volume extern
Output:
1. LXC Create Script
2. docker-compose.yml
3. Traefik Labels für Routing
4. Backup-Strategie
Klare Umgebung, Constraints, gewünschter Output.
DON'T ❌¶
Welches OS? Welche Docker-Version? Welcher Use Case?
TIPP: Iterativ deployen 💡¶
Nicht alles auf einmal, sondern:
# Erst Basis
Erstelle LXC für Docker Host
# Test, dann erweitern
Jetzt docker-compose für den ersten Service
# Dann Integration
Füge Traefik Labels hinzu
TIPP: Validierung im Background 💡¶
Validiere diese docker-compose im Background:
- Syntax Check (docker compose config)
- Image Pull Test
- Port-Konflikte prüfen
Ich arbeite währenddessen am nächsten Service.
Kosten-Optimierung¶
| Szenario | Empfehlung |
|---|---|
| Einzelner Service | Sonnet direkt |
| Komplexe Architektur | Plan Mode + Sonnet |
| Multi-Service Stack | Plan Mode + Haiku Sub-Agents |
| Migration | Sub-Agents pro Service |
Troubleshooting¶
LXC startet nicht¶
LXC 201 startet nicht mit Fehler:
[Error Message]
Config:
@/etc/pve/lxc/201.conf
Diagnose und Fix bitte.
Docker Network Probleme¶
Container können sich nicht erreichen:
- Container A: docker-compose.yml A
- Container B: docker-compose.yml B
Beide sollen über proxy_net kommunizieren.
Aktuelle Configs:
[Configs einfügen]
Storage voll¶
ZFS Pool ist 85% voll.
Aktuelle Nutzung: zfs list
Was kann ich aufräumen?
Welche Snapshots sind sicher zu löschen?
Best Practices¶
Infrastructure as Code: Immer reproduzierbar¶
Kein manuelles Klicken das nicht dokumentiert ist:
Erstelle für alle Proxmox-Änderungen:
1. Den Shell-Command oder pct-Command
2. Ein Ansible-Playbook das denselben Zustand herstellt
3. Einen Kommentar: Warum diese Einstellung?
Ziel: Vom Nullzustand reproduzierbar in < 2 Stunden.
Staging-First Workflow¶
Für Homelab / MSP-Infrastruktur:
Anforderung beschreiben
↓
Plan Mode: Architektur planen
↓
Lokal testen (docker compose oder Proxmox Dev-Node)
↓
Review & Anpassung
↓
Produktiv deployen
Claude-Prompt für Staging-Setup:
Erstelle zusätzlich zur Produktiv-Config:
- docker-compose.override.yml für lokales Testing
- Kommentare welche Variablen für Staging anzupassen sind
- Smoke-Test-Script das die wichtigsten Funktionen prüft
Container-Standards für Konsistenz¶
Konsistente Labels und Struktur erleichtern das spätere Management:
# Standard-Labels für alle Services
labels:
- "traefik.enable=true"
- "com.example.service=${SERVICE_NAME}"
- "com.example.version=${VERSION:-latest}"
- "com.example.owner=homelab"
Erstelle docker-compose mit unseren Standards:
- Volumes in /opt/${service}/data/
- Kein `version:` Header (deprecated)
- restart: unless-stopped für alle Services
- Labels: traefik.enable + service-name
- Networks: proxy_net (extern) + app-intern (intern)
Backup-Strategie vor dem Deployment¶
Proxmox Snapshots als Sicherheitsnetz:
# Snapshot vor Major-Änderungen (Claude-Prompt)
Erstelle ein Script das:
1. Snapshot aller betroffenen LXC/VMs macht (pct/qm snapshot)
2. Naming: "pre-[change-description]-[date]"
3. Nach erfolgreichem Test: Snapshot löschen
4. Bei Rollback: pct/qm rollback + Log der Aktion
Netzwerk-Changes: Immer Out-of-Band¶
Beim Ändern von Netzwerk-Konfigurationen:
Vor dem Erstellen des Scripts: Erkläre mir
was passiert wenn Schritt 3 fehlschlägt.
Gibt es einen Fall wo ich den Management-Zugriff verliere?
Wenn ja: Wie stelle ich ihn wieder her?
Claude denkt Rollback-Szenarien mit wenn man explizit fragt.