This repository contains the complete infrastructure of the Learning Dashboard ecosystem, including all dockerized services, databases, webhooks, and administration tools.
- System Architecture
- Prerequisites
- Quick Start
- Configuration
- Included Services
- Usage
- Development
- Troubleshooting
The ecosystem consists of 7 interconnected services that work together to provide a complete analysis and management system for the Learning Dashboard:
┌──────────────────────────────────────────────────────────────────┐
│ LEARNING DASHBOARD ECOSYSTEM │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Admin Tool │──────────┐ │ LD Frontend │ │
│ │ Frontend │ │ │ (Tomcat UI) │ │
│ │ (React+Vite) │ │ └───────┬─────────┘ │
│ └────────┬────────┘ │ │ │
│ │ │ │ │
│ ├──────────────┐ │ │ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Admin Tool │ │ LD Eval │ │ Tomcat │ │
│ │ Backend │ │ (Metrics & │ │ (LD Core) │ │
│ │ (Spring Boot) │ │ Evaluation) │ └────────┬────────┘ │
│ └────────┬────────┘ └────────┬────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ ▼ │ ▼ │
│ ┌─────────────────┐ │ ┌─────────────────┐ │
│ │ Tomcat │ │ │ PostgreSQL │ │
│ │ (LD Backend) │◄──────────┘ │ (SQL Data) │ │
│ └────────┬────────┘ └─────────────────┘ │
│ │ │
│ ▼ ┌─────────────────┐ │
│ ┌─────────────────┐ │ MongoDB │ │
│ │ PostgreSQL │ ┌────────►│ (Metrics & │ │
│ │ (Projects, │ │ │ Events) │ │
│ │ Students) │ │ └─────────▲───────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │
│ ┌────────┴────────┐ │ │
│ │ LD Eval │──────────┘ │
│ │ (Process & │ │
│ │ Store) │ │
│ └────────▲────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ │ LD Connect │ │
│ │ (Webhooks) │ │
│ └────────▲────────┘ │
│ │ │
│ ┌───────────────────────────────┴───────────────────────────┐ │
│ │ EXTERNAL SOURCES │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ GitHub │ │ Taiga │ │ │
│ │ │ (Webhooks) │ │ (Webhooks) │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
1. Event Capture (LD Connect):
- Receives webhooks from GitHub (push, pull requests)
- Receives webhooks from Taiga (tasks, milestones)
- Notifies LD Eval for processing
2. Metrics Processing (LD Eval):
- Evaluates received changes
- Calculates metrics and quality factors
- Stores results in MongoDB
3. Main Visualization (LD Frontend):
- Displays metrics and factors from MongoDB
- Displays project data from PostgreSQL
- Interface accessible via Tomcat
4. Administration (Admin Tool):
- Frontend: React interface for managing teams
- Backend: Spring Boot API for administrative operations
- Connects to Tomcat (LD Backend) to access data
- Connects directly to LD Eval for certain queries
- All backed by PostgreSQL
- Docker Desktop (Windows/Mac) or Docker Engine (Linux)
- Docker Compose v2.0 or higher
- Git to clone the repository and its submodules
- Available ports: 5000, 5001, 5432, 5433, 8080, 8888, 27017, 3000
git clone --recurse-submodules https://github.com/Learning-Dashboard/learning-dashboard-deploy.git
cd learning-dashboard-deployThis command downloads the main repository and also automatically initializes the required submodules.
If you already ran git clone without including the submodules, you can download them afterwards with:
git submodule update --init --recursiveCopy the example file and edit it with your values:
cp .env.template .envEdit the .env file with your settings (see Configuration).
docker compose up -dUse docker compose without a hyphen. That is the current Docker Compose v2 syntax.
docker compose psYou should see all services with a "Up" status.
The .env file at the root contains all centralized configuration:
# URLs de túneles ngrok (cambiar según sea necesario)
NGROK_LD_URL=https://xxxx.ngrok-free.app
NGROK_LDCONNECT_URL=https://yyyy.ngrok-free.app
# Taiga Configuration
TAIGA_API_URL=https://zzzz.ngrok-free.dev/api/v1
TAIGA_AUTH_URL=https://api.taiga.io/api/v1
TAIGA_USERNAME=tu_usuario
TAIGA_PASSWORD=tu_password
# GitHub Configuration
GITHUB_TOKEN=ghp_xxxxxxxxxxxxx
# MongoDB Configuration
MONGO_USER=admin
MONGO_PASSWORD=3LnS985q7tR9
# PostgreSQL Configuration
DB_USER=postgres
DB_PASSWORD=exampleImportant:
TAIGA_API_URLpoints to the FIB Taiga ngrok (for queries)TAIGA_AUTH_URLalways points to public Taiga (for authentication)- Never commit the
.envfile to Git (it is listed in.gitignore)
| Service | Port | Description | Technology |
|---|---|---|---|
| Admin Tool Frontend | 3000 | Administration interface | React + Vite + Nginx |
| Admin Tool Backend | 8080 | Administration API | Spring Boot 3.5.6 (Java 17) |
| LD Connect | 5000 | GitHub/Taiga webhook management | Python 3.9 + Flask |
| LD Eval | 5001 | Evaluation and metrics | Python 3.9 + Flask |
| Tomcat (LD Core) | 8888 | Main Learning Dashboard | Java + Tomcat 9 |
| PostgreSQL | 5433 | Main database | PostgreSQL 9.6 |
| MongoDB | 27017 | Events database | MongoDB 6.0 |
- Admin Tool: http://localhost:3000
- Learning Dashboard: http://localhost:8888
- MongoDB Compass: localhost:27017 (user:
admin, password:3LnS985q7tR9)
- Go to the Admin Tool at http://localhost:3000
- Navigate to the "Import Teams" section
- Upload an Excel file with the specified format
- The system will validate the projects in Taiga and GitHub
- Teams will be created automatically in the LD
GitHub and Taiga webhooks automatically send events to LD Connect when changes occur:
- GitHub webhook URL:
{NGROK_LDCONNECT_URL}/webhook/github?prj=project-name - Taiga webhook URL:
{NGROK_LDCONNECT_URL}/webhook/taiga?prj=project-name
# Admin Tool Backend
docker compose build admintool_backend
docker compose up -d admintool_backend
# Admin Tool Frontend
docker compose build admintool_frontend
docker compose up -d admintool_frontend
# LD Connect
docker compose build ld_connect
docker compose up -d ld_connectdocker logs -f LDConnect
docker logs -f ld_admintool_backend
docker logs -f admintool_frontenddocker compose down
docker compose up -ddocker exec -it LDConnect bash
docker exec -it ld_admintool_backend sh- Verify that Docker Desktop is running
- Check that the required ports are not already in use:
netstat -ano | findstr :8080 netstat -ano | findstr :3000
- Review the logs:
docker compose logs
If you see Unauthorized errors in the logs:
- Verify that the
.envfile has the correct credentials - Restart the services:
docker compose restart ld_connect ld_eval
If you see 401 Unauthorized when querying milestones:
- Cause: The FIB Taiga ngrok requires authentication
- Solution: Verify that
TAIGA_API_URLpoints to the correct ngrok and that the ngrok server has authentication disabled
- Verify that ngrok is running and the URL is accessible
- Check that the webhook in GitHub/Taiga has the correct URL
- Review the LD Connect logs:
docker logs LDConnect --tail 50
- Verify that the backend is running:
docker ps | grep admintool - Check the Nginx configuration in the frontend
- Review the backend logs:
docker logs ld_admintool_backend
- Never commit the
.envfile to Git - Use
.env.templateas a reference to create your local.env - Tokens and passwords should be regenerated in production
- MongoDB and PostgreSQL are only accessible from
127.0.0.1(localhost)
-
Ngrok URLs: Ngrok tunnels change every time ngrok is restarted. Update
NGROK_LD_URLandNGROK_LDCONNECT_URLin the.envwhen necessary. -
FIB Taiga: If its ngrok changes, update
TAIGA_API_URLin the.env. -
Git Submodules: The repositories inside learning-dashboard-infrastructure (LD-learning-dashboard, ld_admintool, etc.) are independent repositories. You can commit and push in each one separately.
-
Rebuilding containers: If you change Python or Java code, you need to rebuild the corresponding container with
docker compose build <service>. -
Database: PostgreSQL and MongoDB data is stored in Docker volumes. It persists even if you restart the containers.
-
Gitflow: Follow the Gitflow branching model for new features and bug fixes. Create feature branches from
developand merge back when done. Then create a release branch fromdevelopand merge intomainfor production releases.
Please check the AUTHORS.md file for a complete list of contributors to the Learning Dashboard project.