Das Problem: 16 GB reichen nicht
Unser Mac Mini M4 hostet das komplette ManaCore-Oekosystem: 33 Docker-Container, PostgreSQL, Redis, MinIO, Forgejo, Matrix — plus Ollama (LLM), FLUX.2 (Bildgenerierung) und STT/TTS. Das Problem:
Docker Desktop VM: ~12.5 GB
Container (tatsaechlich): ~0.75 GB
macOS: ~1.5 GB
───────────────────────────────────
Benötigt: ~14.75 GB
Verfuegbar: 16 GB
Swap genutzt: 7.4 GB (!)
Docker Desktop allein frisst ~12.5 GB fuer seine Virtualisierungs-Schicht — obwohl die Container selbst nur 750 MiB brauchen. Dazu kam Ollama, das bei einem Chat-Request spontan 3-16 GB RAM beanspruchte. Das System war permanent am Swappen.
Loesung 1: AI-Workloads auf den GPU-Server
Wir haben einen Windows-PC mit einer NVIDIA RTX 3090 (24 GB VRAM) im selben Netzwerk. Die Idee: Mac Mini macht nur noch Hosting, der GPU-Server uebernimmt alle AI-Aufgaben.
Was wir geaendert haben
7 Endpoints in docker-compose.macmini.yml von host.docker.internal (lokal) auf 192.168.178.11 (GPU-Server via LAN) umgestellt:
| Service | Was | Vorher | Nachher |
|---|---|---|---|
| mana-llm | Ollama | Mac Mini (M4, 53 t/s) | RTX 3090 (~100 t/s) |
| picture-backend | Bildgenerierung | FLUX.2 lokal | GPU-Server |
| api-gateway | STT/TTS | Lokal | GPU-Server |
| mana-matrix-bot | Ollama + Voice | Lokal | GPU-Server |
Alle Werte sind als ${ENV_VAR:-default} konfiguriert — ein Env-Var-Wechsel genuegt zum Zurueckschalten.
Ergebnis
- Default-Modell von
gemma3:4baufgemma3:12bhochgestuft (GPU hat genug VRAM) - Parallele LLM-Requests von 1 auf 5 erhoeht
- ~1.1 GB RAM auf dem Mac Mini freigemacht (Ollama + FLUX.2 idle)
- Kein Risiko mehr, dass ein Chat-Request den Server zum Swappen bringt
Cloud-Fallback
mana-llm hat AUTO_FALLBACK_ENABLED=true — falls der GPU-Server offline ist, fallen Requests automatisch auf OpenRouter, Groq oder Google zurueck.
Loesung 2: Docker Desktop → Colima
Der groesste Hebel war aber nicht Ollama, sondern Docker Desktop selbst. Die Zahlen:
| Docker Desktop | Colima | |
|---|---|---|
| VM-Overhead | ~12.5 GB | ~0.3-0.5 GB |
| Startup | 15-30 Sekunden | 1-2 Sekunden |
| Disk I/O | VirtioFS (gut) | VirtioFS (gleich) |
| Lizenz | Proprietaer | MIT (Open Source) |
| Preis (Business) | $11/Monat pro User | Kostenlos |
Was ist Colima?
Colima ist ein Open-Source Container-Runtime fuer macOS. Es nutzt Lima als VM-Manager und Apple’s Virtualization.framework — dieselbe Technologie die auch Docker Desktop unter der Haube verwendet, aber ohne den ganzen Ballast der Docker Desktop GUI, dem Kubernetes-Cluster, und dem Electron-basierten Dashboard.
Entscheidend: Colima ist ein Drop-in-Replacement. Selbes docker-CLI, selbe docker-compose-Dateien, selbe Images. Null Code-Aenderungen.
Warum nicht OrbStack?
OrbStack waere technisch die performanteste Alternative (~200 MiB Overhead, eigener optimierter Disk-Treiber). Aber:
- Closed Source — wir koennen ManaCore nicht als Self-Hosted-Produkt verkaufen, wenn es eine proprietaere Runtime voraussetzt
- Lizenzkosten fuer Business Use ($8/Monat pro User)
- Vendor Lock-in — wenn OrbStack morgen die Preise erhoeht oder eingestellt wird, sind wir abhaengig
Colima unter MIT-Lizenz bedeutet: Jeder kann ManaCore installieren, ohne eine proprietaere Docker-Runtime kaufen zu muessen. Das passt zu unserer Self-Hosted-Philosophie.
Geschaetzte RAM-Ersparnis
Vorher (Docker Desktop):
VM + Backend + Helpers: ~13.4 GB
Container: ~0.75 GB
macOS: ~1.5 GB
Swap: 7.4 GB (!)
Frei: ~0.4 GB
Nachher (Colima):
Colima VM: ~0.4 GB
Container: ~0.75 GB
macOS: ~1.5 GB
Swap: ~0 GB
Frei: ~13.3 GB
~10 GB weniger RAM-Verbrauch. Das System geht von “permanentem Memory Pressure mit 7 GB Swap” zu “13 GB frei, null Swap”.
Migrations-Script
Wir haben ein vollstaendiges Migrations-Script geschrieben (scripts/mac-mini/migrate-to-colima.sh) das:
- Alle Named Volumes sichert (tar.gz auf externe SSD)
- PostgreSQL Dump erstellt (Sicherheitsnetz)
- Docker Desktop stoppt
- Colima installiert und konfiguriert
- Volumes wiederherstellt
- Container startet und verifiziert
- LaunchAgent fuer Autostart erstellt
Rollback: ./scripts/mac-mini/migrate-to-colima.sh --rollback
Loesung 3: Organic Growth Gate
Mit begrenzter Hardware wollen wir nicht ueberrascht werden. Deshalb haben wir ein taegliches Registrierungslimit in mana-auth eingefuehrt:
MAX_DAILY_SIGNUPS=5— pro Tag koennen sich maximal 5 neue User registrierenGET /api/v1/auth/signup-status— oeffentlicher Endpoint fuer die Signup-Page- Transparenz: “Heute noch 3 von 5 Plaetzen frei”
- 429 Response wenn Limit erreicht, mit
resetsAtTimestamp
Das Limit waechst mit der Hardware:
| Phase | Limit | Hardware |
|---|---|---|
| Start | 5/Tag | Mac Mini 16 GB |
| Phase 2 | 15/Tag | Mac Mini 32 GB oder zweiter Server |
| Phase 3 | 50/Tag | Multi-Server Setup |
Kapazitaet nach Optimierung
| Szenario | Vorher | Nachher |
|---|---|---|
| Local-First Apps (Todo, Calendar, etc.) | ~200 User | ~200 User |
| Mixed (Local-First + API) | ~50-100 User | ~100-150 User |
| Mit aktiver LLM-Nutzung | ~20-30 User | ~80-120 User |
| Peak (alles gleichzeitig) | ~20-30 User | ~200+ User |
Der Faktor ist ~7x mehr gleichzeitige User auf derselben Hardware.
Load Testing
Um das zu verifizieren, haben wir eine k6-basierte Load-Test-Suite erstellt:
web-apps.js— Alle 17 SvelteKit-Frontends, Ramp-up bis 50 VUsauth-api.js— Login, Register, Token Validation (testet auch Signup-Limit)sync-websocket.js— WebSocket-Connections zu mana-sync (bis 30 parallel)llm-ollama.js— Ollama-Inferenz auf GPU-Server (max 3 VUs)
brew install k6
k6 run load-tests/web-apps.js
Lizenz-Ueberblick (Self-Hosted Stack)
Da wir ManaCore als Self-Hosted-Produkt verkaufen wollen, ist jede Komponente bewusst gewaehlt:
| Komponente | Lizenz | Kommerziell OK |
|---|---|---|
| Colima | MIT | Ja, uneingeschraenkt |
| PostgreSQL | PostgreSQL (MIT-aehnlich) | Ja |
| Redis | BSD-3 | Ja |
| MinIO | AGPL-3.0 | Ja (als Service, ohne Modifikation) |
| Forgejo | MIT | Ja |
| Hono/Bun/SvelteKit | MIT | Ja |
| Better Auth | MIT | Ja |
Keine einzige Komponente im Stack erfordert eine proprietaere Lizenz.
Zusammenfassung
| Aenderung | Auswirkung |
|---|---|
| AI → GPU-Server | +3-16 GB RAM frei, 3x schnellere Inferenz |
| Docker Desktop → Colima | ~10 GB RAM gespart, MIT-Lizenz |
| Registrierungslimit | Hardware waechst mit Community |
| Load Tests | Kapazitaet messbar und verifizierbar |
Drei Commits, null Euro Zusatzkosten, ~7x mehr Kapazitaet auf derselben Hardware.