Página web donde las empresas rematan sus artículos y los usuarios pujan por ellos.
El proyecto está planeado para correr en Docker. Consta de una API RESTful en Flask (puerto 400) que muestra todos los entry points, un servidor que ejecuta tareas asíncronas con Celery (puerto 5555) ,un servidor WebSocket para la comunicación en tiempo real y un cliente en Vue (puerto 80).
Crear una pagina web funcional que me permita demostrar mis conocimientos en programación web
Vue.js, Vue Router, Vuex, Socket.io, Docker, Flask, Celery, Redis, MariaDB, Git.
Esta es la API de la página, que proporciona toda la información necesaria al cliente, en este caso, Vue. Además, se comunica con un servidor Python, con Celery, para gestionar la información de las tareas a realizar. Para el manejo de eventos en tiempo real, mediante Redis, se comunica con un servidor Socket.
El servidor está desarrollado con Flask ,lo que nos permite manejar las peticiones del cliente . Al ser una imagen de Docker, el servidor se ejecuta sobre Gunicorn.
Mantener una comunicación estable con diversos clientes mediante peticiones HTTP, asegurando la protección de los datos y la seguridad del usuario.
JWT
para asegurar el acceso.Flask, Flask-SQLAlchemy, Redis, Docker, MariaDB.
Uno de los desafíos que enfrenté fue cómo hacer que los remates comenzaran a una hora determinada.
Para solucionarlo, creé otro servidor con Celery que maneja estas tareas programadas.
El servidor Python envía información sobre el nombre de la tarea, el momento de inicio y datos
relevantes, como el UUID del remate que debe comenzar, a través de Redis.
Cuando Celery completa la tarea, notifica a Python mediante peticiones HTTP usando JWT
.
Además, enfrenté el reto de mantener las sesiones seguras, asegurando que pudieran ser actualizadas y cerradas en circunstancias específicas. Para abordar esto, desarrollé mi propio manejador de sesiones. Este sistema almacena la información de las sesiones en una clase, la cual contiene un diccionario con los datos de cada sesión y otro que enlaza a un usuario con todas sus sesiones. Así, cualquier modificación se refleja en todas las sesiones correspondientes.
Al agregar múltiples "trabajadores" de Gunicorn, surgió el problema que las sesiones no eran compartidas. Para ello tome la decision de guardar las sesiones en redis y que cada trabajador acceda o las modifique, pasando por barreras de Redis para tener consistencia de datos
Planeo agregar más funcionalidades:
Link del repositorio: GitHub
Link de la imagen Docker: Docker Hub