Servicios: render, mapas, API y MCP#
La configuración de los servicios que Empowerment Center ofrece hacia fuera o que usa de otras piezas: el navegador sin interfaz, los mapas y el motor de rutas, la API de consulta, el servidor MCP, la incrustación y el puerto de gestión para Prometheus. Cómo se instalan está en Servicios opcionales, y cómo se usan la API, el MCP y la incrustación, en Integraciones.
El navegador sin interfaz#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.render.enabled |
false (ECENTER_RENDER_ENABLED) |
Si la instalación tiene el navegador. Apagado, no se ofrecen los formatos que lo necesitan. |
ecenter.render.browser-url |
(vacía; ECENTER_RENDER_BROWSER_URL) |
Dónde escucha el protocolo DevTools de Chromium (http://chromium:9222). Vale un nombre: ECenter lo resuelve y se conecta por su dirección. |
ecenter.render.frontend-url |
ECENTER_PUBLIC_URL (ECENTER_RENDER_FRONTEND_URL) |
Por dónde llega Chromium al frontal. Tiene que ser algo que sirva la aplicación web y mande /api/ y /embed/ al backend, nunca el backend solo. Mejor una dirección interna, que no depende del DNS público ni del certificado. |
ecenter.render.page-size |
A4 |
El papel del PDF (A3, A4, A5, LETTER o LEGAL), que da también el tamaño de la imagen. |
ecenter.render.landscape |
true |
Apaisado. |
ecenter.render.timeout |
60s |
Lo que puede tardar un dibujo entero. |
ecenter.render.queue-wait |
30s |
Lo que espera un dibujo a que haya hueco. |
ecenter.render.max-concurrent |
2 |
Los dibujos a la vez por instancia (cada uno, una pestaña del navegador). |
ecenter.render.token-ttl |
2m |
Lo que vale el token de un solo uso con que el navegador abre el documento (de 10 s a 2 min). |
ecenter.render.session-ttl |
5m |
Lo que dura la sesión que abre ese token. |
ecenter.render.connect-timeout |
10s |
Lo que se espera al navegador al conectarse. |
ecenter.render.image-scale |
1 |
La escala de la imagen del cuerpo del correo (de 0,5 a 3). Con 2 es el doble de nítida y pesa cuatro veces más. |
Cuándo cambiarlo. Si los dibujos agotan su tiempo con documentos grandes (un mapa con muchas entidades, una página con varios bloques), suba timeout y la memoria del contenedor. Si se acumulan en cola, suba max-concurrent y la memoria a la vez.
Los mapas#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.maps.base-map.style |
(ninguno) | El estilo de MapLibre del mapa base: la URL de un proveedor o autoalojada (por ejemplo, un .pmtiles de Protomaps). |
ecenter.maps.base-map.style-dark |
(ninguno) | El estilo para el tema oscuro. Sin él, el tema oscuro usa style. |
ecenter.maps.base-map.tiles |
(ninguna) | Una plantilla de teselas ráster (…/{z}/{x}/{y}.png), si no hay estilo. |
ecenter.maps.base-map.tiles-dark |
(ninguna) | Su variante oscura. Sin ella, en oscuro se ven las claras atenuadas. |
ecenter.maps.base-map.attribution |
(ninguna) | El texto de atribución que exige el proveedor. |
ecenter.maps.base-map.max-zoom |
19 |
El zoom máximo. |
ecenter.maps.routing.provider |
none |
El motor de rutas: none, valhalla u openrouteservice. |
ecenter.maps.routing.url |
(vacía) | La dirección del motor. |
ecenter.maps.routing.api-key |
(vacía) | La clave de OpenRouteService. |
ecenter.maps.routing.profile |
(el del motor) | El perfil de coche: auto en Valhalla y driving-car en OpenRouteService si no se dice. |
ecenter.maps.routing.timeout |
30s |
El tiempo máximo de cada llamada al motor. |
ecenter.maps.routing.cache-ttl |
7d |
Lo que vale una respuesta guardada del motor. |
ecenter.maps.routing.max-matrix-targets |
500 |
Los destinos de una matriz de tiempos y distancias. |
Sin mapa base, las capas se dibujan sobre un fondo liso. Añada los orígenes del mapa base a ECENTER_CSP_MAP_ORIGINS del frontal. Los límites de las capas que se suben están en Recursos.
La API de consulta#
La API de consulta (/api/query/v1) responde con los datos que ve el usuario de la credencial. Sus consultas son trabajos de la clase API, 2 a la vez por defecto, para no quitar sesiones a los cubos.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.api.enabled |
true |
Con false, sus rutas (salvo whoami) responden 404 API_DISABLED. |
ecenter.api.wait |
10s |
Lo que espera una petición a su consulta si no dice wait. |
ecenter.api.max-wait |
30s |
Lo más que puede pedir con wait. Pasado, responde 202 con el identificador de la consulta. |
ecenter.api.page-size |
1000 |
Las filas de una página si no se dice limit. |
ecenter.api.max-page-size |
10000 |
Lo más que puede pedir limit. El CSV va entero. |
ecenter.api.max-rows |
50000 |
Las filas de un resultado. Por encima, 422 TOO_HEAVY. |
ecenter.api.max-cells |
2000000 |
Las celdas (filas por columnas) de un resultado. Por encima, 422 TOO_HEAVY. |
ecenter.api.max-estimated-rows |
2000000 |
Las filas estimadas por la BD por encima de las que no se calcula ni confirmándolo (422 TOO_HEAVY). |
ecenter.api.max-running-per-user |
2 |
Las consultas en curso a la vez de un titular, por instancia. La siguiente, 429 TOO_MANY_RUNNING. |
ecenter.api.rate |
60 |
Las peticiones por minuto de cada credencial, por instancia. Por encima, 429 RATE_LIMITED. |
ecenter.api.max-retained-cells |
10000000 |
Las celdas que conservan los resultados terminados de la instancia. Al pasarlo, se descarta el más antiguo (404 RESULT_NOT_FOUND). |
ecenter.api.max-retained-per-user |
20 |
Los resultados terminados que se conservan de cada titular. |
El aviso de consulta pesada usa ecenter.cube.warn-rows (100 000 filas estimadas), como el cubo.
El servidor MCP#
El servidor MCP (/api/mcp) deja que un asistente de IA consulte los datos en nombre de un usuario. Viene apagado: activarlo lo decide la organización, porque lo que consulta el asistente sale hacia su proveedor de IA.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.mcp.enabled |
false (ECENTER_MCP_ENABLED) |
Con false, /api/mcp responde 404 MCP_DISABLED. |
ecenter.mcp.wait |
20s |
Lo que espera una consulta antes de devolver que sigue en marcha. |
ecenter.mcp.rows-per-call |
200 |
Las filas de un resultado en una llamada si no se dice cuántas. |
ecenter.mcp.max-rows-per-call |
1000 |
Las filas como mucho de una llamada. El resto, por páginas o en CSV. |
ecenter.mcp.rate |
120 |
Las llamadas por minuto de cada credencial, por instancia. Por encima, 429 RATE_LIMITED. |
ecenter.mcp.allowed-origins |
(ninguno) | Los Origin admitidos (https://asistente.example.org, o http://localhost:* para un puerto cualquiera). Una petición con otro, 403. Sin cabecera Origin (un cliente que no es un navegador) no se mira. |
ecenter.mcp.allowed-connections |
(las del titular) | Las conexiones (por su identificador) que se pueden consultar por el MCP. Solo restringe. |
ecenter.mcp.max-payload |
1MB |
El cuerpo más grande de una petición. Por encima, 413 CONTENT_TOO_LARGE. |
Para que los asistentes entren con la cuenta de la organización (OAuth), se configura ecenter.security.bearer.oauth.* con el proveedor de identidad: véase Integraciones. El proxy tiene que mandar al backend /.well-known/oauth-protected-resource/, como hace el frontal.
La incrustación#
La incrustación muestra documentos y páginas del portal dentro de otras aplicaciones, con un token que pide el servidor de la aplicación anfitriona.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.embedding.enabled |
true |
Con false, ni se emiten ni se canjean tokens (404), y la página de la incrustación no se deja enmarcar. |
ecenter.embedding.token-ttl |
5m |
Lo que vive un token para canjearlo (de 1 s a 5 min). |
ecenter.embedding.access-token-ttl |
15m |
Lo que vive cada credencial de la sesión incrustada antes de renovarla (de 30 s a 1 h). |
ecenter.embedding.refresh-grace |
30s |
Lo que sigue valiendo la anterior tras renovarla. |
ecenter.embedding.idle-timeout |
30m |
La inactividad que termina una sesión incrustada (al menos 1 min). |
ecenter.embedding.max-session-duration |
8h |
La duración máxima de una sesión incrustada (de 5 min a 24 h). Cada aplicación anfitriona puede tener una menor. |
ecenter.embedding.allow-insecure-localhost |
false |
Admitir orígenes http://localhost en las aplicaciones anfitrionas. Solo para desarrollo. |
ecenter.embedding.index-location |
classpath:/static/index.html (ECENTER_EMBEDDING_INDEX_LOCATION) |
Dónde lee el backend el index.html de la aplicación web. |
ecenter.embedding.issue-rate |
600/min |
Los tokens que puede pedir cada aplicación anfitriona, por instancia (<número>/<s, min o h>). Por encima, 429 con Retry-After. |
ecenter.embedding.retention |
30d |
Lo que se conserva una sesión terminada (al menos un día). |
ecenter.embedding.maintenance.interval |
15m |
Cada cuánto se purgan los tokens y las sesiones terminadas. |
El puerto de gestión#
| Variable | Propiedad | Por defecto | Qué es |
|---|---|---|---|
ECENTER_MANAGEMENT_PORT |
management.server.port |
(vacía: apagado) | El puerto en que se sirven /actuator/prometheus, /actuator/health (con las sondas) y /actuator/info sin sesión. |
management.server.address |
(todas las interfaces) | La interfaz a la que se ata el puerto de gestión. |
Con el puerto de gestión activado, el de la aplicación deja de servir /actuator. Sin él, /actuator/prometheus no responde a nadie, la salud y las sondas responden sin sesión en el puerto de la aplicación y lo demás de /actuator exige Administración del Sistema. Las métricas que se publican están en Operación.
Importante
El puerto de gestión responde sin sesión. Déjelo solo en la red interna: no lo publique ni lo mande por el proxy.