A collaborative, microservices-based platform for students to form study groups, share resources, manage tasks, and communicate in real time.
Click to view architecture diagram
flowchart LR
subgraph Cloud
A[OpenStack]
B[Kubernetes]
end
subgraph Backend
C[Spring Boot]
D[MySQL]
E[PostgreSQL]
end
subgraph Frontend
F[Angular]
end
A --> B
B --> C
C --> D
C --> E
B --> F
StudyBuddy is built with Spring Boot, Angular, MySQL, PostgreSQL, and WebSockets for scalability, security, and seamless deployment on Kubernetes over OpenStack.
Key Capabilities:
- Form and manage study groups with role-based permissions
- Share and categorize resources securely
- Assign and track tasks with deadlines and priorities
- Communicate via real-time group and private chat
The modular microservices architecture ensures maintainability and scalability, while JWT authentication and Kubernetes Secrets provide robust security.
- User Management: Registration, login, profile management, JWT-based authentication
- Study Groups: Create, join, and manage groups with owner, admin, member, and guest roles
- Resource Sharing: Upload, categorize, and version study materials; access restricted to group members
- Task Management: Create, assign, and track tasks with deadlines and priorities
- Real-Time Chat: Group and private messaging via WebSockets with persistent chat history
- Scalable Deployment: Runs on Kubernetes with persistent storage and ingress routing
StudyBuddy uses a microservices approach, with each service responsible for a specific domain. Services communicate via REST or WebSockets and are deployed in a Kubernetes cluster on OpenStack (Dalmatian, Ubuntu 24.04), provisioned using Ansible.
Service | Description | Database | Key Endpoints | Config File |
---|---|---|---|---|
User Management | Registration, login, profile, JWT authentication | MySQL | /api/doRegister , /api/login |
user-service-properties |
Study Group | Group creation, membership, role management | MySQL | /api/groups |
group-service-properties |
Resources | Upload/download, categorization, versioning | PostgreSQL | /api/ressources |
resources-service-properties |
Tasks | CRUD, deadlines, status tracking, group validation | MySQL | /api/tasks |
tasks-service-properties |
Chat | Real-time messaging, chat history, membership check | MySQL | /api/chat |
chat-service-properties |
All configuration files are placed in each service’s
src/main/resources
directory.
- Backend: Spring Boot (Java 21)
- Frontend: Angular (served via Kubernetes Ingress)
- Databases: MySQL (User, Group, Tasks, Chat), PostgreSQL (Resources)
- Authentication: JWT (HMAC-SHA256, managed via Kubernetes Secrets)
- Real-Time: Spring WebSockets
- Orchestration: Kubernetes (Pods, Deployments, Services, Ingress)
- Storage: Kubernetes Persistent Volumes (OpenEBS on OpenStack)
- CI/CD: GitHub Actions (self-hosted runner)
- Monitoring: Prometheus, Grafana
- JWT Authentication: Stateless, short-lived tokens (15–60 min), validated on every request
- Password Hashing: BCrypt for secure credential storage
- Kubernetes Secrets: Encrypted storage for JWT keys and DB credentials
- RBAC: Kubernetes role-based access controls
- TLS: NGINX Ingress controller for HTTPS with TLS termination
- Access Control: Enforced group membership and role-based permissions
StudyBuddy is deployed on a Kubernetes cluster provisioned on OpenStack (Dalmatian, Ubuntu 24.04) using Ansible.
Key Components:
- Pods/Deployments: Run and manage microservice containers
- Services: Stable IPs/DNS for inter-service communication
- Persistent Volumes: OpenEBS-backed storage for databases and files
- Ingress: NGINX controller routes external traffic
- Namespaces: Separate
studybuddy-prod
andstudybuddy-dev
- ConfigMaps/Secrets: Store configuration and sensitive data
- GitHub Actions Runner: Self-hosted for CI/CD
Sample Ingress Configuration:
location ^~ /api/users {
proxy_pass http://user-service:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
- OpenStack (Dalmatian, Ubuntu 24.04) with Nova, Neutron, Cinder, Keystone, Swift, Placement, Glance, Heat, Horizon
- Kubernetes cluster (deployed via Ansible)
- OpenEBS (Jiva storage class)
- Docker, Git
- MySQL and PostgreSQL (deployed via CI/CD)
- NGINX Ingress Controller
- GitHub Actions self-hosted runner
- GitHub Secrets:
KUBE_CONFIG
,DOCKER_USERNAME
,DOCKER_PASSWORD
-
Clone the Repository
git clone https://github.com/<your-repo>/studybuddy.git cd studybuddy
-
Configure Service Properties
- Create
<service>-properties
files in each backend service’ssrc/main/resources
directory. - Example for user service:
spring.datasource.url=jdbc:mysql://mysql:3306/studybuddy_user spring.datasource.username=root spring.datasource.password=<your-mysql-password> jwt.secret=<your-jwt-secret>
- Create
-
Set Up Kubernetes Secrets
kubectl create secret generic studybuddy-secrets \ --from-literal=jwt-secret=<your-jwt-secret> \ --from-literal=mysql-password=<your-mysql-password> \ --from-literal=postgres-password=<your-postgres-password>
-
Deploy with CI/CD
- Push to the
production
branch to trigger deployment:git push origin production
- Monitor deployment in GitHub Actions.
- Push to the
-
Verify Deployment
kubectl get pods -n studybuddy-prod kubectl get ingress -n studybuddy-prod
-
Access the Application
- Open
https://studybuddy.example.com
in your browser.
- Open
MySQL and PostgreSQL instances are automatically deployed by the CI/CD pipeline for each service. Ensure credentials in <service>-properties
match those in Kubernetes Secrets.
- Pipeline: Defined in
.github/workflows/production.yml
- Triggers: Pushes to
production
branch - Steps: Deploys databases, builds/pushes Docker images, applies Kubernetes manifests, ensures rollout
Monitor pipeline status in the GitHub Actions tab.
- Monitoring: Prometheus and Grafana dashboards
- Troubleshooting:
- PVC Not Bound: Check OpenEBS and storage class
- Runner Offline: Verify runner pod and GitHub registration
- Deployment Fails: Inspect pod logs and configuration files
- Database Errors: Check service credentials and DB status
- OpenStack Issues: Use Horizon and CLI tools for diagnostics
We welcome contributions! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature
) - Commit changes with descriptive messages
- Push to your branch and open a Pull Request
See our Code of Conduct and Contributing Guidelines.
This project is licensed under the MIT License. See LICENSE.md for details.
Production-ready as of May 2025, running on OpenStack Dalmatian and Kubernetes.
For issues or feature requests, use GitHub Issues.
Planned enhancements: Resource versioning and ELK Stack logging.