欢迎各位访问我的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
-
搭建HUST OJ
-
搭建Hydro
-
搭建QDUOJ
Part 2.2 搭建HUST OJ
其实官网内容已经很详细了 https://github.com/zhblue/hustoj/
我来说几个必踩的坑:
1.更换主题模板
修改 db_info.inc.php[默认位置/home/judge/src/web/include]
中 $OJ_TEMPLATE
的值 就行
默认是 syzoj 改成如下的值就可以使用其他主题!
syzoj主题 added by@renbaoshuo
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
然后选择一个合适的目录 执行 空间一定大于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过后就大功告成了!!
现在就可以开始使用了。HTTP80端口或者HTTPS443端口。
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
这个困扰了我好久,最后看来官方文档加上我的多次尝试才成功
样例Canddy File
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 } }