欢迎光临散文网 会员登陆 & 注册

如何搭建一个属于自己的OJ系统

2023-07-15 18:46 作者:Windows_Linux_  | 我要投稿

在我的博客中阅读更佳!在哔哩哔哩上代码不会高亮!

https://blog.mxdyeah.top/?id=6

欢迎各位访问我的OJ:mxd's Online Judge (使用HUST OJ搭建)

正文:

Part 1 选择一个适合自己的OJ

目前,在网络上有很多的OJ系统可以让我们一键部署,特别方便

比如以下OJ都支持一键部署:

HUST OJ https://github.com/zhblue/hustoj/

Hydro https://docs.hydro.ac/

QDUOJ https://opensource.qduoj.com/#/

还有很多,我就不一一列出来了

Part 2.1 搭建OJ

  1. 搭建HUST OJ

  2. 搭建Hydro

  3. 搭建QDUOJ



Part 2.2 搭建HUST OJ

其实官网内容已经很详细了   https://github.com/zhblue/hustoj/

我来说几个必踩的坑:

1.更换主题模板

修改 db_info.inc.php[默认位置/home/judge/src/web/include] 中 $OJ_TEMPLATE 的值 就行

默认是 syzoj 改成如下的值就可以使用其他主题!

bs3原版

sweet主题

syzoj主题 added by@renbaoshuo

bshark主题 added by @yemaster

mdui主题 added by@renbaoshuo


2.SSL配置

如果你像我一样用的是宝塔面板,只需要按照其他网站一样部署就行了。特别简单

    

如果你没有使用宝塔面板的,使用的是apache或nginx就要申请证书并且到apache/nginx当中正确配置。

3.背景图片

hust oj 默认是从Bing每日一图同步,可以在配置文件db_info.inc.php[默认位置/home/judge/src/web/include] 中 $OJ_BG 的值

比如我的就是这样的:


其实db_info.inc.php这里面的注释都写的非常详细的,各位可以自己研究一下

4.时间不同步(难点)

这个可是重头戏,困扰了我好久,就是代码提交的时间跟当前时间对不上,官方文档里面也没有但是最后还是被我解决了

具体状态表现如下:电脑当前时间14:36,在此时提交代码 提交时间会晚8小时。 其实一眼就可以看出来是时区的问题

该怎么解决呢?(在ROOT身份下运行)

timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 1

搞定!然后reboot

sudo reboot

重启后还是不行?运行一下timedatectl   

看看是不是像我这样



再重启试试!

Part 2.3 搭建 QDUOJ

前提:我是在Ubuntu 22.04 纯净系统 上完成的

我的系统上没有部署过任何东西!!

CentOS我没有测试过,你可以自己把apt换成yum。

CentOS已经很老了,建议换系统!!!!

安装过docker的,请先完全卸载再操作!!以防万一!!!

完全卸载docker:

https://blog.csdn.net/qq_45495857/article/details/113743109

更新一下软件源

sudo apt-get update

什么?太慢?换个软件源就是了!  https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

清华大学换源链接,自己更改发行版!

然后:

sudo apt-get install -y vim python3-pip curl git

更新pip


pip3 install --upgrade pip
# 或者下面的 看情况
pip install --upgrade pip

然后通过pip 安装docker-compose

pip install docker-compose

下载docker

国内使用脚本一键安装:sudo curl -sSL https://get.daocloud.io/docker | sh

国外使用脚本一键安装:sudo curl -sSL get.docker.com | sh

然后选择一个合适的目录  执行  空间一定大于5GiB!!

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

建议更改配置文件(如果没有特殊要求别操作!!!)

vim docker-compose.yml

最后,docker-compose一下!(时间超级久 10-30min左右)

docker-compose up -d

当你看见几个绿油油的DONE过后就大功告成了!!


顺带说下,请确保80、3306、6379这几个端口不要被占用

当服务启动完成后,执行下面命令查看容器运行状态,如果没有unhealthy 或 Exited (x) xxx 就代表 OJ 已经启动成功。

现在就可以开始使用了。HTTP80端口或者HTTPS443端口。

云服务器的用户记得放行对应端口

后台管理路径为/admin,自动添加的超级管理员用户名为 root,密码为 rootroot, 请务必及时修改密码

//这几句转载自https://blog.csdn.net/qq_43058685/article/details/108871714 感谢!

自此,大功告成!各位可自行探索!

QDUOJ SSL 配置

HTTPS 相关问题

OnlineJudge 强烈推荐使用 HTTPS 协议

  • 数据传输加密,提高安全性,防劫持

  • 可以使用 HTTP2,加快访问速度(默认配置)

OnlineJudge 的部署脚本默认情况下会生成一个自签名证书,浏览器会提示不信任,可以自己去申请对应域名的可信证书,OnlineJudge 也提供了下面两个特性方便 HTTPS 证书的申请和使用。

申请 HTTPS 证书

/.well-known 的 url 前缀,会自动使用 data/backend/ssl/.well-known 目录下面的文件,默认情况下 data/backend/ssl/ 已经存在,所以可以手动的创建 .well-known 及其子文件夹,比如需要 url 为 /.well-known/pki-validation/fileauth.txt 的验证文件,就可以创建 data/backend/ssl/.well-known/pki-validation/fileauth.txt 文件,内容为指定的内容。

然后替换 data/backend/ssl/ 下面的证书和私钥文件,之后 docker exec -it oj-backend sh -c "cd /app/deploy; supervisorctl restart nginx"

FORCE_HTTPS

如果 HTTPS 配置成功,为了增强安全性,推荐重定向 HTTP 流量到 HTTPS 流量,这时候可以取消注释 docker-compose.yml 文件中的 FORCE_HTTPS=1 这一行,然后 docker-compose up -d 重启即可。



Part 2.4 搭建Hydro OJ

搭建Hydro OJ, 官网说的也比较详细   https://docs.hydro.ac/docs/install/

我也是说说必踩的坑:

1.SSL

这个困扰了我好久,最后看来官方文档加上我的多次尝试才成功


hydro.ac {
  log {
    output file /data/access.log {
      roll_size 1gb
      roll_keep_for 72h
    }
    format json
  }
  root * /root/.hydro/static
  @static {
    file {
      try_files {path}
    }
  }
  handle @static {
    file_server
  }
  handle {
    reverse_proxy http://127.0.0.1:8888
  }
}

我在此不多赘述,有疑问请留言!


如何搭建一个属于自己的OJ系统的评论 (共 条)

分享到微博请遵守国家法律