Phase 2f-1 hatte verdaccio von der Mini auf die GPU-Box verlegt — das
Storage-Volume kam dort aber nie an. Der GPU-Container war leer (keine
htpasswd, keine @mana/*-Pakete), externe `npm install @mana/foo` lief
auf 404. Rollback statt Storage-Migration nachzuholen, weil:
- Mini's Standalone-Verdaccio (~/projects/verdaccio/) hat alle Daten
inklusive claudebot-Service-Account und 9 published Pakete
- npm-Reads sind ohnehin niedrig (CI-builds), Mini-Disk hat Platz
- Vereinfacht den User-/Token-Pflad-Lebenszyklus (eine Quelle, keine
Sync-Choreografie)
Cleanup:
- DNS npm.mana.how zurück auf Mini-Tunnel via Cloudflare-API
- Mini cloudflared-config.yml: npm.mana.how-Ingress wieder eingetragen
- GPU-Box: verdaccio-Container + 3 Volumes entfernt (mana_verdaccio-storage,
mana_verdaccio-plugins, verdaccio-storage)
- infrastructure/docker-compose.gpu-box.yml: verdaccio-Service-Block raus
- infrastructure/verdaccio/config.yaml: gelöscht (war GPU-spezifischer
Bundle, der Code/mana hat die kanonische Kopie für Mini)
- docs/PLAN_OPTION_C.md: Phase 2f markiert als ⚠️ teilweise zurückgerollt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.9 KiB
Infrastructure Compose Files
Compose-Stacks die nicht direkt am Mac-Mini hängen.
docker-compose.gpu-box.yml
Mana-Stack auf der Windows-GPU-Box (Hostname mana-server-gpu, IP 192.168.178.11)
in WSL2/Docker. Bekam mit Phase 2 (Mai 2026) die nicht-zeitkritischen
Hilfsdienste vom Mini abgegeben — siehe docs/PLAN_OPTION_C.md.
Was läuft drin
| Service | Port (LAN-internal/external via Tunnel) | Rolle |
|---|---|---|
grafana |
:8000 → grafana.mana.how |
Dashboards (Phase 2a) |
forgejo |
:3041 → git.mana.how |
Git-Mirror (Phase 2b) |
umami |
:8010 → stats.mana.how |
Web-Analytics (Phase 2b) |
victoriametrics |
:9090 (intern) |
Metrics-Store (Phase 2c) |
loki |
:3100 (intern) |
Log-Store (Phase 2c) |
pushgateway, blackbox-exporter, vmalert, alertmanager, alert-notifier |
(intern) | Metrics + Alerting (Phase 2c) |
gpu-node-exporter, gpu-cadvisor, gpu-promtail |
(intern) | Self-Monitoring (Phase 2c) |
glitchtip + worker + dedizierte postgres + redis |
:8020 → glitchtip.mana.how |
Error-Tracking mit eigenem DB-Stack (Phase 2d) |
status-page-gen, status-nginx |
:8090 → status.mana.how |
Status-Seite (Phase 2e) |
news-ingester |
(intern) | RSS-Crawl + News-Ingestion (Phase 2f-2) |
mana-ai |
:3067 → mana-ai.mana.how |
AI Mission Runner (Phase 2f-3) |
mana-research |
:3068 → research.mana.how |
Web-Research-Orchestrator (Phase 2g) |
Plus der bestehende photon-Container (Geocoder), der vor Phase 2 schon
auf der Box existierte und unangetastet blieb.
Live-Files auf der GPU-Box
/srv/mana/
├── docker-compose.gpu-box.yml ← Diese Datei (live deployment)
├── .env ← Secrets, gitignored — Vorlage in .env.gpu-box.example
├── monitoring/ ← Configs (rsync von Mini bei Phase 2c)
│ ├── prometheus/ ← prometheus.yml mit 192.168.178.131-Targets, alerts.yml
│ ├── grafana/ ← provisioning + dashboards
│ ├── loki/, blackbox/, alertmanager/, alert-notifier/, promtail-gpu/
├── forgejo-data/ ← Forgejo /data bind-mount (rsync von Mini bei Phase 2b)
└── source/ ← Sparse mana-monorepo-clone
für status-page-gen + zukünftige Scripts
git pull stündlich via systemd timer mana-source-pull.timer
Deployment
# Auf der GPU-Box, in /srv/mana/:
docker compose -f docker-compose.gpu-box.yml up -d
docker compose -f docker-compose.gpu-box.yml ps
Repo-File ist Source-of-Truth; Live-Datei in /srv/mana/ muss synchron
gehalten werden. Aktuell manuell — kein CD-Flow für die GPU-Box.
Cloudflare-Tunnel
Token-managed Windows-Service Cloudflared mit Tunnel
mana-gpu-server (UUID 83454e8e-d7f5-4954-b2cb-0307c2dba7a6).
Ingress-Konfiguration via API + Cloudflare-Dashboard, NICHT in
config.yml. Aktuelle Public-Hostnames:
gpu-stt, gpu-tts, gpu-llm, gpu-img, gpu-video, gpu-ollama
(alle für die nativen AI-Scheduled-Tasks) plus
grafana, git, stats, glitchtip, status (alles *.mana.how,
für die Phase-2-Container hier).
Aktive Public-Hostnames (Stand 2026-05-07, config v28):
| Hostname | Service | Zweck |
|---|---|---|
gpu-stt.mana.how |
:3020 |
Whisper STT (Scheduled-Task) |
gpu-tts.mana.how |
:3022 |
Piper TTS |
gpu-llm.mana.how |
:3025 |
LLM Gateway |
gpu-img.mana.how |
:3023 |
FLUX image-gen |
gpu-video.mana.how |
:3026 |
Video-gen |
gpu-ollama.mana.how |
:11434 |
Ollama API |
grafana.mana.how |
:8000 |
Phase 2a |
git.mana.how |
:3041 |
Forgejo (Phase 2b) |
stats.mana.how |
:8010 |
Umami (Phase 2b) |
glitchtip.mana.how |
:8020 |
Glitchtip (Phase 2d) |
status.mana.how |
:8090 |
Status-Page (Phase 2e) |
photon.mana.how |
:2322 |
Photon Geocoder (cross-LAN-Workaround für mana-geocoding's Probe + privacy-local Provider) |
mana-ai.mana.how |
:3067 |
AI Mission Runner (Phase 2f-3) |
research.mana.how |
:3068 |
Web-Research-Orchestrator (Phase 2g) |
API-Update (idempotent):
# ssh mana-server, dann python3 mit dem cf-update-Pattern aus
# docs/PLAN_OPTION_C.md §4
Deps für die Box
- WSL2 mit Ubuntu 24.04
- Docker Engine in WSL2 mit
systemd=true .wslconfigmitmemory=24GB processors=12 vmIdleTimeout=-1 networkingMode=mirrored- Scheduled Task
MANA_WSL_Keepalivehält die WSL-VM viawsl --exec sleep infinitywarm - Systemd Timer
mana-source-pull.timergit-pulled/srv/mana/source/stündlich - Windows-Firewall offen für Ports 3100, 9090, 9091 (von Mini-side accessible)
netsh interface portproxyzwischen Windows-LAN-IP und WSL2-localhost für die obigen Ports
Alles dokumentiert in docs/WINDOWS_GPU_SERVER_SETUP.md.