This is a comprehensive cloud-native application built by Team B for the Cloud Distributed Computing course at Aalen University 2025. It includes multiple backend microservices, a React frontend, monitoring and logging tools (Grafana + Fluent Bit), time-series storage with InfluxDB, and containerized deployment with Docker Compose.
Below is an overview of code authorship, listing contributors and the files or components they created or co-developed.
src/backend/microservices/api_gateway/src/backend/microservices/api_fetcher/src/backend/microservices/rag_chatbot/src/docker-compose.prod.ymlapi/video/redisintegrationredis-insightsintegrationqdrantintegration- Deployment on AWS
src/backend/microservices/Influx/src/grafana/Logs/src/fluent-bit/src/docker-compose.dev.ymlinfluxdbintegration- Grafana dashboard setup
- Deployment on AWS
backend/microservices/forecasting/notebooks/timeseries_foecasting.ipynbscreenshots/- InfluxDB data ingestion pipeline
- Model selection and parameter tuning
- Model evaluation
- Deployment on AWS
src/frontend/nginx/nginx.confwireframes/src/.dockerignoresrc/.gitignoresrc/grafana/Historysrc/grafana/History & Forecast- Deployment on AWS
frontend/project structure and shared componentsbackend/project structure and shared componentsdoc/project structure and shared components.env.exampleand system-wide environment setupREADME.md,LICENSE, and documentation planning
This project adheres to industry best practices to ensure high code quality, maintainability, and scalability.
We apply the SOLID design principles across all microservices:
- S – Single Responsibility Principle: Each module or function has one clear responsibility.
- O – Open/Closed Principle: Components are open for extension, but closed for modification.
- L – Liskov Substitution Principle: Services are designed to be substitutable without breaking behavior.
- I – Interface Segregation Principle: Interfaces are client-specific and not bloated.
- D – Dependency Inversion Principle: High-level modules do not depend on low-level modules. Abstractions are key.
We follow Clean Architecture concepts:
- Separation of Concerns: Logic is decoupled from frameworks and I/O.
- Domain-Centric: Business logic drives the structure.
- Independent Layers: Each layer (e.g. routing, services, data) is isolated and testable.
- Port & Adapter Model: Allows easy swap of databases, APIs, or external tools.
This project meets the expectations of the CP88 Clean Code & Microservice Architecture unit by demonstrating:
- Modular service boundaries
- Configuration via
.envand Docker Compose - Infrastructure-as-code principles
- Observability (logging + monitoring)
- Robust naming conventions and documentation
.
├── backend/microservices/
│ ├── api_fetcher/
│ ├── api_gateway/
│ ├── forecasting/
│ ├── influx/
│ └── rag_chatbot/
├── frontend/
│ ├── public/
│ ├── src/
│ ├── Dockerfile
│ ├── package.json
│ └── README.md
├── grafana/
│ ├── grafana.ini
│ ├── History/
│ ├── History & Forecast/
│ └── Logs/
├── nginx/
│ └── nginx.conf
├── notebooks/
├── fluent-bit/
│ ├── fluent-bit.conf
│ ├── parsers.conf
│ ├── enrich_docker_log.lua
│ └── extract_container_name.lua
├── docker-compose.dev.yml
├── docker-compose.prod.yml
├── .env.example
└── README.md
- Frontend: React
- Backend: Python (Microservices)
- Database: InfluxDB (time-series), Redis, Qdrant (vector DB)
- Monitoring: Grafana
- Logging: Fluent Bit
- Deployment: Docker, Docker Compose, Nginx
Copy and configure your environment file:
cp .env.example .envUpdate values in .env including:
DOCKER_INFLUXDB_INIT_USERNAME=admin
DOCKER_INFLUXDB_INIT_PASSWORD=adminadmin
DOCKER_INFLUXDB_INIT_ORG=HSAA
DOCKER_INFLUXDB_INIT_BUCKET=25s-cd-teamb
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mySuperSecretToken123!
GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=adminadmin
USER_AGENT_SEC=your-secret
DEEPSEEK_API_KEY=your-api-key
OPENAI_API_KEY=your-api-key
QDRANT_HOST=qdrant
QDRANT_PORT=6333
COLLECTION_NAME=your-vector-collection
REDIS_HOST=redissudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.12 -y
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1brew update
brew install [email protected]
brew link --overwrite [email protected]- Download from: https://www.python.org/downloads/release/python-3120/
- Run installer and check Add Python to PATH
- Confirm:
python --versiondocker-compose -f docker-compose.dev.yml up --builddocker-compose -f docker-compose.prod.yml up -d- InfluxDB: Time-series database for metrics
- Redis: In-memory cache/database
- Qdrant: Vector search database
- api-gateway: Orchestrates backend communication
- api-fetcher: Fetches and processes external data
- forecasting: Forecast logic (likely ML-based)
- influx-client: Interfaces with InfluxDB
- rag-chatbot: RAG-based assistant using vector search + LLM
- frontend: React UI
- nginx: Reverse proxy for frontend/backend routes
- grafana: Metrics dashboards
- fluent-bit: Log aggregation, parsing, enrichment
- redisinsight: GUI for Redis (http://localhost:5540)
| Service | URL |
|---|---|
| Frontend | http://localhost |
| Grafana | http://localhost:3000 |
| RedisInsight | http://localhost:5540 |
| InfluxDB | http://localhost:8086 |
These are declared in docker-compose:
influxdb-datagrafana-dataqdrant-dataredis-dataredisinsight-data
- Use
docker logs <container>for troubleshooting - Use
docker-compose psto check service health - Test API endpoints through
nginxexposed at port80
MIT License — Team B, 25-CDC Cohort
- Repo owners: [email protected], [email protected], [email protected], [email protected] If you encounter issues, check the logs of failing services or validate environment variables are correctly configured.