Homelab MSI
Architektur · Homelab · August 2026
Linux-Host wing im Heimnetz. Öffentliche Dienste laufen hinter einem ausgehenden Cloudflare Named Tunnel — der Router bleibt zu.
Host wing · 192.168.0.104
Domain b2badgen.com
Tunnel ausgehend, kein Port-Forward
Stack Docker · systemd --user
Prinzip: Der MSI holt Verbindungen über Cloudflare heraus.
Öffentlich sind nur stockwing.b2badgen.com
(App + MCP) und grok.b2badgen.com (Terminal).
Filme und LAN-Direktzugriff bleiben im Heimnetz.
Internet-Edge (Cloudflare)
basic auth StockWing Web
- Named Tunnel → Caddy :80 → Next.js
- Login: wingman1 (Caddy basic_auth)
secret path MCP + Sheets-API
https://stockwing.b2badgen.com/s/<geheim>/mcp
- Tunnel-Pfad
^/s/…→ MCP :3101 (ohne Caddy-Auth) - Grok-Tool
get_stock_brief - REST: /search, /sheet, /brief
basic auth Grok Web-Terminal
- Named Tunnel → ttyd :7681 → interaktive Shell
- dort:
grokwie lokal am MSI
MSI Linux-Host · wing
docker compose StockWing App-Host
Caddy :80Reverse-Proxy · basic_auth · Access-Log
↓
app (Next.js) :3000UI · /api/search · /api/stock · DCF · Guidance
↓
pyservice (FastAPI) :8001yfinance · SEC/EDGAR · Finnhub · FRED · SimFin
svc Begleitdienste
- stockwing-mcp — Node :3101, ruft stockwing-brief.py
- grok-terminal — ttyd :7681, nur localhost
- cloudflared-app-host — Named Tunnel, Hosts stockwing + grok
- ollama.service — lokales LLM, Fallback / offline
Ports (lokal / LAN)
:80 Caddy / StockWing
:3101 MCP (localhost)
:7681 ttyd (localhost)
:8096 Jellyfin (LAN)
Wer nutzt was
Thomas (Owner)
- MSI vor Ort / Desktop-Icons
- StockWing Web + Grok-Terminal
- Nutzungs- & Watchlist-Mails
- Grok CLI + MCP-Tools (lokal)
Yannick (Dev)
- Code per Git / E-Mail-Patch
- StockWing testen (Web)
- Deploy-Mails → MSI
- optional SSH im Heimnetz
Andere / unterwegs
- Browser → stockwing.b2badgen.com
- Chrome → grok.b2badgen.com
- Grok App → StockWing-MCP
- Handy/TV → Jellyfin (nur WLAN)
Automation & Mail
timer Tägliche Nutzung
- 06:30 UTC → Caddy-Access-Log
- Mail an Thomas + Yannick
- Ticker, Sessions, Browser
timer Watchlist-Essay
- 07:00 UTC → HTML-Report
- Snapshots unter data/watchlist-essay/
Deploy-Pfade
deploy.sh(git pull + build)- Mail-Deploy (Yannick → Grok)
- Desktop: StockWing-Mail-Deploy
Nur Heimnetz (LAN)
lan Jellyfin Media
http://192.168.0.104:8096
- Docker: media-server/ · Filme: WD Elements USB
- Mount: /mnt/wd-elements
- Desktop: Filme-Stream starten/stoppen
- kein Cloudflare / nicht öffentlich
LAN-Direktzugriff StockWing
http://192.168.0.104/
- gleiche Caddy-Auth wie öffentlich
Desktop-Shortcuts
- StockWing starten / stoppen
- StockWing-Mail-Deploy
- Filme-Stream starten / stoppen
Sicherheitsmodell
- Kein Port-Forward am Router
- Tunnel nur ausgehend
- Web-App: Basic Auth
- MCP: langer geheimer URL-Pfad
- ttyd: eigenes Passwort + nur localhost
- Secrets nur unter private/ & .env
- Jellyfin bleibt im LAN
Externe Datenquellen
Marktdaten (pyservice)
- Yahoo Finance (Default), SEC EDGAR
- Finnhub, Alpha Vantage, SimFin, FRED, FMP
Cloud-Integrationen (Grok MCP)
- Gmail · Calendar · Drive · Outlook · Tasks · Voice
- StockWing-Brief (dieses Setup)
Wichtige Pfade
~/app-host/— App, Caddy, Scripts, Secrets~/app-host/data/caddy-logs/— Zugriffe StockWing~/app-host/private/— Passwörter, MCP-Token~/.cloudflared/config.yml— Tunnel-Ingress~/.grok/skills/stockwing-analyse/— Analyse-Skill~/Backups/— MSI-StockWing-Backups
Dienste (systemd --user, aktiv): cloudflared-app-host · grok-terminal · stockwing-mcp · ollama · stockwing-daily-usage.timer · stockwing-watchlist-essay.timer · cloudflared-stockwing-mcp (Quick-Tunnel-Fallback)
Dokumentation auf dem Host: ~/app-host/README.md · GROK-TERMINAL.md · DEPLOY.md · MAIL-DEPLOY.md · mcp-stockwing/README.md · media-server/README.md