Skip to content
/ mdoj Public

Mingdao OnlineJudge, A performant contest management system base on cutting edge stack.

Notifications You must be signed in to change notification settings

mdcpp/mdoj

Repository files navigation

MDOJ

wakatime master staging

Performance-oriented contest management system for IOI like contest

🚧 work in progress, please wait until first release

Highlights

  • 🪶Lightweight: Only 50MB for the binary(plugin is very large)
  • ⚡Lighting fast: Using Rust+Grpc-Web and correct implementation/algorithm
  • 🚀Easy to use: By using docker compose, you can setup the system in minutes
  • ⏱️Accurate: Directly use cgroupv2(no docker in judger), Report time deviation to frontend
  • 🔒Secure: Using nsjail to sandbox user submitted code

Features

  • 🐳Scalable: When deployed in cluster, you can scale the system to satisfy reasonable request.
  • 🗄️Extensible: You can add any programing language by placing a *.lang file in plugins folder
  • 🔭 Powerful metrics/tracing using Open-Telemetry

Quick Start

Copy docker/quickstart file to your server and run docker compose up -d, then open https://localhost in your browser.

Because we use grpc-web(server-side stream), HTTP2 is required, you can ignore it or place cert and key in ./cert folder.

login as admin@admin and start play arounds.

See wiki for more details.

Full Setup(Docker)

Please download source code from release

  1. Copy docker/production from source code to your folder
  2. generate config for judger by starting the judger once, and edit config
  3. generate config for backend by starting the backend once
  4. download and extract plugin(language support) of your choice to ./plugins

If you prefer to use default config, you can skip step 2 and 3.

Setup for development

  1. install following package:
  • From system package manager: protobuf-devel, gcc
  • From rustup: rustup, cargo, just
  • From their website: docker, docker-compose

Then start reading documents in subfolder of your interest.

you may need to run just prepare in judger, backend subfolder.

Environment

Set CONFIG_PATH to change the path to config file, default value is config.toml