Main modules are available below:
- Backend(Django): https://github.com/dAiv-CNU/OnlineJudge
- Frontend(Vue): https://github.com/dAiv-CNU/OnlineJudgeFE
- Judger Sandbox(Seccomp): https://github.com/dAiv-CNU/Judger
- JudgeServer(A wrapper for Judger): https://github.com/dAiv-CNU/JudgeServer
- System: Ubuntu 18.04 LTS
-
Install the necessary dependencies
sudo apt-get update sudo apt-get install -y vim python3-pip curl git sudo pip3 install --upgrade pip sudo pip3 install docker-compose
-
Install Docker
Install using script:
sudo curl -sSL get.docker.com | sh
Other installation methods: https://docs.docker.com/install/
-
Please select a location with some surplus disk space and run the following command:
git clone -b 2.0 https://github.com/dAiv-CNU/OnlineJudgeDeploy.git deploy sudo ln -rs deploy ./Desktop/deploy cd deploy
-
Build custom docker images (if needed)
git clone https://github.com/dAiv-CNU/OnlineJudge.git backend sudo docker buildx build ./backend -t oj-image/backend --load
-
Start service containers
sudo docker compose up -d
-
Check status
sudo docker ps -a
According to the network speed, the setup can be completed automatically in about 5 to 30 minutes without manual intervention.
Wait for the command execution to complete, and then run docker ps -a
. When you see that the status of all the containers does not have unhealthy
or Exited (x) xxx
, it means OnlineJudge has started successfully.
Access the server's HTTP 80 port or HTTPS 443 port through a browser, and you can start using it. The background management path is /admin
, the super administrator user name automatically added during the installation process is root
, and the password is rootroot
. If you log in successfully, please change your account password immediately..
Don't forget to read the documentation: http://opensource.qduoj.com/
-
Download the Nginx installation package
- Please use nginx latest version: http://nginx.org/en/download.html
- & use headers-more-nginx-module compatible version
wget 'http://nginx.org/download/nginx-1.22.1.tar.gz' tar -xzvf nginx-1.22.1.tar.gz rm *.tar.gz cd nginx-1.22.1
wget 'https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.37.tar.gz' tar -xzvf v0.37.tar.gz
-
Build and Install
sudo apt-get install -y libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --add-module=./headers-more-nginx-module-0.37 make sudo make install /usr/local/nginx/sbin/nginx -V sudo ln -s /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf sudo ln -s /usr/local/nginx/sbin/nginx /sbin/nginx
-
Clean up build files
cd .. rm -rf nginx-1.22.1
-
Install Certbot
sudo apt-get install letsencrypt -y
-
Shutdown Global/Docker System Nginx
sudo service nginx stop sudo docker compose down
-
Obtain SSL Certificate
sudo certbot certonly --standalone -d daiv.ddns.net sudo cat /etc/letsencrypt/live/daiv.ddns.net/fullchain.pem
-
Add SSL Settings to Nginx Config
sudo cp ./nginx/default /etc/nginx/sites-available/default
-
Restart Nginx
sudo nginx -t sudo service nginx restart sudo docker compose up -d
-
Add a scheduled task to renew the certificate
sudo chmod +x cert_renew.sh sudo crontab -e
- add the following line to the file
30 4 * * 0 /home/daiv/deploy/cert_renew.sh
- restart cron service
sudo service cron start
-
Stop service containers
sudo docker compose down
-
Delete all docker containers and images
sudo docker stop $(sudo docker ps -a -q) sudo docker rm $(sudo docker ps -a -q) sudo docker rmi $(sudo docker images -q)