MappView

Arquitectura

Cómo se despliega MappView y cómo está organizado el código. Dos vistas, un mismo sistema.

Entrega

MappView se distribuye de tres formas desde un único monorepo de workspaces Bun. El visor es una aplicación React servida como archivos estáticos por nginx (Docker) o instalada como app de escritorio Tauri v2 para Windows, macOS y Linux. La consola de gestión y la API de administración se despliegan como contenedores, y un anywidget de Jupyter incrusta el visor en cuadernos. La distribución es closed-source: imágenes Docker e instaladores de escritorio firmados, sin tiendas de aplicaciones ni servidores de actualización.

Topología en ejecución

flowchart LR
  subgraph clients["Clientes"]
    Browser["Navegador · PWA"]
    Desktop["Escritorio · Tauri v2"]
    Jupyter["Jupyter · anywidget"]
    Console["Consola de gestión"]
  end

  subgraph viewer["Stack del visor · nginx"]
    Static["App React estática"]
    Sidecar["Sidecar FastAPI · /sidecar
Whitebox · conversión · ráster · SQL"] Static --> Sidecar end subgraph control["Plano de control"] Admin["API de gestión · Bun
SQLite share.db · auth Clerk"] RustFS["RustFS · almacén S3
capas · fotos · blobs compartidos"] Plugins["CDN de registro de plugins
registry.json"] end subgraph ai["Relé de IA"] Edge["Proxy Edge · Bun
enrutado de modelos · límites"] EdgeRedis["Redis"] end subgraph geonode["Stack GeoNode · perfil hosted-layers"] Django["GeoNode Django + API puente"] PostGIS["PostGIS"] GeoServer["GeoServer"] Celery["Celery + Redis"] end Browser --> Static Desktop --> LocalSidecar["Sidecar local · 127.0.0.1:8765"] Jupyter --> Static Console --> Admin Admin --> RustFS Admin --> Django Admin --> Edge Edge --> EdgeRedis Django --> PostGIS Django --> GeoServer Django --> Celery Browser -->|"capas alojadas WMS/WFS/teselas"| GeoServer

Límites de confianza

  • La app de escritorio habla con su sidecar local solo por 127.0.0.1; el procesamiento pesado en Python nunca sale de la máquina salvo que se configure un servicio remoto.
  • El contenedor del visor alcanza el sidecar en el mismo origen en /sidecar, sin superficie CORS. Con MAPPVIEW_DISABLE_SIDECAR=1 se sirve solo estático.
  • La API de gestión antepone el almacenamiento de objetos con URL de capa firmadas y temporales (LAYER_ACCESS_TTL_SECONDS) y cuotas por tenant.
  • El relé de IA autentica visores con token, restringe modelos y limita la tasa por cliente; las claves de proveedores nunca llegan al navegador.