Tecnología

ClimWeb incluye herramientas y funcionalidades destinadas a ayudar a los SMHN en sus actividades diarias de gestión de sitios web y a proporcionar información y servicios a sus usuarios.

Esta sección busca presentar la elección de tecnologías, el enfoque de desarrollo y presentar los paquetes que soportan las funcionalidades disponibles en ClimWeb a un alto nivel.

El ClimWeb desarrollado es de código abierto y está alojado en GitHub en https://github.com/wmo-raf/nmhs-cms

Marco base ClimWeb

La plantilla del sitio web está construida sobre el marco de código abierto Wagtail. Wagtail se basa en Django, que es un marco web Python de alto nivel que fomenta un desarrollo rápido y un diseño limpio y pragmático.

Marco ClimWeb

Se tuvo en cuenta lo siguiente al elegir Wagtail como marco de elección:

  • Python como lenguaje de programación. El dominio del tiempo y el clima requiere mucha interacción con los datos científicos. Python es uno de los lenguajes de programación que facilita el desarrollo de procedimientos para manipular este tipo de datos. Desarrollar un sitio web utilizando Python permite la flexibilidad de desarrollar funcionalidades basadas en datos.

  • Fácil de usar: Una de las características clave de Wagtail es su interfaz intuitiva y fácil de usar. Esto facilita a los editores de contenido la gestión de sitios web sin tener que aprender las complejidades y los aspectos técnicos del marco subyacente.

  • Flexibilidad: Wagtail es flexible cuando se trata de crear y administrar sitios web. Permite el desarrollo rápido de sitios web altamente personalizados con diseños, contenido y características complejos, según lo que necesitan los editores de contenido.

  • Extensibilidad: Wagtail está diseñado para ampliarse fácilmente con una amplia variedad de complementos, temas, componentes y otras características. Esto permite agregar nuevas funciones, personalizar la apariencia de su sitio web y ampliar la funcionalidad de ClimWeb.

  • Seguridad: Wagtail está diseñado pensando en la seguridad. Viene con las funciones de seguridad integradas de Django, como autenticación de usuario, validación de entradas y protección contra métodos de ataque comunes.

  • Escalabilidad: Al estar basado en Django, Wagtail está diseñado para ser altamente escalable, lo que lo convierte en una opción ideal para sitios web con grandes cantidades de contenido y usuarios. Puede manejar grandes cantidades de datos sin problemas de rendimiento, lo que permite a los desarrolladores crear sitios web que pueden crecer a medida que aumenta su base de usuarios.

  • Funciones empresariales listas para usar: Wagtail incluye permisos de usuarios y grupos, flujos de trabajo de moderación y contenido, informes, seguimiento del historial de edición de contenido y otras funciones que los administradores y equipos de sitios web necesitan.

  • Experiencia del equipo de desarrollo: El equipo de desarrollo actual de ClimWeb del SMHN tiene una amplia experiencia en el desarrollo de proyectos basados ​​en Wagtail y Django. Esto agiliza la implementación de nuevas características y funcionalidades.

Enfoque de desarrollo

Utilizamos el enfoque modular de Django/Wagtail para desarrollar “aplicaciones Django” para proporcionar un conjunto de características y funcionalidades. Una aplicación Django/Wagtail es un paquete de Python que proporciona un conjunto de características. Las aplicaciones se pueden reutilizar en varios proyectos.

Las aplicaciones incluyen alguna combinación de modelos, vistas, plantillas, etiquetas de plantilla, archivos estáticos, URL, middleware, etc. de Django. Luego, estos se conectan al proyecto con la configuración INSTALLED_APPS. Por tanto, una aplicación, en este contexto, es un conjunto de código que interactúa con varias partes del marco.

Por tanto, el SMHN ClimWeb está diseñado con un conjunto de aplicaciones internas que proporcionan funcionalidad para diferentes páginas web del sitio web funcional. Estos están organizados en el directorio de páginas del código fuente de ClimWeb. Cada subdirectorio de las páginas corresponde a una sección del sitio web que puede permitir crear una o más páginas relacionadas de esa sección.

Se desarrolla una funcionalidad más especializada como aplicaciones externas de Wagtail que se pueden conectar al proyecto de código. Luego se instalan como paquetes de Python publicados en Python Package Index (PyPI), que es un repositorio de software para el lenguaje de programación Python.

