E-Learning Platform · Graduation Project
Cloud Hub
An online learning platform, and the containers, pipeline and AWS infrastructure that deliver it.

- Type
- Graduation project
- Year
- 2026
- Catalogue
- 90 courses, 8 tracks
- Cloud
- AWS (EKS, RDS)
Context
The product: a place to learn. The real subject: how it ships.
Students browse tracks such as DevOps, AWS Cloud, Cyber Security and Programming, enroll in courses, watch lessons, leave feedback and get recommendations based on their chosen track. Admins manage courses, lessons, tracks and students, and can review payments and a sales report.
The engineering goal was to treat this like a real service: packaged in containers, released through a pipeline, and running on infrastructure described in code rather than configured by hand.
What I built
- Containerized the application with Docker and a Docker Compose development stack.
- Wrote the Kubernetes manifests, with a shared base and staging and production overlays.
- Built the GitHub Actions workflow from code check through to EKS deployment.
- Defined the AWS network, database, storage and monitoring in Terraform.
- Improved the interface and added track-based course recommendations.
Engineering
What makes it work.
Every image traces back to a commit
The pipeline tags images with the commit SHA before pushing, then points the EKS deployment at that exact tag.
Checks before anything ships
A PHP syntax check across the codebase and a test Docker build both have to pass before an image is pushed.
Safer Kubernetes defaults
Two replicas by default, readiness and liveness probes, and CPU and memory limits. Kustomize overlays set 1 replica for staging and 3 for production.
Monitoring as code
CloudWatch alarms for database CPU, connections and storage send email alerts through SNS, with a dashboard defined in Terraform too.
Architecture, as defined in the repository
GitHub Actions pipeline
- 01
Push to main
GitHub repository
- 02
Check
PHP syntax check, test Docker build
- 03
Publish
Image pushed to Docker Hub, tagged by commit SHA
- 04
Deploy
kubectl applies Kustomize manifests, sets new image
AWS · us-east-1
Amazon EKS · outside Terraform
Deployment: cloudhub
PHP 8.2 + Apache, 2 replicas, health probes, resource limits
Service: LoadBalancer
Public entry point to the application
Managed by Terraform · state in S3
RDS MySQL 8
Encrypted, 7-day backups, enhanced monitoring
VPC
2 public and 2 private subnets across 2 zones
CloudWatch
Database alarms and a dashboard
SNS
Email alerts from the alarms
S3 bucket
Provisioned for project assets
Tech stack
- Application
- PHP 8.2 · Apache · MySQL
- Containers
- Docker · Docker Compose · Nginx (local TLS)
- Orchestration
- Kubernetes · Amazon EKS · Kustomize
- Delivery
- GitHub Actions · Docker Hub
- Infrastructure
- Terraform · VPC · RDS · S3 · CloudWatch · SNS
Project status
- The repository contains the application, Dockerfiles, Kubernetes manifests, workflow and Terraform shown here.
- The workflow has completed its deploy steps to EKS in recorded GitHub Actions runs.
- Academic project: no public demo, and no traffic or uptime figures to report.
- Checkout is a simulated development flow, not a real payment integration.
- The EKS cluster was created outside Terraform, so the diagram shows it separately.
What I'd improve next
- Bring the EKS cluster under Terraform so all infrastructure is defined in one place.
- Replace static AWS keys in CI with short-lived credentials through GitHub OIDC.
- Make the pipeline fail on an unhealthy rollout rather than continuing.
- Add automated application tests alongside the syntax check.
Need something similar?
Or see the other case study: Royal Vacation