DOMjudge部署(纯新手向)

  简单记录一下这次部署DOMjudge的过程,以防止自己忘记了部署步骤。

  这次是在学校服务器上部署的DOMjudge,因为我不太会使用Linux系统,在部署过程中遇到了很多问题。最后采用docker-compose终于是成功将DOMjudge给部署成功了。

  首先,学校服务器的系统版本如下:

  服务器是CentOS的之前部署失败的经历就不再赘述了,只记录用docker-compose部署成功的过程,为了给新手带来更好的部署体验,本文将尽可能详细地描述部署细节。

  注意:DOMjudge评测系统暂不支持 Windows 操作系统,请在 Linux 操作系统上部署,我的系统版本是Centos 7.9,若你的是 ubuntu,则将指令中的 yum 换成 apt 即可。若你的系统未安装 vim ,请先安装 vim

  编辑 文件 (需要 权限)

  在 项目后面添加以下内容(若没有该项可以自己添加):

  修改后重新加载一下 配置文件(没有该指令就跳过):

  重启系统:

  等系统重启完成后就行了。

  安装这两个软件请自行去官网部署文档安装,这里不再赘述。请 务必 参照 docker 官方部署文档安装 docker 和 docker-compose

  docker 链接docker-compose 链接接下来,我们在 目录下设置 docker-compose 项目,使得之后在此文件夹里的 docker-compose 项目都可以通过系统服务来进行管理

  接下来设置一下系统服务,我们创建 文件

  并用 vim 给该文件中添加以下内容:(同样要注意需要 权限)

  如果你是没用过 vim 的新手,你需要知道的是,vim 需要按 才会切换成编辑模式

  按 + + + 保存后,接下来我们需要重新载入系统服务配置文件

  到这一步,我们的准备工作完成了。

  分别是:

  用 vim 编辑器分别给上面的文件填入如下内容:

  首先自己设置一个数据库密码,替换掉 文件中的 <YOUR PASSWORD> 内容;

  然后只运行数据库和后端系统,得以获得判题机 judgehost 的

  输入如下指令获取 judgehost 的

  将获取到的 替换 文件中的 <GET THIS FROM TERMINAL> 内容

  这里注意一下,倘若你发现数据库无法初始化成功,应该是由于 mariadb 版本导致的,可以把 修改成之前的某个版本,是最新版本的意思,例如我就是修改成了 10.7,那么就在 文件中将 修改成 。同理,domserver 和 judgehost 的版本也可以指定,例如 8.2.0,并尽可能规定它们为同一个版本,否则可能会出现未知 Bug 。

  文件默认创建两个判题机,请根据你的实际情况设置判题机的个数,最好 别超过 CPU 的核心数量

  修改 中 judgehost 服务中的 值,即可指定判题机个数

  然后运行指令启动所有服务

  过几秒后,我们打开docker列表,发现镜像都成功启动了(我是创建了四个判题机)

  此时打开浏览器输入部署机器的 IP 地址即可访问 DOMjudge

  管理员账号:admin

  密码需要通过如下命令获取

  在你确定了 DOMjudge 可以正常使用后,我们创建系统服务以设置开机启动

  至此, DOMjudge系统已经部署成功。

  若你想了解更多信息,可以访问下面的网站:

  DOMjudge 官网DOMjudge的docker版

  主要需要实现三个功能:

  配置题目数据(包括spj、交互)外部导入队伍和登录账号配置比赛信息首先,我们填入基本的题目信息,在 里面把题目下载到本地,此时题目是一个压缩包,解压后,让目录结构变成这样子:

  若有 的话,如下:

  有 的 也需要更改(添加了 一行):

  你不使用 的话就不需要这一行,也不需要 文件夹。

  随后,在里放入(自己所编写的)即可。

  所使用的 库文件,你可以参考以下链接:

  cn-xcpc-tools/testlib-for-domjudge: testlib for domjudge打包好一切后,上传即可,DOMjudge会自动解析并生成题目。

  DOMjudge 与其他的 OJ 系统略有不同,每个 需要有 才能参加比赛,而实际上在我学校举办的比赛里大部分比赛都是单人赛,因此每个队伍里只有一个人。

  虽然可以一个一个导入用户信息,不过在举办一些比赛时,一般都是几十到一百人,这时候挨个挨个录入用户未免过于低效。我们可以准备 和 两个文件来批量导入以生成用户和队伍。

  注意到 文件是以 键作为分隔符的,所以你可以事先在 Excel 里把信息输入好,再将信息复制到 vscode 或者记事本里,这样就可以做到相邻数据间有 分隔。

  对于 文件而言,格式如下:例如:

  各个参数的含义在官方文档里是这样定义的:

  对于 文件而言,格式如下:例如:

  各个参数的含义在官方文档里是这样定义的:

  由此就完成了两个文件的配置。然后先导入 ,再导入 即可。

  配置比赛也能通过 文件,不过比较麻烦,这里建议直接打开后台照着操作就是了。

  不过要注意一点,建议对 程序的评测开到 512M 以上, 经常会因为内存过大而导致 。

  关于配置比赛的更多详细的介绍,你可以参阅这篇博客:

  Domjudge配置指南 & 校赛踩坑记录 - 知乎或者去官方文档了解详情,官方文档啥都有。

  日后更新...