Paquetes de funcionalidad

  • CAP Composer: Herramienta de redacción y publicación del Protocolo de alerta común (CAP) que proporciona funcionalidad para crear y publicar alertas con formato CAP.

  • Forecast Manager – Interfaz para gestionar las previsiones urbanas de los SMHN

  • GeoManager: proporciona una interfaz interactiva para administrar y publicar conjuntos de datos georreferenciados (GIS).

  • Administrativo de límites administrativos: Proporciona funcionalidad para cargar, gestionar y visualizar los límites de un país.

  • [Editor de historias web] (https://github.com/erick-otenyo/wagtail-webstories-editor): proporciona funcionalidad para crear y publicar [Historias web de Google] (https://creators.google/en-us/content-creation-products/own-your-content/web-stories/)

  • [Creador de encuestas] (https://github.com/erick-otenyo/wagtail-surveyjs): proporciona funcionalidad para crear y publicar encuestas directamente en ClimWeb, visualización y análisis de los resultados mediante gráficos interactivos.

Paquetes de integración de herramientas de terceros

Marketing por correo electrónico

Reuniones en línea

  • Integración de Zoom: Integrar Zoom Registro de eventos (reuniones o seminarios web) para formar páginas creadas con Wagtail

Bibliotecas y marcos de interfaz de usuario


Desarrollando nueva funcionalidad

Se utiliza un enfoque modular al desarrollar nuevas funciones que se incluirán en ClimWeb. La nueva funcionalidad debe desarrollarse de forma aislada como un paquete Wagtail Python y publicarse en PyPi para su instalación mediante Pip.

Seguimos los siguientes pasos en general:

  • Explore los paquetes existentes en la comunidad Wagtail/Django que brindan una funcionalidad similar.

  • Si existe un paquete existente y no se puede integrar directamente en ClimWeb, intentamos personalizarlo todo lo que podamos sobre este paquete para hacerlo interoperable. De lo contrario, lo usamos directamente.

  • Si no podemos encontrar paquetes existentes, desarrollamos el paquete desde cero. La idea es evitar la reinvención de la rueda siempre que sea posible.

Despliegue de producción

Docker se utiliza para contener los diferentes componentes de ClimWeb.

Otros contenedores utilizados incluyen

  • PostgreSQL con la extensión PostGIS como base de datos

  • Nginx como servidor web y proxy web

  • Memcached como sistema de almacenamiento en caché para solicitudes web

  • Eclipse Mosquitto como intermediario de mensajes MQTT. Se utiliza principalmente para mensajes de alertas CAP

Estos se colocan en un archivo de configuración de Docker Compose, que se utiliza para implementar el proyecto mediante Docker Compose.

Se proporciona un repositorio de inicialización que reúne todos los diferentes componentes en un solo proyecto. Se puede acceder a esto en https://github.com/wmo-raf/nmhs-cms-init. Se proporciona una guía de instalación en el archivo README del repositorio.

Administrar actualizaciones

Periódicamente se publican nuevas versiones con correcciones de errores y actualizaciones de funciones en las [versiones del repositorio nmhs-cms] (https://github.com/wmo-raf/nmhs-cms/releases).

Cuando haya una nueva versión, la interfaz de administración de ClimWeb mostrará un mensaje indicando que hay una nueva versión. Luego, el administrador del sitio web puede optar por actualizar a la nueva versión, después de leer las notas de la versión que acompañan a cada versión.

La actualización se realiza mediante el clic de un botón, lo que desencadena un proceso de compilación de Docker con las nuevas versiones. Una vez que la nueva versión se haya creado correctamente, el contenedor se reinicia con la nueva versión realizada.

Botón de actualización de ClimWeb

En casos excepcionales en los que falla el activador de compilación automática, los administradores del sistema están capacitados para realizar la actualización manualmente.

Seguridad en Django/Wagtail

ClimWeb, al usar Django/Wagtail, de fábrica contiene las siguientes características de seguridad incorporadas. Se pueden encontrar más detalles sobre cada característica en https://docs.djangoproject.com/en/5.0/topics/security

  • Protección de secuencias de comandos entre sitios (XSS)

  • Protección contra falsificación de solicitudes entre sitios (CSRF)

  • Protección de inyección SQL

  • Protección contra el secuestro de clics

  • Configuración de protección SSL\HTTPS

  • Validación del encabezado del host

  • Protección de la política de referencia

  • Política de abridor de origen cruzado

  • Seguridad de sesión

  • Protección de contenido subido por el usuario

Funciones de seguridad específicas de ClimWeb:

  • Posibilidad de cambiar la URL del administrador periódicamente

  • Mecanismos de respaldo diario

  • Prevenciones de inicio de sesión por fuerza bruta

  • Autenticación de 2 factores para cuenta de administrador