Gestionar un evento no es una tarea fácil, se mueve una gran cantidad de dinero, que no es tuyo y por tanto recae sobre ti una enorme responsabilidad. Hacerlo entre un grupo de personas puede ayudar a la hora de repartirse tareas, pero pueden surgir problemas a la hora de coordinarse. Si cada organizador lleva su propio control de la contabilidad se replica información y a menudo surgen incongruencias.
La idea es desarrollar un software para facilitar toda esta gestión y que sea accesible en todo momento para cualquier organizador. La funcionalidad principal de éste es poder llevar a cabo la gestión económica de un evento (compras, ventas, inversiones, donaciones, patrocinios...). Por otra parte también se podrá gestionar la tabla de actividades que se realizarán durante el evento.
Se utilizará una arquitectura basada en microservicios, la cual se caracteriza por usar servicios desplegados independiente y que funcionan también independientemente unos de otros.
El núcleo de esta arquitecutra es una API REST programada en Flask.
Se podrían tener tres microservicios actuando de forma independiente los unos con los otros (correspondientes a cada uno de los módulos de la aplicación):
- Gestión de usuarios
- Gestión de eventos
- Gestión de transacciones
Cada uno de estos con su correspondiente base de datos.
Se utilizará Flask como framework para desarrollar el back-end (tanto la API REST como los distintos microservicios) junto con varias bases de datos MongoDB.
Si se llega a desarrollar el front-end, se usará HTML, CSS y JavaScript usando Materialize como framework.
Para provisionar una máquina virtual AWS con una imagen de Ubuntu Server 14.04 usando Ansible hay que seguir las instrucciones detalladas aquí. Con esto se instalará: Git, MongoDB, pip y usando pip: Flask y Flask-PyMongo.
Para provisionar una máquina virtual AWS con una imagen de Ubuntu Server 14.04 usando Chef hay que seguir las instrucciones detalladas aquí. Con esto se instalará: Git, MongoDB, pip y usando pip: Flask y Flask-PyMongo.
Para orquestar máquinas virtuales se ha utilizado Vagrant. Estas máquinas virtuales son las mismas que se usaron en el apartado de provisionamiento (la AMI de Ubuntu Server 14.04 de AWS) y como sistem de provisionamiento Ansible. Las instrucciones detalladas se encuentran aquí.
Se usa Docker para el uso de contenedores. Las instrucciones para instalarlo están aquí. Asímismo se ha creado un repositorio en Docker Hub que se actualiza cada vez que se actualiza este repositorio en GitHub.
Para el despliegue final de la aplicación se ha puesto en práctica todo lo visto en la asignatura. Se utiliza:
- AWS (máquinas virtuales Ubuntu 16.04)
- Ansible (provisionamiento)
- Vagrant (orquestación)
- Docker (contenedores)
- mLab (DaaS)
- Papertrail (LaaS)
Los detalles de la elección de esta tecnología así como más información se encuentran aquí.
El software está sujeto a la licencia GNU GPL v3.