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-Geheimnisse (Datenbanken, Redis, LLM-Schlüssel, Embeddings) liegen in command_center_tenant_server/config/passwords.yaml; Auth-Geheimnisse in command_center_server/config/passwords.yaml. Nicht-geheime Host-/Port-Einstellungen liegen in der entsprechenden config/development.yaml (oder staging / production). Halten Sie passwords.yaml aus der Versionsverwaltung heraus.
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 — verwaltete Anbieter verschlüsseln Volumes im Ruhezustand in der Regel standardmäßig, bestätigen Sie die Details jedoch bei Ihrem Anbieter.
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 |
Auth- und Tenant-Server müssen ein identisches TENANT_JWT_SECRET teilen (Umgebungsvariable oder shared.tenantJwtSecret in passwords.yaml). Der Auth-Server signiert Tenant-JWTs damit, der Tenant-Server verifiziert sie; stimmen die Werte nicht überein, gibt jeder Tenant-API-Aufruf 401 zurück. Verwenden Sie auf beiden Seiten denselben Wert Byte für Byte, auch über verschiedene Hosts hinweg.
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 |
Fügen Sie die API-Schlüssel der Anbieter, die Sie verwenden möchten, in die passwords.yaml des Tenant-Servers ein. Jeder Anbieter hat seinen eigenen Schlüssel (z. B. openaiApiKey); Ollama und Ollama Cloud erhalten eine Basis-URL und einen Modellnamen statt eines Geheimschlüssels. Der OpenAI-Schlüssel treibt auch die Bildgenerierung in Workflows an. Es gibt keinen fest programmierten Standard-Anbieter — die Verfügbarkeit richtet sich danach, was ein Administrator konfiguriert.
Der Host von Ollama Cloud ist api.ollama.com — die Domain .ai lässt sich nicht auflösen. Verwenden Sie den Host .com in allen Konfigurationswerten.
Wissensantworten werden durch pgvector-Semantiksuche verankert: hochgeladene Dokumente und verknüpfte Websites werden aufgeteilt, eingebettet und mit Quellenangaben abgerufen. Dafür ist zusätzlich zu den Chat-LLMs ein Embedding-Modell erforderlich. Konfigurieren Sie einen Embedding-Anbieterschlüssel (z. B. einen OpenAI-Embeddings-Schlüssel) in der passwords.yaml des Tenant-Servers.
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 |
Wenn Datenspeicher und KI-Schlüssel eingerichtet sind, konfigurieren Sie OAuth & Integrationen über Nango, um den Integrationskatalog zu verbinden, oder springen Sie zu LiveKit-Setup für Echtzeit-Video und Sprache.