Skip to content
Yassen Ashraf
All projects

E-Learning Platform · Graduation Project

Cloud Hub

An online learning platform, and the containers, pipeline and AWS infrastructure that deliver it.

Cloud Hub student workspace in a dark blue theme, with profile navigation, an account overview and an account details form. Avatars and test account details are blurred.
Student workspace, from a test account. Avatar and test details are blurred.
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

Cloud Hub architecture. A push to main triggers GitHub Actions, which checks the code, publishes a Docker image to Docker Hub and deploys it to Amazon EKS. The application on EKS connects to an RDS MySQL database. Terraform manages the VPC, RDS, S3, CloudWatch and SNS. The EKS cluster is created outside Terraform.

GitHub Actions pipeline

  1. 01

    Push to main

    GitHub repository

  2. 02

    Check

    PHP syntax check, test Docker build

  3. 03

    Publish

    Image pushed to Docker Hub, tagged by commit SHA

  4. 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

Let's Work Together