Initiale Infrastruktur-Dokumentation pve1 und pve2.

Enthält Host-Doku, MQTT/HA, Git-Setup, Power-Monitoring und GPU-Idle (pve2).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
root
2026-06-27 19:53:55 +02:00
commit 6f52d46267
24 changed files with 1549 additions and 0 deletions
+129
View File
@@ -0,0 +1,129 @@
# 06 — Ansible-Automatisierung
## Konzept
**Ansible legt keine Crons in den Containern an.**
Stattdessen:
1. Auf dem **Proxmox-Host** existiert ein **Cron-Job** (wöchentlich)
2. Der Cron startet ein **Shell-Script**
3. Das Script führt **`ansible-playbook`** aus
4. Ansible verbindet sich per **SSH** zu den CTs und führt Wartungs-Tasks aus
```
/etc/cron.weekly/pve-lxc-disk-maintenance
↓ (Symlink)
/root/ansible/run-disk-maintenance.sh
ansible-playbook playbooks/disk-maintenance.yml
↓ SSH
docker (101) · media (109) · AIDEV (110)
```
## Verzeichnisstruktur
```
/root/ansible/
├── ansible.cfg
├── run-disk-maintenance.sh → von cron.weekly aufgerufen
├── inventory/
│ ├── hosts.yml → Hosts + CT-spezifische Variablen
│ └── group_vars/all.yml → globale Schwellwerte
├── playbooks/
│ └── disk-maintenance.yml
└── roles/
└── disk_cleanup/
├── defaults/main.yml
├── tasks/main.yml
└── handlers/main.yml
```
## Verwaltete Hosts
| Ansible-Host | VMID | IP | Besonderheiten |
|--------------|------|-----|----------------|
| docker | 101 | 192.168.10.101 | Frigate-Pfade auf `/mnt/records` |
| media | 109 | 192.168.20.6 | Jellyfin-Cache-Pfad |
| aidev | 110 | 10.100.2.13 | Dev-Tooling optional |
SSH als `root` vom Proxmox-Host — Key-Auth war bereits eingerichtet.
## Was das Playbook macht
| Task | Beschreibung |
|------|--------------|
| Journal | `journalctl --vacuum-size=200M` |
| apt | `autoclean` / `autoremove` / `clean` |
| Docker-Logs | Dateien >50 MB auf 10 MB kürzen |
| Docker | Gestoppte Container (>7 T.), dangling Images, Build-Cache (>14 T.) |
| Docker-Volumes | Nur **dangling** Volumes |
| daemon.json | Log-Limits `10m` × `3` — nur wenn Datei noch nicht existiert |
| fstrim | `/` im Container (**wichtig für Thin-Pool**) |
| Frigate | Aufnahme-Ordner älter als 30 Tage löschen |
| Jellyfin | Cache-Dateien älter als 30 Tage löschen |
### Tags (optional)
```bash
# Alles (Standard)
ansible-playbook playbooks/disk-maintenance.yml
# Nur aggressive Image-Bereinigung zusätzlich
ansible-playbook playbooks/disk-maintenance.yml --tags aggressive
# Nur Frigate oder Jellyfin
ansible-playbook playbooks/disk-maintenance.yml --tags frigate
ansible-playbook playbooks/disk-maintenance.yml --tags jellyfin
```
## Cron
```bash
ls -la /etc/cron.weekly/pve-lxc-disk-maintenance
# → Symlink nach /root/ansible/run-disk-maintenance.sh
```
- **Intervall:** `cron.weekly` (typisch Sonntag morgens)
- **Log:** `/var/log/pve-lxc-disk-maintenance.log`
### Cron deaktivieren
```bash
rm /etc/cron.weekly/pve-lxc-disk-maintenance
```
### Cron auf täglich umstellen (Beispiel)
```bash
echo '0 3 * * * root /root/ansible/run-disk-maintenance.sh' > /etc/cron.d/pve-lxc-disk-maintenance
```
## Konfiguration anpassen
Globale Werte: `/root/ansible/inventory/group_vars/all.yml`
```yaml
journal_max_size: 200M
docker_prune_stopped_containers_older_than: 168h # 7 Tage
docker_prune_unused_images_older_than: 336h # 14 Tage (Tag: aggressive)
frigate_recordings_retain_days: 30
jellyfin_cache_max_age_days: 30
fstrim_enabled: true
```
Host-spezifisch in `inventory/hosts.yml` (z. B. Frigate-Pfade nur auf `docker`).
## Voraussetzungen
- **Ansible** auf dem Proxmox-Host installiert (`apt install ansible`)
- **SSH** vom Host zu den CTs als root
- CTs müssen laufen (für SSH)
## Manuell testen
```bash
/root/ansible/run-disk-maintenance.sh
# oder
cd /root/ansible && ansible-playbook playbooks/disk-maintenance.yml
```