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.
Los secretos del servidor tenant (bases de datos, Redis, claves de LLM, incrustaciones) viven en command_center_tenant_server/config/passwords.yaml; los secretos de autenticación en command_center_server/config/passwords.yaml. Los ajustes de host/puerto no secretos viven en el correspondiente config/development.yaml (o staging / production). Mantén passwords.yaml fuera del control de versiones.
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 proveedores gestionados suelen cifrar los volúmenes en reposo por defecto, pero confirma los detalles con tu proveedor.
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 |
Los servidores de autenticación y tenant deben compartir un TENANT_JWT_SECRET idéntico (variable de entorno o shared.tenantJwtSecret en passwords.yaml). El servidor de autenticación firma los JWT de tenant con él y el servidor tenant los verifica; si difieren, cada llamada a la API tenant devuelve 401. Usa exactamente el mismo valor byte a byte en ambos, incluso en hosts distintos.
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 |
Añade las claves de API de los proveedores que vayas a usar al passwords.yaml del servidor tenant. Cada proveedor tiene su propia clave (por ejemplo openaiApiKey); Ollama y Ollama Cloud reciben una URL base y un nombre de modelo en lugar de una clave secreta. La clave de OpenAI también impulsa la generación de imágenes en los flujos de trabajo. No hay un proveedor predeterminado fijo: la disponibilidad depende de lo que configure un administrador.
El host de Ollama Cloud es api.ollama.com — el dominio .ai no resuelve. Usa el host .com en todos los valores de configuración.
Las respuestas de conocimiento se fundamentan con la búsqueda semántica de pgvector: los documentos subidos y los sitios web vinculados se fragmentan, incrustan y recuperan con citas. Eso requiere un modelo de incrustación además de los LLM de chat. Configura una clave de proveedor de incrustación (por ejemplo, una clave de incrustaciones de OpenAI) en el passwords.yaml del servidor tenant.
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 |
Con los almacenes de datos y las claves de IA en su lugar, configura OAuth e integraciones vía Nango para conectar el catálogo de integraciones, o ve directamente a Configuración de LiveKit para vídeo y voz en tiempo real.