Los almacenes de datos y las claves de proveedor de IA que necesita cualquier despliegue de Your Office AI: dos bases de datos PostgreSQL, Redis, almacenamiento de objetos compatible con S3 y los seis proveedores de LLM más un modelo de incrustación. Esta página explica qué aprovisionar y exactamente adónde va cada valor.
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 es una plataforma multitenancy con un backend de dos servidores, y cada servidor tiene su propia base de datos. Mantenerlas separadas significa que el servidor de autenticación (identidad) y el servidor tenant (datos por organización) pueden operarse, escalarse e incluso alojarse por partes distintas.
Your Office AI ejecuta dos bases de datos independientes: una base de datos de autenticación para el servidor de autenticación (usuarios, organizaciones, ajustes globales) y una base de datos tenant para el servidor tenant (chat, conocimiento, integraciones, tokens de LiveKit). Para el desarrollo local, ambas se ejecutan en Docker a través del docker-compose.yaml de cada servidor. Para producción, usa Postgres gestionado: Supabase, AWS RDS o Cloud SQL.
Para cada base de datos, anota el host, el puerto, el nombre de la base de datos, el usuario y la contraseña. En un proyecto de Supabase, los encontrarás en Settings → Database → Connection string. Elige la región más cercana a tus usuarios — los hosts de BD en la UE utilizan cifrado de volumen LUKS / AES-256 en reposo.
Coloca cada contraseña en el config/passwords.yaml del servidor correspondiente bajo el entorno correcto (development.database), y el host/puerto/nombre en config/development.yaml (o staging / production). Los valores de autenticación viven en command_center_server; los valores tenant en command_center_tenant_server.
Ejecuta las migraciones contra ambas bases de datos (desde la raíz del repositorio, make both-migrate). Esto también habilita la extensión de vector de PostgreSQL que usa Knowledge para la búsqueda semántica con pgvector. Carga datos de prueba con make both-seed si quieres un entorno poblado.
| Valor | Archivo | Clave |
|---|---|---|
| Contraseña de la BD de auth | command_center_server/config/passwords.yaml | development.database |
| Host / puerto / nombre de la BD de auth | command_center_server/config/development.yaml | database.host / .port / .name |
| Contraseña de la BD tenant | command_center_tenant_server/config/passwords.yaml | development.database |
| Host / puerto / nombre de la BD tenant | 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 respalda los flujos en tiempo real de Serverpod en el servidor tenant. También es el pilar del escalado horizontal: con Redis como bus de mensajes compartido, cualquier réplica puede difundir un evento que reciben todas las demás.
El servidor tenant usa Redis para los flujos en tiempo real de Serverpod (pub/sub). En local se incluye en docker-compose.yaml. Para producción, usa un Redis gestionado: ElastiCache, Upstash o Redis Cloud.
Establece la contraseña de Redis en config/passwords.yaml (development.redis) y el host/puerto en config/development.yaml bajo redis:. El servidor de autenticación dispone de su propio contenedor Redis con el mismo esquema de claves.
Una instancia única puede funcionar sin Redis, pero el pub/sub es obligatorio en cuanto se ejecuta más de una réplica del servidor tenant: es la forma en que las réplicas se difunden eventos entre sí. Consulta la guía de despliegue multiinstancia.
| Valor | Archivo | Clave |
|---|---|---|
| Contraseña de Redis del tenant | command_center_tenant_server/config/passwords.yaml | development.redis |
| Host / puerto de Redis del tenant | command_center_tenant_server/config/development.yaml | redis.host / redis.port |
Las subidas, los documentos de conocimiento y los avatares viven en almacenamiento de objetos compatible con S3. Los despliegues autoalojados suelen usar MinIO; los gestionados usan Supabase Storage. Las descargas de documentos están mediadas por el servidor: la aplicación obtiene los bytes a través del servidor tenant en lugar de exponer directamente una URL de almacenamiento, por lo que los buckets privados nunca necesitan ser públicos.
Las subidas de archivos, los documentos de conocimiento y los avatares se almacenan en almacenamiento de objetos. Los despliegues autoalojados usan MinIO (compatible con S3, gratuito, Docker local); los gestionados usan Supabase Storage. Cualquiera funciona: la aplicación habla el API S3.
Crea los buckets que usa la aplicación (por ejemplo, uploads y avatars). En Supabase Storage, marca los buckets de tipo avatar como Públicos y mantén los de subida como privados.
Para Supabase Storage, añade políticas de Row-Level Security para que los usuarios autenticados solo puedan leer y escribir su propia carpeta (ruta prefijada con su id de usuario), con lectura pública en los buckets de avatares. Las descargas de documentos de conocimiento están mediadas por el servidor, por lo que los buckets privados nunca necesitan una URL pública.
Para el desarrollo y el autoalojamiento sin acceso a internet, MinIO se ejecuta en Docker sin coste alguno y habla el mismo API S3 que el almacenamiento en la nube. Reserva Supabase Storage gestionado para los despliegues que quieran un bucket alojado.
Your Office AI no depende de un proveedor concreto. Una sola organización puede ofrecer seis proveedores de IA, y los administradores eligen qué modelos están disponibles y establecen límites de gasto por organización. Los modelos alojados provienen de OpenAI, Anthropic, Google y Groq; la inferencia privada y local se ejecuta a través de Ollama y Ollama Cloud.
| Proveedor | Tipo | Modelo de ejemplo |
|---|---|---|
| OpenAI | Alojado | gpt-4o-mini |
| Anthropic | Alojado | claude-sonnet-4-5 |
| Alojado | gemini-2.0-flash | |
| Groq | Alojado (inferencia rápida) | Llama / Mixtral family |
| Ollama | Local / privado | llama3.2 |
| Ollama Cloud | Ollama alojado | 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.
La columna de pgvector tiene una dimensión fija que debe coincidir con tu modelo de incrustación (por ejemplo, 1536 para OpenAI). Elige un proveedor de incrustación y mantenlo: cambiar de proveedor cambia la dimensión del vector e invalida las incrustaciones almacenadas. La plataforma deliberadamente no hace failover automático entre proveedores de incrustación.
Dónde viven los valores principales, de un vistazo:
| Área | Servidor | Archivo |
|---|---|---|
| Base de datos de auth, correo | Servidor de autenticación | command_center_server/config/passwords.yaml |
| Base de datos tenant, Redis, LiveKit, claves de LLM + incrustación, Nango | Servidor tenant | command_center_tenant_server/config/passwords.yaml |
| Ajustes de host / puerto / no secretos | Ambos | config/development.yaml (or staging / production) |
| URL de almacenamiento + clave anónima | App Flutter | command_center_flutter Supabase init |
With datastores and AI keys in place, set up OAuth e integraciones vía Nango to connect the integration catalog, or jump to Configuración de LiveKit for real-time video and voice.