Skip to content

Variables de entorno ​

Referencia completa de .env (ver .env.example en el repo, que es la fuente de verdad — esta página lo explica en prosa). scripts/setup.sh genera automáticamente todas las marcadas como "secreto generado"; el resto tiene un valor por defecto razonable o es opcional.

Base de datos y cola ​

VariableRequeridaDescripción
POSTGRES_USERSíUsuario de migración (app_migrator por defecto). Solo migrate se conecta con este rol.
POSTGRES_PASSWORDSí (secreto generado)Contraseña del usuario de migración.
POSTGRES_DBSíNombre de la base de datos (seredina por defecto).
POSTGRES_PORTNoPuerto expuesto por el contenedor de Postgres (5432 por defecto).
REDIS_PORTNoPuerto expuesto por Redis (6379 por defecto).
APP_TENANT_DB_PASSWORDSí (secreto generado)Contraseña del rol app_tenant, creado por packages/db/prisma/rls/policies.sql al migrar. El único rol con el que api y worker se conectan — nunca usan el rol de migración en producción.

Seguridad ​

VariableRequeridaDescripción
JWT_SECRETSí (secreto generado)Firma los tokens de sesión.
JWT_EXPIRES_INNoCuánto dura una sesión de la consola antes de tener que volver a iniciar sesión (8h por defecto; acepta valores como 30m, 12h, 1d). Desactivar un usuario o cambiar su rol surte efecto de inmediato de todos modos.
ENCRYPTION_KEYSí (secreto generado)Cifra en reposo (AES-256-GCM) las contraseñas IMAP/SMTP de los canales de correo, y otros secretos por tenant. Debe tener exactamente 64 caracteres hexadecimales (openssl rand -hex 32).

Perder este ENCRYPTION_KEY es irreversible

Si lo pierdes o lo rotas sin migrar los datos existentes, toda contraseña de canal de correo ya guardada queda indescifrable — hazle backup con la misma seriedad que a una contraseña de base de datos.

Modo de despliegue ​

VariableRequeridaDescripción
SEREDINA_MODESíself_hosted o cloud. Ver Modo cloud para qué cambia realmente.

Copiloto de IA (opcional) ​

Sin configurar, el copiloto de IA responde con un 503 claro en vez de que la API se niegue a arrancar — es una funcionalidad opcional, no un requisito de instalación.

VariableRequeridaDescripción
AI_PROVIDERNoanthropic, openai, u ollama. Sin definir, usa anthropic si ANTHROPIC_API_KEY está seteada (compatibilidad hacia atrás).
ANTHROPIC_API_KEY / ANTHROPIC_MODELNoClave de console.anthropic.com. ANTHROPIC_MODEL sobreescribe el modelo por defecto.
OPENAI_API_KEY / OPENAI_MODELNoClave de platform.openai.com.
OLLAMA_BASE_URL / OLLAMA_MODELNoSin costo por llamada, corre contra una instalación local de Ollama. OLLAMA_BASE_URL por defecto http://localhost:11434/v1.

Además de esta configuración a nivel de despliegue, cada tenant puede traer su propia clave (BYOK) desde Ajustes → IA en la consola — si la tiene, se usa exclusivamente, nunca como respaldo la configuración global del despliegue.

Red y puertos ​

