Skip to content

Arquitectura

jreyesr edited this page Mar 29, 2021 · 3 revisions

AgroSmart-Web está separada en dos partes principales:

  1. un backend basado en Django, que expone una API REST que es consumida por...
  2. ...una SPA que usa Vue para la interfaz gráfica, que se ejecuta en el navegador web del usuario.

Adicionalmente, el backend consume APIs expuestas por un contenedor de Geoserver, que almacena los ortomosaicos y modelos de elevación y permite acceder a ellos desde un navegador web, implementando tiling y múltiples resoluciones. El procesamiento de las imágenes, que es la parte que requiere más memoria RAM y capacidad de CPU (y, por lo tanto, aumentaría el precio del servidor), es delegado a WebODM Lightning, un servicio externo que ofrece procesamiento bajo demanda mediante un pago de $0.01 por imagen procesada.

Adicionalmente, un contenedor de Traefik Proxy provee un punto de entrada unificado a los diferentes servidores, con la posibilidad de implementar reglas de autenticación para los servidores que no cuentan con ellas (esto es, todos menos Django). Además, este proxy provee terminación SSL, de modo que las comunicaciones encriptadas (HTTPS) terminan en este contenedor y el resto de servicios reciben la información en texto plano (HTTP).

Debido a la necesidad de diferentes servicios que deben iniciarse simultáneamente, la aplicación se distribuye como un conjunto de contenedores de Docker, y se usa Docker Compose para orquestar el despliegue de los diferentes contenedores. Los contenedores están en una red interna en la cual pueden acceder los unos a los otros sin restricciones, mientras que el acceso desde la computadora host o desde el exterior sólo ocurre a través del puerto 80/443, controlado por Traefik.

Diagrama de despliegue de la aplicación