Die Datenspeicher und KI-Anbieterschlüssel, die jedes Your Office AI-Deployment benötigt: zwei PostgreSQL-Datenbanken, Redis, S3-kompatibler Objektspeicher sowie die sechs LLM-Anbieter plus ein Embedding-Modell. Diese Seite beschreibt, was bereitzustellen ist und wohin jeder Wert genau gehört.
Tenant-server secrets (databases, Redis, LLM keys, embeddings) live in command_center_tenant_server/config/passwords.yaml; auth secrets in command_center_server/config/passwords.yaml. Non-secret host/port settings live in the matching config/development.yaml (or staging / production). Keep passwords.yaml out of version control.
Your Office AI ist eine Multi-Tenant-Plattform mit einem Zwei-Server-Backend, und jeder Server besitzt seine eigene Datenbank. Die Trennung ermöglicht es, Auth-Server (Identität) und Tenant-Server (organisationsspezifische Daten) unabhängig zu betreiben, zu skalieren und sogar von verschiedenen Parteien hosten zu lassen.
Your Office AI betreibt zwei unabhängige Datenbanken: eine Auth-Datenbank für den Auth-Server (Benutzer, Organisationen, globale Einstellungen) und eine Tenant-Datenbank für den Tenant-Server (Chat, Wissen, Integrationen, LiveKit-Tokens). Für die lokale Entwicklung laufen beide in Docker über die jeweilige docker-compose.yaml. Für die Produktion nutzen Sie verwaltetes Postgres — Supabase, AWS RDS oder Cloud SQL.
Notieren Sie für jede Datenbank Host, Port, Datenbankname, Benutzer und Passwort. In einem Supabase-Projekt finden Sie diese unter Settings → Database → Connection string. Wählen Sie die Region, die Ihren Nutzern am nächsten liegt — die EU-DB-Hosts verwenden LUKS / AES-256-Volumenverschlüsselung im Ruhezustand.
Tragen Sie jedes Passwort in die config/passwords.yaml des entsprechenden Servers unter der richtigen Umgebung (development.database) ein und Host/Port/Name in config/development.yaml (oder staging / production). Die Auth-Werte liegen in command_center_server; die Tenant-Werte in command_center_tenant_server.
Führen Sie die Migrationen für beide Datenbanken aus (vom Repository-Stammverzeichnis: make both-migrate). Dabei wird auch die PostgreSQL-Vektorerweiterung aktiviert, die Knowledge für die pgvector-Semantiksuche verwendet. Laden Sie Testdaten mit make both-seed, wenn Sie eine befüllte Umgebung wünschen.
| Wert | Datei | Schlüssel |
|---|---|---|
| Auth-DB-Passwort | command_center_server/config/passwords.yaml | development.database |
| Auth-DB-Host / Port / Name | command_center_server/config/development.yaml | database.host / .port / .name |
| Tenant-DB-Passwort | command_center_tenant_server/config/passwords.yaml | development.database |
| Tenant-DB-Host / Port / Name | command_center_tenant_server/config/development.yaml | database.host / .port / .name |
The Auth and Tenant servers must share an identical TENANT_JWT_SECRET (env var, or shared.tenantJwtSecret in passwords.yaml). The Auth server signs tenant JWTs with it and the Tenant server verifies them; if the two differ, every tenant API call returns 401. Use the same byte-for-byte value on both, even across different hosts.
Redis unterstützt die Echtzeit-Streams von Serverpod auf dem Tenant-Server. Es ist auch das Rückgrat der horizontalen Skalierung: Mit Redis als gemeinsamem Nachrichtenbus kann jede Replika ein Ereignis senden, das alle anderen Replikas empfangen.
Der Tenant-Server verwendet Redis für die Echtzeit-Streams von Serverpod (Pub/sub). Lokal ist es in docker-compose.yaml enthalten. Für die Produktion nutzen Sie ein verwaltetes Redis — ElastiCache, Upstash oder Redis Cloud.
Tragen Sie das Redis-Passwort in config/passwords.yaml ein (development.redis) und Host/Port in config/development.yaml unter redis:. Der Auth-Server verfügt über einen eigenen Redis-Container mit demselben Schlüssellayout.
Eine einzelne Instanz kann ohne Redis betrieben werden, aber Pub/sub ist obligatorisch, sobald mehr als eine Tenant-Server-Replika läuft — so teilen Replikas Ereignisse miteinander. Lesen Sie die Anleitung zur Multi-Instanz-Bereitstellung.
| Wert | Datei | Schlüssel |
|---|---|---|
| Tenant-Redis-Passwort | command_center_tenant_server/config/passwords.yaml | development.redis |
| Tenant-Redis-Host / Port | command_center_tenant_server/config/development.yaml | redis.host / redis.port |
Uploads, Wissensdokumente und Avatare liegen im S3-kompatiblen Objektspeicher. Selbst gehostete Deployments verwenden typischerweise MinIO; verwaltete Deployments nutzen Supabase Storage. Dokument-Downloads sind server-vermittelt — die App holt Bytes über den Tenant-Server statt eine Speicher-URL direkt freizugeben — daher müssen private Buckets nie öffentlich sein.
Datei-Uploads, Wissensdokumente und Avatare werden im Objektspeicher abgelegt. Selbst gehostete Deployments verwenden MinIO (S3-kompatibel, kostenlos, lokales Docker); verwaltete Deployments nutzen Supabase Storage. Beides funktioniert — die App spricht die S3-API.
Erstellen Sie die Buckets, die die App verwendet (z. B. uploads und avatars). Markieren Sie in Supabase Storage Avatar-artige Buckets als öffentlich und halten Sie Upload-Buckets privat.
Fügen Sie für Supabase Storage Row-Level-Security-Richtlinien hinzu, damit authentifizierte Benutzer nur ihren eigenen Ordner lesen und schreiben können (Pfad mit ihrer Benutzer-ID präfixiert), mit öffentlichem Lesezugriff auf Avatar-Buckets. Downloads von Wissensdokumenten sind server-vermittelt, daher benötigen private Buckets keine öffentliche URL.
Für die Entwicklung und luftdicht isoliertes Self-Hosting läuft MinIO kostenlos in Docker und spricht dieselbe S3-API wie Cloud-Speicher. Nutzen Sie verwalteten Supabase Storage für Deployments, die einen gehosteten Bucket wünschen.
Your Office AI ist anbieterunabhängig. Eine einzelne Organisation kann sechs KI-Anbieter anbieten, und Administratoren entscheiden, welche Modelle verfügbar sind, und legen Ausgabenlimits pro Organisation fest. Gehostete Modelle kommen von OpenAI, Anthropic, Google und Groq; private und lokale Inferenz läuft über Ollama und Ollama Cloud.
| Anbieter | Typ | Beispielmodell |
|---|---|---|
| OpenAI | Gehostet | gpt-4o-mini |
| Anthropic | Gehostet | claude-sonnet-4-5 |
| Gehostet | gemini-2.0-flash | |
| Groq | Gehostet (schnelle Inferenz) | Llama / Mixtral family |
| Ollama | Lokal / privat | llama3.2 |
| Ollama Cloud | Gehostetes Ollama | gpt-oss:120b |
Add the provider API keys you intend to use to the tenant server's passwords.yaml. Each provider has its own key (for example openaiApiKey); Ollama and Ollama Cloud take a base URL and model name rather than a secret key. The OpenAI key also powers image generation in workflows. There is no hardcoded default provider — availability is whatever an admin configures.
Ollama Cloud's host is api.ollama.com — the .ai domain does not resolve. Use the .com host in every config value.
Knowledge answers are grounded with pgvector semantic search: uploaded documents and linked websites are chunked, embedded, and retrieved with citations. That requires an embedding model in addition to the chat LLMs. Configure an embedding provider key (for example an OpenAI embeddings key) in the tenant server's passwords.yaml.
Die pgvector-Spalte hat eine feste Dimension, die zu Ihrem Embedding-Modell passen muss (z. B. 1536 für OpenAI). Wählen Sie einen Embedding-Anbieter und bleiben Sie dabei — ein Anbieterwechsel ändert die Vektordimension und macht gespeicherte Embeddings ungültig. Die Plattform führt absichtlich kein automatisches Failover zwischen Embedding-Anbietern durch.
Wo die Kernwerte auf einen Blick liegen:
| Bereich | Server | Datei |
|---|---|---|
| Auth-Datenbank, E-Mail | Auth-Server | command_center_server/config/passwords.yaml |
| Tenant-Datenbank, Redis, LiveKit, LLM- + Embedding-Schlüssel, Nango | Tenant-Server | command_center_tenant_server/config/passwords.yaml |
| Host / Port / nicht-geheime Einstellungen | Beide | config/development.yaml (or staging / production) |
| Speicher-URL + Anon-Schlüssel | Flutter-App | command_center_flutter Supabase init |
With datastores and AI keys in place, set up OAuth & Integrationen über Nango to connect the integration catalog, or jump to LiveKit-Setup for real-time video and voice.