源码地址为:https://github.com/QingdaoU/OnlineJudge
可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0
一、安装所依赖的环境
sudo apt-get update && sudo apt-get install -y vim python-pip curl git
sudo apt-get install docker-compose
二、使用Git克隆项目并完成部署
git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git && cd OnlineJudgeDeploy
docker-compose up -d(root用户使用该命令)或sudo -E docker-compose up -d(非root用户使用该命令)
用户名和密码分别是:root和rootroot
浏览器默认打开为:http://IP地址/
例如http://192.168.126.128,显示界面如下:
三、常见问题
常见问题一
错误信息:ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
解决办法:修改docker-compose.yml中的version由3改为2
常见问题二:
错误信息:ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
解决办法:
docker-compose up -d(root用户使用)
非root执行会出现这个异常
非root应该执行这条命令
sudo -E docker-compose up -d
docker exec -it oj-backend /bin/sh
python3 manage.py inituser --username USERNAME --password NEW_PASSWORD --action=reset
四、小结
这个OJ平台是国内开源的相对环境很好搭建的,其实参考官方文档也能搭建,本人之所以写,一来为自己,二为分享给其他朋友,让他们尽可能少吃点亏。
因为新版系统还处于快速升级迭代中,如果您部署或者正在使用OnlineJudge,建议watch一下本项目,这样每次发布新的release的时候就可以收到邮件提醒了。
以下方法仅适用于用官方部署脚本搭建的OJ
如果对部署仓库代码有改动,请自行备份或git stash
,然后在 OnlineJudgeDeploy目录运行下列命令即可完成升级:
git pull
docker-compose pull && docker-compose up -d
不过一般来说Redis
和Postgresql
的镜像无需更新,因此可对OJ相关镜像单独pull, 这样可以节约升级时间, 这和上述命令在大多数情况下达到的效果是一样的(除非大版本升级):
git pull
docker pull registry.cn-hangzhou.aliyuncs.com/onlinejudge/judge_server
docker pull registry.cn-hangzhou.aliyuncs.com/onlinejudge/oj_backend
docker-compose up -d
如果还有任何问题,请提出issue。
2.0版支持两种比赛模式, 可以根据需要进行灵活选择:
ACM 模式
在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的real time rank
即为是否封榜,封榜后将不再刷新排名。
OI 模式
在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交为准,排名规则为多个题目的总分数。
为了照顾OI模式五花八门的规则, 也由于OI模式下没有封榜一说,我们为OI模式下的real time rank
赋予了特殊的意义:
当real time rank
开启时,选手能在提交后立即看到评判结果,并可以查看Rankings, Submissions等信息(类似ACM,只是按得分点计分了), 当real time rank
关闭时, 比赛参与者在提交后将不能获取结果,直到比赛结束才可以查看。
需要注意的是超级管理员和该比赛的创建者对比赛拥有所有权, 即不受上述任何约束,可以在任何模式下查看测试样例的结果,也可以在封榜时通过Force Update
来强制刷新榜,且刷新后的榜仅对管理者可见