This is a project for the Software Architecture subject at the National University of Colombia.
It uses a layered architecture with multiple microservices, and different technologies.
This project was created with the intention of being a platform for the management of academic information, where students and teachers can interact with the system easily offering a diverse set of services.
Name | Github | |
---|---|---|
David Esteban Hernandez Gomez | davhernandezgo@unal.edu.co | DavidHernandez2001 |
Josué David Briceño Urquijo | jbriceno@unal.edu.co | jdbu2002 |
Juan Diego Ramírez Lemos | jramirezle@unal.edu.co | Judirale13 |
Santiago Rodríguez Vallejo | sarodriguezva@unal.edu.co | sarodriguezva |
Santiago Sánchez Mora | sansanchezmo@unal.edu.co | sansanchezmo |
Sebastian Garnica Quiroz | sgarnicaq@unal.edu.co | SGman98 |
- Git 🐱💻
- Docker 🐳
- Docker Compose 🐙
- OpenSSL 🛡️
Clone the repository and run the following command to get the submodules:
git submodule update --init --recursive
Create the ssl certificates running the following command in the security folder:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout aims.key -out aims.crt -config aims.conf
Then run the following command to start the project:
docker-compose up -d --build
This will run:
6 containers for databases
7 containers for microservices
1 container for the api-gateway
1 container for the message broker
1 container for the web application
2 containers for the reverse proxies (one for the web application and one for the api-gateway)
1 container for the ldap and 1 for phpldapadmin
1 container for the interface
In total 21 containers
Each part of the project have a different git repository with its own documentation and deployment instructions and files.
It contains all the databases needed for the project.
Database | Type |
---|---|
account-db | MySQL 🐬 |
college-db | MySQL 🐬 |
enrollment-db | PostgreSQL 🐘 |
grading-db | MongoDB 🍃 |
profile-db | MongoDB 🍃 |
subject-db | MySQL 🐬 |
There is an initial script with some data in the corresponding logic folder, the file is called
init.sql
.
It contains all the microservices, each one uses the corresponding database, and exposes a REST API to interact with the data.
Microservice | Language | Framework | Repository |
---|---|---|---|
account-ms | JavaScript 📜 | Express 🚀 | Link |
college-ms | Java ☕ | Spring Boot 🍃 | Link |
enrollment-ms | Java ☕ | Spring Boot 🍃 | Link |
grading-ms | Rust 🦀 | Rocket 🚀 | Link |
profile-ms | Python 🐍 | Flask 🌶️ | Link |
schedule-ms | Go 🐹 | Gin 🍸 | Link |
subject-ms | Java ☕ | Spring Boot 🍃 | Link |
The schedule microservices uses the same database as the enrollment microservice. enrollment-ms is for mutations and schedule-ms is for queries.
It contains the API Gateway, this gateway connects all the microservices and exposes a single API using the GraphQL query language, and the Apollo Server.
Microservice | Language | Framework | Repository |
---|---|---|---|
ag | TypeScript 📜 | Express 🚀 | Link |
The connection with the grading microservice uses a queue message broker, in this case RabbitMQ.
In this layer, we have the web application and the mobile application.
Application | Language | Framework | Repository |
---|---|---|---|
web | TypeScript 📜 | Angular 🍃 | Link |
mobile | Dart 🎯 | Flutter 🎯 | Link |
To run the mobile application, you need to install Flutter and run the following command in the apps/mobile folder:
flutter run
In this layer, we have 2 proxies, one for the web application and one for the API gateway.
.. | Technology |
---|---|
web-app-proxy | Nginx 🐳 |
api-gateway-proxy | Nginx 🐳 |
account-ldap | OpenLDAP 🐳 |
phpldapadmin | phpLDAPadmin 🐳 |
In this layer, we have the interface it exposes a SOAP API with the getSubjects functionality.
.. | Technology |
---|---|
interface | Javascript 📜 Node.js 🐳 SOAP 🐳 |