Programming-Contest-Suite

Django + DOMjudge suite to host ACM ICPC Contests at Florida State University

View the Project on GitHub FSU-ACM/Programming-Contest-Suite

ACM at FSU Programming Contest Suite

The Programming Contest Suite is a set of tools for running ICPC style programming competitions hosted by the Association for Computing Machinery Florida State University Student Chapter. The PCS is a Django powered contest account registration & management application working alongside the DOMJudge jury system.

Getting Started

Ensure the target development or production machine has a functioning installiation of Docker with docker-compose and docker-swarm.

Development Deployment

From the project root, navigate to the development folder:

cd deploy/dev

If you are running the development deployment for the first time, or have made any changes to the project’s Celery tasks run this:

docker-compose build  

Launch the project in dev mode:

docker-compose up

NOTE: In order to monitor the debug logs, as well as view any emails the suite sends while in debug, it is suggested to NOT use the -d flag with the docker-compose up command.

Production Deployment

The following steps are intended for deploying the suite on the Chapter’s server, Agon.

Initialize the swarm:

docker swarm init

From the project root, navigate to the production folder:

cd deploy/prod

Deploy the services needed to run both registration (contestsuite) and judging (DOMjudge) platforms. Deployment of services uses the Docker stacks, and will utilize the following format:

docker stack deploy -c path/to/compose-file.yaml service_name

NOTE: The service_name above is the stack service name, and does not need to match the name of the app being deployed. Picking good service names aids in monitoring running stacks in the swarm.

Deploy nginx-proxy, which routes traffic between the registration platform and the judging platform:

docker stack deploy -c ./nginx-proxy/docker-compose.yaml nginxproxy

Next, deploy the registration platform.

docker stack deploy -c ./contestsuite/docker-compose.yaml contestsuite

Then deploy DOMjudge:

docker stack deploy -c ./domjudge/docker-compose.yaml domjudge

Lastly, deploy the Judgehosts:

cd ./judgehosts

docker-compose up -d --scale judgehost=<an_integer>

Teardown

Docker stacks:

docker stack rm service_name

Judgehosts:

docker-compose down