Skip to content
forked from NastMz/Unitrack

Proyecto Curso Sistemas Distribuidos

Notifications You must be signed in to change notification settings

JhMateo/Unitrack

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unitrack

Proyecto para el curso Sistemas Distribuidos - Universidad de los llanos

Este proyecto consiste de un backend en Flask con una arquitectura de microservicios que sirve para brindar información sobre los horarios de los paraderos de autobuses, y un frontend en React para la interfaz de usuario. La aplicación cuenta con tres endpoints principales que brindan información sobre los paraderos de autobuses a la aplicación principal. También cuenta con múltiples endpoints extras para la administración del sistema.

Puede ver una demo en vivo de la aplicación del cliente aquí: (http://dualdevs.tech)

Tabla de Contenido

Timetable Service: Ver horarios de paraderos

Este servcio permite obtener los horarios de los paraderos de autobuses. Para utilizarlo se debe enviar una solicitud GET a la URL correspondiente y la aplicación responderá con una lista de todos los horarios disponibles para los paraderos.

Stop-Timetable Service: Ver ID de paraderos a cierta hora

Este servicio permite a los usuarios ver los ID de los paraderos que están programados para llegar a una hora específica. Para utilizarlo se debe enviar una solicitud GET a la URL correspondiente, incluyendo el ID de la hora para la cual desean ver los ID de los paraderos. La aplicación responderá con una lista de los ID de los paraderos que están programados para llegar a esa hora. <URL>/<ID_HORA>

Stop Service: Ver información completa de paraderos

Este servicio permite a los usuarios ver la información completa de una lista de paraderos, incluyendo su ID, nombre, descripción, imagen y ubicación. Para utilizarlo se debe enviar una solicitud POST a la URL correspondiente, incluyendo una lista de los ID de los paraderos que desean ver. La aplicación responderá con la información completa de los paraderos correspondientes.

{
  "stops": [1, 2, 3, ...]
}

Iniciando los Proyectos

Para iniciar los proyectos en este repositorio, deberá tener Python y Node instalados en su máquina si desea ejecutarlos manualmente o puede usar el archivo docker-compose.yml incluido y ejecutarlo directamente sin necesidad de instalar nada. También puede usar las imagenes ya creadas y orquestarlas con minikube en su máquina.

Ejecución individual

Para ejecutar manualmente los proyectos, debes crear la base de datos en PostgreSQL (se incluyen los scripts en el repositorio).

Ejecución del backend

Primero deberá instalar las dependencias para cada proyecto ejecutando pip install -r requirements.txt en el directorio raíz de cada proyecto.

Además debe crear un archivo .env con las variables que estan en .env.example para cada uno.

Para iniciar cualquier proyecto, navegue hasta el directorio del mismo y ejecute el siguiente comando:

> cd <DIRECTORIO_PROYECTO>
> python run.py

*Recuerde que cada servicio esta configurado para correr sobre el puerto 8000 en local, por lo que debera editar el archivo run.py para usar los puertos que desee.

Ejecución del frontend

Primero deberá instalar las dependencias del proyecto ejecutando npm install en el directorio raíz del proyecto frontend.

Además debe crear un archivo .env con las variables que estan en .env.example.

Para iniciar el proyecto frontend, vaya al directorio del frontend y ejecute el siguiente comando:

> cd <DIRECTORIO_FRONTEND>
> npm run dev

Esto iniciará el servidor de desarrollo para el proyecto frontend, y puede ver la aplicación en su navegador web en http://localhost:3000.

Ejecución con docker compose

Debe tener instalado Docker y docker compose en su máquina.

Navegue hasta el directorio del repositorio y ejecute este comando:

> cd <DIRECTORIO_REPOSITORIO>
> docker-compose up --build

Esto iniciará todos los proyectos inlcuida la base de datos. La aplicación se puede acceder en http://localhost:80 y el panel de administración en http://localhost:8080

Ejecución con kubernetes (minikube)

Para la ejecución con kubernetes se tiene un archivo que facilitará este proceso, este archivo es commands_kubernetes.txt en el cual se tienen los comandos a ejecutar junto con un pequeño comentario para cada comando o conjunto de comandos. A continuación, se explicará un poco mejor el contenido del archivo:

Debe tener instalado Docker, minikube, kubectl y curl en su máquina, si no los tiene instalados, en el commands_kubernetes.txt mencionado anteriormente se encuentran los comandos para instalar estas dependencias.

Luego, deberá iniciar minikube e ingress con los comandos:

> minikube start
> minikube addons enable ingress

Esto iniciará el cluster de minikube junto con ingress. Para continuar deberá seguir los pasos del commands_kubernetes.txt hasta ejecutar los manifiestos con los comandos:

> kubectl apply -f unitrack-backend-manifest.yaml
> kubectl apply -f unitrack-frontend-manifest.yaml

Esto hará el despliegue de todas las imagenes docker que se encuentran en docker hub backend y en docker hub frontend, además creara los servicios con sus ingress correspondientes.

Ahora, debe añadir los hosts con el comando:

> sudo nano /etc/hosts

Y agregar las siguientes lineas:

192.168.49.2    unitrack.info
192.168.49.2    db.unitrack.info
192.168.49.2    unitrack.admin

Con esto, tendrá todo listo para dirigirse a unitrack.info o unitrack.admin y probar la aplicación.

Página inicio

image

Al usar maquina virtual no fue posible usar el gps, pero en una maquina linux corriente no debe presentar problema.

Panel administrador

image

Una vez terminado, puede borrar todos los deployments, services e ingress con los comandos que salen en el commands_kubernetes.txt.

About

Proyecto Curso Sistemas Distribuidos

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 69.7%
  • Python 20.2%
  • Dockerfile 5.6%
  • CSS 2.7%
  • Shell 1.2%
  • JavaScript 0.3%
  • HTML 0.3%