Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
13 KiB
System-Dokumentation: Simka Core Server
1. Wer oder was ist Simka?
Simka ist einer der beiden zentralen Pfeiler deiner hochperformanten, selbstgehosteten Keller-Server-Landschaft (neben dem zweiten Server Zora). Während Zora (dein Minisforum MS-R1 ARM64-Arbeitstier) primär für Core-Dienste und Datenhoheit zuständig ist, fungiert Simka als das eigentliche Performance- und Rechenzentrum im Keller.
Core-Spezifikationen & Hardware-Zustand (Stand: Mai 2026)
- Architektur: x86_64 High-Performance Mini-PC / Server.
- Betriebssystem / Hypervisor: Proxmox VE 9.2 (aktuell auf Kernel/PVE-Stand 9.2.2).
- Kühlung & Wartung: Frisch saniert im Mai 2026 mit ARCTIC MX-7 Wärmeleitpaste auf der CPU und ARCTIC TP-4 High-Performance Wärmeleitpads für optimale thermische Stabilität unter Volllast.
- Speichermedium: Ultraschnelle NVMe-SSDs für die lokale Container- und VM-Ausführung.
Das anstehende "Monster-Upgrade" (Lieferung bis Ende der Woche)
Simka wird in den nächsten Tagen hardwareseitig massiv aufgerüstet, um für lokale KI-Workloads und rechenintensive Pipelines bereitzuhoben:
- Arbeitsspeicher: Erweiterung auf 64 GB DDR5 4800Mhz RAM (maximale Kapazität für massives Multitasking und In-Memory-Datenbanken).
- Grafikkarte / GPU: PNY NVIDIA RTX 2000E Ada Generation
- Formfaktor: Single-Slot & Low-Profile (perfekt für kompakte Servergehäuse, zieht Strom rein über den PCIe-Steckplatz).
- Leistung: Extrem energieeffiziente Ada-Lovelace-Architektur mit maximal 50W TDP im Peak.
- VRAM: 16 GB Videospeicher mit ECC-Fehlerkorrektur – das absolute Fundament für den ausfallsicheren 24/7-Betrieb von lokalen LLMs (Large Language Models).
2. Netzwerk-Konfiguration in der Keller-Landschaft
Simka ist netzwerktechnisch perfekt redundant und isoliert aufgestellt. Die Kommunikation teilt sich auf zwei dedizierte Leitungen auf:
[ Erdgeschoss / Internet ]
│ (A1-Router / Fritzbox)
▼
[ Keller-Switch ]
│ │
│ (10.0.0.20)
│ ▼
│ ┌───────────┐
│ │ ZORA │◄──────┐
│ └───────────┘ │
│ (10.0.0.40) │ Der exklusive
└──────►┌───────────┐ │ Keller-Highway
│ SIMKA │ │ (192.168.99.X)
└───────────┘ │ Latenz: ~0.3 ms
▲ │
└───────────┘
A. Der primäre Uplink (vmbr0)
- Physisches Interface:
nic0 - Lokale IP:
10.0.0.40/24 - Gateway:
10.0.0.138(A1-Router / Fritzbox) - Zweck: Dieser Port verbindet Simka mit dem Hausnetzwerk und dem Internet. Über diesen Pfad greifst du via Pangolin-Tunnel (z. B. unter
https://fotos.mo-home.at) sicher von außen (Remote von der Arbeit) auf deine Dienste zu.
B. Der exklusive "Keller-Highway" (vmbr1) – Neu eingerichtet!
- Physisches Interface:
nic1(Direktverbindung per Standard-Netzwerkkabel zu Zoras Interfaceenp49s0). - Lokale IP:
192.168.99.2/24 - Gateway / DNS: Keines (isoliertes Subnetz).
- Status: Aktiviert mit Autostart bei Boot.
- Performance: Saubere 0,33 ms Latenz im Ping-Test, 0% Paketverlust.
- Zweck: Blitzschnelle, vom restlichen Heimnetzwerk komplett isolierte Direktverbindung zwischen Zora und Simka. Hierüber laufen zukünftig automatisierte Backup-Pipelines, CI/CD-Prozesse und der interne Datenaustausch, ohne das normale LAN oder die Router-CPU zu belasten.
3. Container & Dienste: Wer läuft wo?
Aktuell ist die Bereitstellung auf Simka modular und ressourceneffizient über Proxmox-Strukturen gelöst. Das Herzstück bildet die frisch migrierte Fotosammlung.
LXC-Container: simka-immich
- Umgebung:
/opt/immich - Konfiguration: Docker Compose Stack.
- Dienste im Stack:
immich_server: Das Hauptsystem der App (erreichbar lokal unterhttp://10.0.0.40:2283).immich_machine_learning: Zuständig für Objekterkennung und CLIP-Inferenz.immich_postgres: Die relationale Datenbank (PostgreSQL 14 mitpgvector/vectorchordErweiterung).immich_redis: In-Memory-Datenstruktur-Store für Caching und Job-Queues.
- Daten-Zustand:
- Datenbank: Erfolgreich importiert aus der
immich-db-backup.sql(610 MB an Metadaten, Pfaden und Strukturen). Die alte, leere Auto-Datenbank wurde zuvor sauber viadropdbgelöscht. - Bilderpool: Satte ~780 GB an Daten (131.578 Fotos/Videos) liegen direkt lokal auf Simkas schneller NVMe-SSD.
- Aktueller Betriebsmodus: Reine CPU-Ausführung (x86_64). Die Mitternachts-Jobs und Worker-Anzahlen für Video-Transcoding sind CPU-schonend konfiguriert (max. 1–2 Worker), um den Server bis zum Wochenende nicht zu überlasten.
- Zugriff: Voll funktionsfähig lokal sowie mobil über die Android-App via Pangolin-Tunnel (Plattform-SSO wurde für den reibungslosen API-Sync der App deaktiviert).
- Datenbank: Erfolgreich importiert aus der
4. Die Roadmap für das kommende Wochenende 🚀
Sobald die Hardware geliefert wurde, wird Simka schrittweise zum KI-Kraftpaket ausgebaut:
- Hardware-Injektion: Einbau der 64 GB DDR5 RAM und der NVIDIA RTX 2000E Ada.
- Die "Simka Core AI" VM: Erstellung einer dedizierten virtuellen Maschine (z. B. Ubuntu/Fedora Server) in Proxmox.
- PCIe-Passthrough: Die RTX 2000E wird exklusiv direkt in diese KI-VM durchgereicht.
- LLM-Infrastruktur: Installation von Ollama. Dank der 16 GB ECC-VRAM laden wir dort mächtige Coding-Modelle wie
qwen2.5-coder:7b(oder quantisierte 14b-Versionen) für blitzschnelle Code-Generierung in deiner IntelliJ-IDE auf deinem Ubuntu-Entwicklungs-PC.
- Immich-Beschleunigung: Umstellung des
simka-immichDocker-Stacks auf GPU-Inferenz. Die 88 Tensor-Kerne der RTX übernehmen dann die Gesichtserkennung und das Video-Transcoding in Millisekunden, wodurch die CPU komplett entlastet wird. - CI/CD-Ausbau: Migration des Gitea-Runners für dein Projekt Meldestelle aus der alten VM-Infrastruktur in einen schlanken, nativen LXC-Container auf Simka, der über den 0,3-ms-Highway direkt an dein Gitea auf Zora andockt.
5. Architektur- und Betriebs-Einschätzung (Ablage)
🏗️ [Lead Architect]
Einschätzung der Architektur
- Starker, sinnvoller Plattform-Split: Zora = Core/Control-Plane, Simka = Compute/Throughput. Das entspricht einer sauberen Trennung von „Authority“ und „Acceleration“ und passt zur Desktop-/Offline‑First Strategie der Meldestelle.
- Netzwerk-Topologie mit dediziertem „Keller-Highway“ (vmbr1, 192.168.99.0/24) ist genau richtig für Replikation, CI/CD und Bulk-Daten. Minimiert Latenz/Jitter und entkoppelt vom Heimnetz.
- Hardware-Entscheidung: RTX 2000E Ada (16 GB ECC, 50 W) ist ein hoch‑effizienter, 24/7‑tauglicher Inferenz‑Beschleuniger. Für LLMs bis 7B (FP16) und 14B (ggf. quantisiert) sowie NVENC/Transcoding ist sie sehr passend. Gegenüber „dickeren“ Karten (z. B. 4090/6000 Ada) verlierst du Peak‑Throughput, gewinnst aber Effizienz, Geräusch, thermische Stabilität und ECC.
Architektur-Empfehlungen (kurz & konkret)
- Datenpfade klar trennen:
- „Hot“ AI/Transcode scratch auf lokaler NVMe (Simka)
- „Warm“ Artifacts/Backups via vmbr1 zu Zora
- Standards definieren (Doku‑as‑Code):
- ADR: „GPU‑Passthrough für Compute‑VMs“ (Begründung, Alternativen, Trade‑offs)
- ADR: „LXC vs. VM für Runner/Builds“ (siehe DevOps‑Teil)
- Observability als Querschnitt: Einheitliche Metrik‑Namen/Labels für Hosts, VMs, LXC (Node exporter/Nvidia exporter), damit Kapazitätsplanung reproduzierbar ist.
🐧 [DevOps Engineer]
Was ist gut gelaufen
- Proxmox VE 9.2 auf aktuellem Stand, dedizierter LXC‑Stack für Immich, Ping‑Latenz ~0,33 ms auf vmbr1: sehr solide Grundlage.
- Saubere Migration der Immich‑Datenbank und großer Medienpool lokal auf NVMe → I/O‑Bottlenecks minimiert.
Konkreter Wochenend‑Plan (Checkliste)
- Hardware‑Einbau und Firmware
- RAM auf 64 GB einsetzen, Memtest (mind. 1 Pass) → Verifikation erforderlich.
- GPU einsetzen; BIOS/UEFI:
- Primäre Anzeige auf iGPU/Onboard setzen (damit dGPU frei für Passthrough bleibt)
- Resizable BAR an (falls angeboten), SR‑IOV/IOMMU aktiv.
- Proxmox: NVIDIA GPU‑Passthrough für KI‑VM
- Kernel/Boot: IOMMU aktivieren (
amd_iommu=on), Neustart; prüfen, dass GPU in eigenem IOMMU‑Group landet. - Host:
vfio-pcibinden, Nouveau/NVIDIA‑Hosttreiber nicht laden (Host soll die GPU nicht claimen). - VM anlegen (Ubuntu Server LTS oder Fedora Server), PCIe‑Gerät hinzufügen (GPU + ggf. GPU‑Audio Function), MSI‑Interrupts aktivieren.
- In‑Guest: NVIDIA Treiber + CUDA/CuDNN installieren;
nvidia-smimuss die Karte stabil zeigen.
- „Simka Core AI“ VM: Modelle & Runtime
- Ollama + optional OpenWebUI installieren.
- Modelle (Beispiele mit 16 GB VRAM):
- qwen2.5‑coder:7b (FP16) oder 14b quantisiert (Q4_K_M/Q6_K)
- DeepSeek‑coder 6.7B, Llama‑3.1/3.2 8B Instruct quantisiert für Tools/Chat
- Policies:
- Max. Parallelität und KV‑Cache Limits definieren, um OOM zu vermeiden.
- Watchdog/Service‑Unit für automatischen Neustart bei Treiber‑Resets.
- Immich auf GPU beschleunigen
- Auf dem LXC‑Host NVIDIA Container Toolkit bereitstellen oder, falls LXC zu restriktiv ist: Immich in eine leichte VM oder in einen privilegierten LXC migrieren.
- docker‑compose Anpassungen:
immich_machine_learningmit--gpus=all/runtime: nvidia- FFmpeg HWAccel aktivieren:
-hwaccel cuda -hwaccel_output_format cuda -c:v h264_nvenc/hevc_nvenc - Worker‑Limits neu justieren (mehr Transcode‑Jobs, wenn GPU an Bord)
- Verifikation: Testtranscode und Embedding‑Job messen (Metriken/Logs sichern).
- Gitea Runner Migration (Meldestelle CI/CD)
- Entscheidung: LXC vs. VM
- LXC (privileged,
nesting=1,keyctl=1) ist ressourcenschonend, aber Docker‑in‑LXC erfordert Sorgfalt. - Alternativ: kleine „Runner‑VM“ mit Docker – oft robuster bei komplexen Build‑Needs (z. B. Android/Compose Desktop Toolchains).
- LXC (privileged,
- Netzwerk: Runner nutzt vmbr1, verbindet sich mit Gitea auf Zora, DNS via Hostfile/Static Route, kein Default‑GW nötig.
- Caching: Maven/Gradle Cache persistent auf separatem Volume; Artefakt‑Upload über vmbr1.
- Netzwerk‑Feinschliff
- vmbr1 ohne Gateway belassen; auf Hosts
metric/Policy‑Routing setzen, damit Traffic für 192.168.99.0/24 strikt lokal bleibt. - Optional Jumbo Frames (MTU 9000) testen, wenn NICs/Switch/Direct‑Link es stabil können.
- Proxmox‑Firewall:
- vmbr0 restriktiv (nur notwendige Ingress‑Ports)
- vmbr1 nur Host‑zu‑Host/Backup/CI erlauben
- Backup & Wiederherstellung
- Immich: DB Dumps (pg_dump) + Objekt‑Speicher Sync via vmbr1 zu Zora (z. B. borg/restic/ZFS send‑recv).
- Proxmox: regelmäßige VM/LXC Snapshots + Offhost‑Kopie.
- Recovery‑Drills: 1x/Quartal Wiederherstellung in Test‑VM durchführen → „Verifikation ausstehend“ bis Log vorhanden.
- Observability & Betrieb
- Node Exporter + NVIDIA DCGM/Exporter auf Simka; Prometheus/Grafana auf Zora aggregiert.
- Alarme: NVMe Wear‑Level, GPU ECC Errors, Temp, OOM‑Kills, Docker/Container Restarts.
- Energie: Optional
nvidia-smi -plPower‑Limit dokumentieren (wenn thermisch nötig), persistent via Systemd Unit.
Risiken/Watchouts
- LXC + GPU ist möglich, aber distributions‑/kernel‑abhängig; wenn Treiber‑Bindung hakelt, früh auf VM umschwenken.
- RTX 2000E hat 16 GB VRAM: bei mehreren gleichzeitigen LLM‑Sessions aggressiv quantisieren oder serielle Ausführung planen.
- Pangolin‑Tunnel: Secrets/Token sicher hinterlegen und Rotation terminieren; 2FA erzwingen.
🧹 [Curator]
Dokumentations- und Abschluss‑Tasks
- Dieses „Simka Core Server“ Dokument ist ein sehr guter Start. Ergänze bitte:
- Abschnitt „Verifikation/Beweise“ mit Links/Screenshots/Logs zu: Memtest,
nvidia-smi, Immich‑GPU‑Transcode‑Probe, Ollama Inferenz‑Benchmark, CI‑Runner „connected“ Status. - ADR‑Einträge unter
docs/01_Architecture/ADRs/:- ADR‑00X „Dedizierter Keller‑Highway (vmbr1) für Bulk/CI/Backup“
- ADR‑00X „GPU‑Passthrough für KI‑VM auf Proxmox“
- ADR‑00X „Runner: LXC (privileged) vs. kleine VM – Entscheidung & Gründe“
- Runbook „Simka Operations“: Boot‑Reihenfolge, Health‑Checks, Troubleshooting (GPU Reset, Treiber‑Reinstall, Container‑Restart).
- Abschnitt „Verifikation/Beweise“ mit Links/Screenshots/Logs zu: Memtest,
- Anti‑Halluzinations‑Protokoll anwenden:
- Kein „erledigt“ ohne Build/Test‑Beweis; markiere alle neuen Punkte als „Verifikation ausstehend“, bis Logs/Artefakte abgelegt sind.
- Inventar & Versionen pflegen:
- BIOS/UEFI‑Version, Proxmox‑Kernel, NVIDIA‑Treiber, Docker Compose Hash, Immich Version, DB Schema Version.
Verifikation/Beweise (Platzhalter – Verifikation ausstehend)
- Memtest86+ Log (mind. 1 Pass, fehlerfrei)
nvidia-smiAusgabe in der KI‑VM (GPU erkannt, ECC aktiv, Treiber‑Version)- Immich: GPU‑beschleunigter Transcode‑Test (Log + Metriken)
- Ollama: Inferenz‑Benchmark (Modell + Prompt + Zeit + VRAM‑Auslastung)
- Gitea Runner: „connected“ Status + Beispiel‑Build‑Log über vmbr1