Skip to content

RafikFarhad/sust-oj-k8s

Repository files navigation

SUST Online Judge

This repository contains all Kubernetes configuration files for deploying out SUST Online Judge.

We are in still beta version of this release. Although our alpha version is running as a production version for internal use inside the university

Our project is broken down on several microservices after we delivered the alpha version to the university. And the current version is a voluntary effort from the creators and backers.

Creators

Technologies

Begining of this project we started with Laravel 5 as our web end, Python2.7 for our judging system. For the time being, we introduced more technology as we felt necessary for this project. Currently, the project is broken down with these following micro-services.

Repository Technology Role
judgeMod Python3 Judging and Sandboxing
masterCODE Laravel 8 Main API Backend
doCODE NuxtJS Contestant Frontend
subCODE Laravel 8 Judge Interface
liveCODE NodeJS Real time notification provider via WS
- Minio S3 Complient Storage Service
- MySQL Database Service
- RabbitMQ Inter-service messaging service
- Redis Caching Service
ELK Stack Logging
push-to-gcr-github-action Github Action CI/CD

Currently, our repositories are not public. We will make them public as soon as we are ready to release and tag the projects with proper license

Deployments

We use continuous deployment process in our project. Everytime we released a version with a git tag, the github-action automatically builds an appropriate docker image and pushes the image in docker registry. Currently, we are using Google Cloud Registry. For this, we released a generic github-action in the marketplace to make this step automated.

Development

In development, we use docker-compose. You can find the docker-compose configs file in this repository: sust-oj-compose

Tips

A possible serial to follow

  • create namespace
  • create docker-container-registry-secrets
  • create ssl-role, ssl-secrets and run k8s-nginx-letsencrypt job
  • create redis, rabbitmq, mysql with PVC
  • create subcode and then migrate DB and php artisan permission:cache
  • create livecode and test real time notification
  • create mastercode and test /api/v1/ping
  • create docode
  • optional: expose tcp-services