VariableRequeridaDescripción
API_PORTNoPuerto de la API (4000 por defecto).
WEB_PORTNoPuerto de la consola web (8080 por defecto).
WEB_ORIGINSíDebe ser como el navegador llega a la consola (nunca el hostname interno de compose). api también arma con ella todos los enlaces públicos: los de encuestas CSAT, los de acceso al portal de clientes, y la dirección a la que Microsoft 365 / Gmail y tu proveedor de SSO devuelven el navegador (<WEB_ORIGIN>/api/email-channels/oauth/callback y <WEB_ORIGIN>/api/auth/sso/callback, salvo que API_PUBLIC_URL esté definida). El worker recibe el mismo valor, para el enlace al portal en los correos. Sin definir, esas funciones no andan.
VITE_API_URLNoDéjala vacía: la consola llega a la API en /api de su propia dirección. Defínela solo para apuntar la consola a una API en otro origen (queda fija al compilar).
API_PUBLIC_URLSolo si usas TelegramURL HTTPS real, accesible desde internet, de tu API — Telegram la llama directamente para entregar mensajes, así que nunca puede ser localhost ni un hostname interno de compose. También es la dirección que la página Dispositivos pone en los comandos de enrolamiento de agentes y, si está definida, la base de las URI de redirección de OAuth y SSO (<API_PUBLIC_URL>/email-channels/oauth/callback, <API_PUBLIC_URL>/auth/sso/callback). configure-address.sh la define como https://<dirección>/api.
SEREDINA_SITECon el perfil proxyLa dirección que sirve el proxy HTTPS: un dominio o IP (http://… si TLS_MODE=off). La define scripts/configure-address.sh.
TLS_MODECon el perfil proxyacme (Let's Encrypt), custom (certs/cert.pem + certs/key.pem), internal (CA generada) u off.
ACME_EMAILCon TLS_MODE=acmeRecibe avisos de vencimiento si la renovación llegara a fallar.
HTTP_PORT / HTTPS_PORTNoPuertos del proxy (80 / 443).
TLS_CA_FILENoCertificado de CA que fijan los agentes, para un certificado que no es de confianza pública. El script la define en internal y custom; la página Dispositivos la incluye en el comando de enrolamiento. Un archivo que contenga una clave privada se rechaza.
AGENT_DOWNLOAD_URLNoUna carpeta web interna con una copia de los archivos de una versión del agente, para equipos que no llegan a GitHub. Los comandos de instalación de la página Dispositivos descargan desde ahí.
WEB_BIND / API_BINDNoEn qué interfaz escuchan los puertos de la web y la API (0.0.0.0). El script pone 127.0.0.1 cuando el proxy está delante, para que desde la red solo se entre por HTTPS.
DB_BINDNoPostgres y Redis escuchan solo en 127.0.0.1. Redis no tiene contraseña: no lo expongas.
TRUST_PROXYNoQué saltos pueden fijar X-Forwarded-For, para que los límites por IP vean al cliente real detrás de los proxies. Compose usa loopback,uniquelocal.
COMPOSE_PROFILESNoproxy arranca el proxy HTTPS; agrega mcp para el servidor MCP.

Otras opcionales ​

VariableRequeridaDescripción
UPDATER_TOKENNoActiva la instalación de actualizaciones desde la consola; es lo que la API le presenta al servicio updater. Lo define scripts/enable-updater.sh, junto con SEREDINA_HOST_DIR (la carpeta de la instalación) y el perfil updater. Ver Actualizaciones.
SEREDINA_COMPOSE_FILESNoLos archivos de compose con que corre la instalación, separados por : (infra/docker-compose.yml por defecto). El updater reconstruye con los mismos.
SENTRY_DSNNoSeguimiento de errores (api/worker). Sin definir, no hace nada — apunta a Sentry.io o a una instancia propia de GlitchTip (compatible con el protocolo de Sentry).
VITE_SENTRY_DSNNoLo mismo, para la consola web. Queda fija al construir la imagen web.
EMAIL_POLL_INTERVAL_MSNoCada cuánto el worker revisa el buzón IMAP de cada canal de correo activo (30000 ms por defecto).
MCP_HTTP_PORTNoSolo usada por el servicio mcp-server-http, gated por perfil (docker compose --profile mcp up). Ver Servidor MCP.

Validación al arrancar ​

api y worker validan todas las variables requeridas al iniciar y reportan todo lo que falta o está mal formado en un solo mensaje — no se detienen en la primera variable faltante. Si un contenedor no arranca, docker compose logs api (o worker) es siempre el primer lugar donde mirar.

Publicado bajo AGPL-3.0-only.