Servicios opcionales#
Empowerment Center funciona sin estos servicios, pero cada uno añade algo: el navegador sin interfaz, los documentos en PDF y la imagen en el correo; el motor de rutas, las isócronas por carretera; el mapa base, el fondo de los mapas; y el puerto de gestión, las métricas para Prometheus. Esta página explica cómo se activa cada uno.
El navegador sin interfaz#
Un Chromium en un contenedor aparte que abre los documentos como lo haría un usuario y los dibuja. Con él:
- las suscripciones y las alertas de datos pueden enviar en PDF los gráficos, los mapas y las páginas de las plantillas del portal;
- el correo puede llevar la imagen del documento en el cuerpo;
- los usuarios pueden exportar a PDF una página del portal.
Sin él, esos formatos no se ofrecen y lo demás funciona igual. El PDF y las demás exportaciones del cubo no lo necesitan.
Activarlo con Docker Compose#
-
En
deploy/.env, añada: -
Arranque de nuevo:
docker compose -f deploy/compose.yaml up -d.
El perfil arranca el servicio chromium con la versión que se prueba con ECenter y 1 GB de memoria compartida. compose.yaml ya dice al backend dónde está (http://chromium:9222) y por dónde llega Chromium al frontal: por su dirección interna, http://frontend:8080, que sirve lo mismo que la pública sin salir de la red.
Lo que hay que saber#
- DevTools no se publica nunca. El puerto 9222 solo lo ve el backend: quien llega a él puede abrir cualquier página con ese navegador y leer lo que dibuja.
- Uno por instancia del backend. Cada instancia dibuja como mucho 2 documentos a la vez (
ecenter.render.max-concurrent, cada uno en una pestaña) y espera 30 s a que haya hueco. Uno compartido tiene que aguantar la suma. - La memoria compartida. Chromium dibuja en
/dev/shm: con los 64 MB que da Docker por defecto, las páginas grandes fallan.compose.yamlle da 1 GB; en Kubernetes, monte un volumen en memoria en/dev/shm. - La hora. Las fechas de los PDF salen en la zona del backend:
TZtiene que ser la de la instalación. - El mapa base. Lo pide el propio Chromium. Si su red no llega al proveedor, el mapa sale sin fondo o el dibujo agota su tiempo (60 s). Sin salida a internet, use un mapa base autoalojado que vean a la vez los usuarios y el contenedor.
- Sin licencia válida no se dibuja nada.
Comprobarlo#
Con el navegador activado, la consola de operación abre la alerta El navegador sin interfaz no responde si no responde en 10 s mientras haya suscripciones o alertas de datos que lo pueden necesitar. Para probarlo de punta a punta, cree una suscripción a un gráfico en PDF, con la imagen en el cuerpo, y use Enviarme una prueba.
Todas las propiedades: Servicios: render, mapas, API y MCP.
El motor de rutas#
Sin motor de rutas, los mapas solo calculan isócronas de distancia radial (círculos) y no hay matriz de tiempos y distancias («No hay motor de rutas configurado»). Con él, las isócronas por tiempo y por distancia van por carretera, y la matriz dice cuánto se tarda y cuánto se recorre hasta cada entidad de una capa.
ECenter admite dos motores:
| Motor | Dónde | Cuándo conviene |
|---|---|---|
| Valhalla | Autoalojado, en deploy/compose.yaml |
El recomendado: las coordenadas no salen de la red. |
| OpenRouteService | Su servicio en la nube, con clave, o autoalojado | Para probar, o si ya lo tiene. Su plan gratuito da 500 isócronas y 500 matrices al día, y las coordenadas salen a su servicio. |
Valhalla con Docker Compose#
-
En
deploy/.env, añada:Con el navegador sin interfaz también:
COMPOSE_PROFILES=render,routing. -
Arranque de nuevo:
docker compose -f deploy/compose.yaml up -d.
La primera vez Valhalla descarga de Geofabrik los extractos de OpenStreetMap de ECENTER_ROUTING_TILE_URLS (por defecto, España con Baleares, Ceuta y Melilla, y Canarias: 1,5 GB) y construye su grafo en el volumen routing-data. Mientras tanto, las isócronas por carretera fallan con su error y lo demás funciona. Después arranca en segundos.
| España y Canarias | Comunidad de Madrid | |
|---|---|---|
| Construir el grafo, con la descarga | 24 min | 1,5 min |
| Memoria al construirlo (2 hilos) | 4,6 GB | 0,7 GB |
| Memoria en marcha | 250 MB | 250 MB |
| Disco | 5,8 GB | 0,5 GB |
Cifras medidas con 2 CPU y 7,8 GB de memoria para Docker.
| Variable | Por defecto | Qué es |
|---|---|---|
ECENTER_ROUTING_TILE_URLS |
España y Canarias de Geofabrik | Los extractos, separados por espacios. |
ECENTER_ROUTING_THREADS |
2 |
Hilos para construir el grafo: con más tarda menos y gasta más memoria. |
ECENTER_ROUTING_MEMORY |
6g |
El límite de memoria del contenedor. Tiene que cubrir la construcción. |
Para otra zona, o para poner al día las carreteras (Geofabrik publica a diario), borre el volumen y vuelva a arrancar:
docker compose -f deploy/compose.yaml stop valhalla
docker compose -f deploy/compose.yaml rm -f valhalla
docker volume rm ecenter_routing-data
docker compose -f deploy/compose.yaml up -d valhalla
Valhalla no calcula rutas de más de 400 km en una matriz ni isócronas de más de 120 minutos: la isócrona lo dice con su error. Una matriz manda como mucho 500 destinos por petición (ecenter.maps.routing.max-matrix-targets); el límite de pares de Valhalla (max_matrix_location_pairs, 2 500 por defecto en la 3.9) no debe ser menor.
OpenRouteService#
En deploy/.env:
ECENTER_MAPS_ROUTING_PROVIDER=openrouteservice
ECENTER_MAPS_ROUTING_URL=https://api.openrouteservice.org
ECENTER_MAPS_ROUTING_APIKEY=su-clave
El mapa base#
El fondo de los mapas lo da un proveedor de estilos de MapLibre o de teselas ráster (MapTiler, Protomaps u OpenStreetMap autoalojados…). El navegador de cada usuario lo pide directamente. Se configura en un application.yml propio:
ecenter:
maps:
base-map:
style: https://mapas.example.org/estilos/claro.json
style-dark: https://mapas.example.org/estilos/oscuro.json
Y en deploy/.env, su origen para la política de contenido del frontal:
Las demás opciones (teselas ráster, atribución, zoom máximo) están en Servicios: render, mapas, API y MCP. Las teselas públicas de OpenStreetMap solo valen para pruebas, por su política de uso.
Métricas para Prometheus#
Las métricas de ECenter y de la JVM se publican para Prometheus en un puerto de gestión aparte, apagado por defecto y pensado solo para la red interna.
- En
deploy/.env, ponga el puerto:ECENTER_MANAGEMENT_PORT=9090. - Vuelva a crear el backend.
-
Configure Prometheus para que lo recoja por la red interna, no por el frontal:
scrape_configs: - job_name: ecenter metrics_path: /actuator/prometheus static_configs: - targets: ['backend:9090']backend:9090vale si Prometheus está en la misma red de Docker que ECenter; si no, ponga la dirección interna del equipo del backend y publique el puerto solo en ella.
Con el puerto de gestión activado:
/actuator/prometheus,/actuator/health(con sus sondas) y/actuator/inforesponden en ese puerto sin sesión. Lo demás de/actuatorse deniega.- El puerto de la aplicación deja de servir
/actuator: las sondas del orquestador se apuntan al de gestión. - No publique ese puerto fuera de la red de ECenter.
Sin él, /actuator/prometheus no responde a nadie. Qué métricas hay y qué significan está en Operación.
Otros servicios#
| Servicio | Dónde se explica |
|---|---|
| Inicio de sesión único con OIDC o SAML, y SCIM | Seguridad |
El servidor MCP para asistentes de IA (apagado por defecto: ECENTER_MCP_ENABLED) |
Integraciones |
| La incrustación en otras aplicaciones | Integraciones |