BlueGeolock est une application de suivi GPS temps réel utilisant une architecture microservices. Nous avons voulu pousser le projet initial (suivi de deux marqueurs GPS sur une carte) un peu plus loin en créant une simulation de match de foot dans l'univers du manga Blue Lock.
Le site permet de simuler deux types de matchs : un match classique en 11 contre 11 (inspiré par l'arc U-20 du manga) ou bien un match en 3 contre 3 (inspiré par l'arc de la deuxième sélection du manga).
Il est possible de faire tourner tout le projet en local, chaque service de l'architecture disposant de son propre Dockerfile. Cependant, si besoin, on peut les faire tourner de manière individuelle sur des machines virtuelles que l'on reliera ensuite via docker swarm.
Les services étant tous configurés sur le même réseau Docker (bluegeolock_network
), ils pourront continuer de fonctionner.
L'application est composée de plusieurs services interdépendants :
- Un broker Kafka, qui est un genre de bus de données dans lequel on vient écrire et lire des bytes
- Des producers qui sont chargés d'écrire des données dans ce bus (des coordonnées GPS générées aléatoirement en continu)
- Un consumer est chargé de lire ces données, et de les insérer dans une base de données PostgreSQL
- Une base de données PostgreSQL qui stocke les coordonnées GPS lues par le consumer
- Une API FastAPI qui permet de requêter cette base de données PostgreSQL et qui permettra d'établir une connexion Websocket avec le frontend pour envoyer les nouvelles données en continu
- Le frontend (sous Vite + Vue) affiche sur une carte Leaflet l'évolution des marqueurs GPS selon leurs nouvelles coordonnées fournies par la Websocket
- Docker
- Docker Compose
- Clonez le repository :
git clone https://github.com/Snowphey/BlueGeolock.git
cd BlueGeolock
- Lancez le projet à l'aide des scripts bash déjà mis en place :
./start.sh
- Le site est accessible à l'URL
localhost:8080
.
Si l'on souhaite déplacer certains services sur d'autres machines virtuelles, on peut par exemple utiliser la commande docker swarm init
qui renverra le résultat suivant :
$ docker swarm init
Swarm initialized: current node (6h48) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-<generated_token_for_your_cluster> \
<manager internal IP address>:2377
To add a manager to this swarm, run 'docker swarm join-token manager'
and follow the instructions.
On peut alors ensuite ajouter des workers depuis leurs machines virtuelles grâce à la commande qui fournit le token du cluster et l'adresse IP du manager, puis lancer les services souhaités avec docker run
.