Docker搭建QingdaoU OnlineJudge平台
HDUZN

Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++、Python)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。

以前是知道各个大学都有自己的OJ系统用来训练ACM的。

青岛大学的这个开源Online Judge系统是比较新的,界面感觉也不错,还是开源的,还可以用Docker直接搭建,就很方便了。

Online Judge平台搭建

青岛大学的OJ项目地址:https://github.com/QingdaoU/OnlineJudge/blob/master/README-CN.md

上面有OJ平台搭建的项目地址:https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0

我是在一台装了Ubuntu 20.04 LTS的机器上装的。

1.下载

1
git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git && cd OnlineJudgeDeploy

执行完上面的命令后,会进入OnlineJudgeDeploy目录。

不能用git下载的话,直接把上面OJ平台项目的Code包一起下载下来。然后解压到OnlineJudgeDeploy目录后,再cd进入目录,一样的。

2.启动服务

1).docker-compose安装

用的是docker-compose安装一键部署。

所以,需要提前安装Docker(Ubuntu安装Docker)和docker-compose。

如果装了Docker,没有安装docker-compose的话,有python、pip的话就很简单了,直接用pip命令安装就行了:

1
pip install docker-compose

2).docker-compse.yml 配置文件

因为服务会有个地址,涉及到端口号会不会冲突。所以,可以先看下OnlineJudgeDeploy目录下的docker-compse.yml配置文件,上面项目地址中也可以查看这个文件。

文件中可以看到是开了好几个服务的:

  • oj-redis
  • oj-postgres:数据库,可以看到设置的数据库DB名,用户USER名和密码PASSWORD
  • judge-server:服务器
  • oj-backend:最后看到这个是依赖以上的服务的。重点就是最下面这个端口号了:
    1
    2
    3
    4
    ...
    ports:
    - "0.0.0.0:80:8000"
    - "0.0.0.0:443:1443"
    前面的默认的映射到本机是80端口(HTTP)和443端口(HTTPS)。
    这个只要不冲突,就随便你自己改了。

比如一般不想冲突的话,我改成如下的:

1
2
3
4
...
ports:
- "0.0.0.0:8080:8000"
- "0.0.0.0:8443:1443"

3).docker-compose启动服务

用vi命令修改好配置文件后,用以下命令一键部署启动就行:

1
docker-compose up -d

根据网速情况,大约2到30分钟都有可能,正常的话,感觉一般几分钟就好了。

常用的docker-compose还有以下几个:

1
2
3
4
5
6
docker-compose help # 查看帮助
docker-compose up # 创建并启动容器
docker-compose ps # 列出容器
docker-compose stop # 停止服务
docker-compose start # 启动服务
docker-compose down # 停止并删除资源

4).服务成功启动

还是在OnlineJudgeDeploy目录下,用docker-compose ps命令查看结果:

1
2
3
4
5
6
7
8
ubuntu@VM-8-10-ubuntu:~/onlinejudge/OnlineJudgeDeploy$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
judge-server /bin/sh -c /code/entrypoint.sh Up (healthy) 8080/tcp
oj-backend /bin/sh -c /app/deploy/ent ... Up (healthy) 0.0.0.0:8443->1443/tcp, 0.0.0.0:8080->8000/tcp
oj-postgres docker-entrypoint.sh postgres Up 5432/tcp
oj-redis docker-entrypoint.sh redis ... Up 6379/tcp
ubuntu@VM-8-10-ubuntu:~/onlinejudge/OnlineJudgeDeploy$

docker ps -a命令也是可以查看到这些所有容器的(judge-server、oj-backend、oj-postgres和oj-redis)

前端登录地址:http://ip:8080 (8080是对应8000端口映射到本机的地址)
后台管理地址:http://ip:8080/admin
默认超级管理员用户名为root,密码为rootroot

关于数据备份与恢复看这篇:QingdaoU OnlineJudge 数据备份与恢复

  • 本文标题:Docker搭建QingdaoU OnlineJudge平台
  • 本文作者:HDUZN
  • 创建时间:2022-12-16 20:15:09
  • 本文链接:http://hduzn.cn/2022/12/16/Docker搭建QingdaoU-OnlineJudge平台/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论