yabirgb / bukhgalter

A microservice to share expenses between friends WIP. Class project for the infrastructure subject
https://bukhgalter.netlify.app/
GNU Affero General Public License v3.0
4 stars 2 forks source link

Bukhgalter

Descripción del proyecto

Este proyecto pretende proporcionar una API para solventar el problema de particionar pagos entre varias personas y además proveer de herramientas para planificar pagos en actividades conjuntas. Un ejemplo sería cuando varias personas se van juntas de viaje y una paga el hotel, otra la comida y al final quieren ajustar la cuenta de cuanto debe cada persona. También sería interesante en el viaje conocer cuanto se va gastando y llevar una planificación del presupuesto disponible.

Despliegue

Toda la información relativa al despliegue se encuentra en PaaS

Microservicio

La información relativa a la REST API que se expone se encuentra en la documentación sobre el Microservicio y en la de las urls.

Tambien hay un apartado en Microservicios/diseño que explica como se ha esrtructurado el microservicio y como se han desacoplado en la medida de lo posible los distintos componentes del mismo. También se documenta como se maneja actualmente el almacenamiento de datos.

Microservicios/testing informa de la estructura de los tests.

Logging

Para obtener información sobre las peticiones que se procesan en el microservicio se pone a disposición un sistema de logging con capacidad de enviar los logs a otro servicio mediante syslog. Para saber como funciona y se integra en el proyecto consultar la documentación logs.

Configuración

El proyecto cuenta con distintos parámetros para ajustar el comportamiento del microservicio. Se utilizan tanto variables de entorno como etcd a modo de gestor de configuración distribuida. En el apartado de configuración se especifica la política para encontrar la configuración y las variables que se buscan al arrancar el microservicio.

Ejecutar el servicio

Se ha creado un contenedor docker para ejecutar el microservicio. El archivo Dockerfile se ha adaptado a partir del creado en versiones anterior. Para ejecutar el contenedor hay que proporcionar las variables de entorno. Un ejemplo sería

docker run -p 8000:8000 -e log_host="logs.papertrailapp.com" -e log_port=$PORT_LOG -e host="0.0.0.0" -e port=8000 -e RUST_LOG=Info image:latest

Para ejecutar el contenedor sin docker hay que:

  1. Clonar el repositorio
  2. Ejecutar make release
  3. Crear las variables de entorno necesarias
  4. Ejecutar ./target/release/bukhgalter

Serverless

Se ha documentado la parte serverless de la aplicación en la documentación del proyecto. Se han creado un función en rust que devuelve un json con información. Por motivos técnicos ha sido alojada en otro repositorio https://github.com/yabirgb/bukhgalter-collaborators.

También se ha creado un bot de telegram desplegado en netlify @bukhgalterbot y una interfaz web usando javascript y el framework svelte. Esta interfaz se encuentra en la carpeta ui y está desplegada en netlify.

Para más detalles remitirse a la documentación.

Herramientas

Integración continua

Respecto a los sistemas de integración continua, se han descrito cual ha sido su propósito de uso en el capítulo de CI de la documentación.

Se han configurado como sistemas de CI:

Docker

En el archivo de contenerizacion hago una explicación del proceso que he seguido para crear los dos contenedores que he creado para el proyecto.

En el archivo de CI explico como se ha integrado docker en los tests y como se despliega el contenedor de tests en dockerhub. A raiz de un comentario en el grupo de Telegram he cambiado y he configurado también la acción desde dockerhub para que se genere el contenedor. Lo documento en el archivo dockerhub.

Finalmente en el archivo de criterios explico las precauciones que he tenido al crear los contenedores.

Todas las fuentes de las que he sacado código no propio aparecen documentadas en los distintos archivos en el apartado de fuentes.

El contenedor de tests se encuentra publicado en:

Organización del proyecto

La estructura del proyecto y donde encontrar archivos relevantes se encuentra disponible en la documentación.

Algunos sitios claves del proyecto son:

Algunas funcionalidades

Es necesario tener Rust instalado junto a Cargo y make.

Para comprobar que el proyecto no tiene ningún problema de sintaxis

make check

Para instalar las dependencias y compilar el proyecto usar

make build 

Para ejecutar los tests

make test

Para ejecutar el servicio usar

make run

Para instalar las dependencias y compilar en modo de producción

make release

Si se desea la documentación generada por rust para el proyecto

make docs

Documentación

A continuación se lista información de que se puede encontrar en la documentación. Una versión web de la documentación se encuentra en la página web del proyecto en GitHub-Pages.

Autor