Deployment
Wie eine Brain-Instanz aufgesetzt wird — Business zentral auf maniak-ähnlichem Server, Personal lokal auf Mac/VPS.
Stand: Plan-Level. Konkrete Befehle, Dockerfiles und Setup-Skripte kommen in Phase 6. Diese Datei fixiert die Architektur des Deployments.
1. Business Brain (auf 46.225.238.83 / ground.kuble.com)
Voraussetzungen (bereits erfüllt, Stand 2026-04-17)
- Ubuntu 24.04 LTS auf dem Server
- Docker 29+, docker-compose-plugin
- Node 22+ (nicht auf dem Host nötig, läuft in Container — aber praktisch für Admin-CLI)
ground.kuble.comDNS → Server-IP- SSH-Zugang als root (perspektivisch: SSH-Keys, kein Passwort-Login)
- Server sauber (siehe Wipe-Log in Memory
kuble-servers.md)
Topologie auf dem Host
/opt/gts/ ← Code + data root
├── compose.yaml ← docker compose
├── .env ← secrets (NEVER committed)
├── traefik/
│ ├── dynamic.yaml
│ └── acme.json ← Let's Encrypt storage
├── data/ ← volumes, persistent
│ ├── brains/ ← git-Repo (Source of Truth)
│ │ ├── .git/
│ │ ├── brains/slow/
│ │ ├── brains/rapid/
│ │ └── .gts/
│ │ ├── meta.sqlite
│ │ └── config.yaml
│ └── backups/ ← periodic git bundle + sqlite dump
└── logs/
Docker-Komponenten
| Service | Image | Port (intern) | Domain |
|---|---|---|---|
gts-traefik |
traefik:3.x |
80, 443 public | — (Proxy) |
gts-server |
gts/server:<version> |
3000 internal | ground.kuble.com |
gts-mcp |
gts/mcp:<version> |
4000 internal | (nicht öffentlich, via Agent-Tunnel oder Same-Host) |
Alle Container im Docker-Netz gts-internal. Kein Overlap mit anderen Stacks (eigenes Netzwerk, eigenes Traefik — nicht das alte Nori-Traefik).
Einmaliges Setup (Phase 6 als Skript)
# 1. Code deployen
git clone <tooling-codebase-remote> /opt/gts-code
cd /opt/gts-code
npm install --omit=dev
npm run build
# 2. Instance initialisieren
./packages/cli/dist/cli.js init \
--type business \
--identity kuble \
--data-dir /opt/gts/data
# 3. Secrets setzen
vi /opt/gts/.env # AUTH_SECRET, GOOGLE_CLIENT_SECRET, DB-URL, etc.
# 4. Traefik + App starten
cd /opt/gts
docker compose up -d
# 5. Ersten Admin bootstrappen
docker compose exec gts-server gts admin bootstrap --email gustavo.salami@kuble.com
# → Setzt initiales Passwort, anschließend per UI ändern
Updates
cd /opt/gts-code
git pull
npm install --omit=dev
npm run build
# Image rebuilden / oder Live-Volume-Mount wenn dev
docker compose restart gts-server
Brain-Daten bleiben unberührt (Volume).
Backup
cronauf dem Host: nightlygit bundle create /opt/gts/data/backups/brains-$(date +%F).bundle --all+sqlite3 /opt/gts/data/brains/.gts/meta.sqlite ".backup /opt/gts/data/backups/meta-$(date +%F).db".- Optional: zusätzlich git-remote push zu einem zweiten Host (z.B. privates GitHub-Repo oder selbst-gehosteter Gitea auf anderem Server).
- Recovery-Pfad:
git clone <bundle>,sqlite3 restore,docker compose up.
2. Personal Brain auf macOS (Gustavo's Mac Mini)
Voraussetzungen
- macOS 14+ (aktuelle Versionen haben Apple Silicon Docker gut)
- Docker Desktop oder direktes Node (Option A vs. Option B unten)
- FileVault aktiviert (Disk-Encryption → at-rest Sicherheit für Private Soul)
- Homebrew für optionale Tools
Option A — Docker (uniform mit Server)
- Einfacher zu reasonen, gleicher Code-Pfad wie Business.
- Braucht laufenden Docker-Desktop — ggf. nerv auf älteren Macs.
Option B — Native Node (leichter, empfohlen für Mac Mini)
npm install -g @gts/cli(aus published package, kommt Phase 3+).gts init --type personal --identity gustavo --data-dir ~/.gts/gustavo.- Launchd-Plist auto-start:
~/Library/LaunchAgents/com.kuble.gts-personal.plist- Startet
gts serve --port 3100beim Login.
- UI erreichbar:
http://localhost:3100.
Default: Option B für Menschen (schlankerer Footprint, keine Docker-Desktop-Abhängigkeit).
Verbindung zum Business (Web-UI oder CLI)
gts connect https://ground.kuble.com KBL-7A3X
Oder in der Personal-UI: "Verbundene Businesses → Neu" → URL + Code eingeben.
Ab hier läuft Selective Sync, wie in CONNECTIONS.md beschrieben.
3. Personal Brain auf einem Agent-Server (Maniak auf Hermes-VPS)
Für Agents ist es anders:
- Kein Web-UI nötig (aber verfügbar). Agent greift direkt über die CLI oder MCP auf seine Personal-Instanz zu.
- Key-only Login — das lokale Web-UI ist hinter Firewall/Tunnel, Agent nutzt einen API-Key via
.env. - Deployment identisch zu Option B (Native Node), nur ohne Login-Flow.
gts init --type personal --identity maniak --agent-mode.
Agents auf demselben Host wie der Business-Brain (z.B. Maniak-Agent auf Maniak-Server): gleiche Pattern, aber eigene Instanz-Directory. Keine Sonderfälle.
4. Checkliste pro Deploy
- Disk-Encryption aktiviert auf dem Host
- Regelmäßiger Backup-Job läuft
-
.env-Secrets sicher verwahrt (Password-Manager), nicht committed - Initialer Admin erzeugt, Passwort geändert
- Zweiter Admin eingeladen (oder mindestens Recovery-Kontakt dokumentiert)
- Firewall: nur SSH + 443 (Server) / SSH + lokaler Port (Mac/VPS) offen
- DNS-Record lebt, TLS-Cert ausgestellt
- Einmal
gts validatelaufen lassen — muss durchgehen - Einmal
gts historylaufen lassen — zeigt mindestens den initialen Commit