hoj/README.md

219 lines
12 KiB
Markdown
Raw Normal View History

2021-06-12 17:10:56 +08:00
# Hcode Online JudgeHOJ
[![Java](https://img.shields.io/badge/Java-1.8-informational)](http://openjdk.java.net/)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.2.6.RELEASE-success)](https://spring.io/projects/spring-boot)
[![SpringCloud Alibaba](https://img.shields.io/badge/Spring%20Cloud%20Alibaba-2.2.1.RELEASE-success)](https://spring.io/projects/spring-cloud-alibaba)
[![MySQL](https://img.shields.io/badge/MySQL-8.0.19-blue)](https://www.mysql.com/)
[![Redis](https://img.shields.io/badge/Redis-5.0.9-red)](https://redis.io/)
2021-06-26 00:39:45 +08:00
[![Nacos](https://img.shields.io/badge/Nacos-1.4.2-%23267DF7)](https://github.com/alibaba/nacos)
2021-06-12 17:10:56 +08:00
[![Vue](https://img.shields.io/badge/Vue-2.6.11-success)](https://cn.vuejs.org/)
[![QQ Group 598587305](https://img.shields.io/badge/QQ%20Group-598587305-blue)](https://qm.qq.com/cgi-bin/qm/qr?k=WWGBZ5gfDiBZOcpNvM8xnZTfUq7BT4Rs&jump_from=webapi)
2021-09-10 21:23:46 +08:00
## 一、前言
2021-06-12 17:10:56 +08:00
基于前后端分离分布式架构的在线测评平台hoj前端使用vue后端主要使用springbootredismysqlnacos等技术**支持HDU、POJ、Codeforces包括GYM的vjudge判题同时适配手机端、电脑端浏览拥有讨论区与站内消息系统支持私有训练、公开训练题单还有完善的判题模式普通测评、特殊测评、交互测评和完善的比赛功能打星队伍、关注队伍、外榜。**
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
| 在线Demo | 在线文档 | Github&Gitee仓库地址 | QQ群 |
| :--------------------------------: | :-------------------------------------------------------: | :----------------------------------------------------------: | :-------: |
| [https://hdoi.cn](https://hdoi.cn) | [https://www.hcode.top/docs](https://www.hcode.top/docs/) | [https://github.com/HimitZH/HOJ](https://github.com/HimitZH/HOJ) [https://gitee.com/himitzh0730/hoj](https://gitee.com/himitzh0730/hoj) | 598587305 |
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
**注意:**
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
1. **建议使用Centos8以上或Ubuntu16.04以上的操作系统不然判题机judgeserver可能无法正常启动。**
2021-10-09 21:46:41 +08:00
2. **服务器配置尽可能使用2核4G以上保证服务的正常启动与运行。**
2021-11-07 11:00:33 +08:00
3. **尽量不要使用突发性能或共享型的云服务器实例,有可能造成评测时间计量不准确。**
4. **有任何部署问题或项目bug请发issue或者加QQ群。**
5. **如果要对本项目进行商业化请在页面底部的Powered by指向HOJ本仓库地址顺便点上star收藏本项目对开发者的支持谢谢。**
2021-09-10 21:23:46 +08:00
## 二、部署
2021-06-12 17:10:56 +08:00
2022-01-17 20:09:51 +08:00
部署文档:[基于docker-compose部署](https://www.hcode.top/docs/deploy/docker)
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
具体请看部署文档已安装docker和docker-compose的可以执行以下命令快速部署
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
**注意:**
2021-06-12 17:10:56 +08:00
2021-12-22 13:12:42 +08:00
**1. 正式部署请自行修改配置不要使用默认配置的密码例如mysql、redis、nacos的密码**
2021-09-10 21:23:46 +08:00
**2. 如果已经为了测试而使用默认配置启动来部署,建议删掉当前文件夹,重新执行以下部署流程,修改默认配置**
2021-06-12 17:10:56 +08:00
```shell
2021-09-10 21:23:46 +08:00
git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy && cd standAlone
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
vim .env # 建议执行这一步,对默认配置进行修改。
docker-compose up -d
2021-06-12 17:10:56 +08:00
```
根据网速情况,大约十到二十分钟即可安装完毕,全程无需人工干预。
```shell
docker ps # 查看当前运行的容器状态
```
1. 大概初始化启动需要一至两分钟当看到所有的容器的状态status都为`UP`和`healthy`就代表 OJ 已经启动成功。
**注意可能初始化过程中访问网页会出现服务器异常此为正常现象因为容器还在初始化中请耐心等待容器状态为up和healthy大概需要1~2分钟**
2. 默认超级管理员账号与密码:**root / hoj123456**
**部署成功后登录root账号进入后台`http://ip/admin/conf`修改邮箱配置新用户才可以正常注册因为账号注册与密码等修改操作需要通过邮件发送验证码邮箱配置可以自行百度开启使用例如QQ邮箱提供的POP3/SMTP服务**
```
Host: smtp.qq.com
Port: 465
Username: qq邮箱账号
Password: 开启SMTP服务后生成的随机授权码
```
2021-09-10 21:23:46 +08:00
## 三、更新
2021-06-12 17:10:56 +08:00
请在docker-compose.yml当前文件夹下执行`docker-compose pull`拉取最新镜像,然后重新`docker-compose up -d`即可。
2021-09-10 21:23:46 +08:00
## 四、上线日记
2021-06-12 17:10:56 +08:00
| 时间 | 内容 | 更新者 |
| ---------- | ------------------------------------------------------------ | -------- |
| 2020-10-26 | 正式开发 | Himit_ZH |
| 2021-04-10 | 首次上线测试 | Himit_ZH |
| 2021-04-15 | 判题调度2.0解决并发问题 | Himit_ZH |
| 2021-04-16 | 重构解耦JudgeServer判题逻辑添加部署文档 | Himit_ZH |
| 2021-04-19 | 加入rsync实现评测数据同步修复一些已知的BUG | Himit_ZH |
| 2021-04-24 | 加入题目模板,修改页面页脚 | Himit_ZH |
| 2021-05-02 | 修复比赛后管理员重判题目导致排行榜失效的问题 | Himit_ZH |
| 2021-05-09 | 添加公共讨论区,题目讨论区,比赛评论 | Himit_ZH |
| 2021-05-12 | 添加评论及回复删除,讨论举报,调整显示时间。 | Himit_ZH |
| 2021-05-16 | 完善权限控制,讨论管理员管理,讨论删除与编辑更新。 | Himit_ZH |
| 2021-05-22 | 更新docker-compose一键部署修正部分bug | Himit_ZH |
| 2021-05-24 | 判题调度乐观锁改为悲观锁 | Himit_ZH |
| 2021-05-28 | 增加导入导出题目,增加用户页面的最近登录,开发正式结束,进入维护摸鱼 | Himit_ZH |
| 2021-06-02 | 大更新完善补充前端页面修正判题等待超时时间修补一系列bug | Himit_ZH |
| 2021-06-07 | 修正特殊判题增加前台i18n | Himit_ZH |
| 2021-06-08 | 添加后台i18n,路由懒加载 | Himit_ZH |
| 2021-06-12 | 完善比赛赛制,具体请看在线文档 | Himit_ZH |
| 2021-06-14 | 完善后台管理员权限控制恢复CF的vjudge判题 | Himit_ZH |
| 2021-06-25 | 丰富前端操作增加POJ的vjudge判题 | Himit_ZH |
2021-08-14 21:24:42 +08:00
| 2021-08-14 | 增加spj对使用testlib的支持 | Himit_ZH |
2021-09-21 18:13:07 +08:00
| 2021-09-21 | 增加比赛打印功能、账号限制功能 | Himit_ZH |
| 2021-10-05 | 增加站内消息系统——评论、回复、点赞、系统通知的消息,优化前端。 | Himit_ZH |
| 2021-10-06 | 美化比赛排行榜增加对FPS题目导入的支持 | Himit_ZH |
2021-12-10 19:41:50 +08:00
| 2021-12-09 | 美化比赛排行榜,增加外榜、打星队伍、关注队伍的支持 | Himit_ZH |
2022-01-01 22:19:00 +08:00
| 2022-01-01 | 增加公开训练和公开训练(题单) | Himit_ZH |
| 2022-01-04 | 增加交互判题、重构judgeserver的三种判题模式普通、特殊、交互 | Himit_ZH |
2021-06-12 17:10:56 +08:00
2021-09-10 21:23:46 +08:00
## 五、部分截图
2021-06-12 17:10:56 +08:00
**以下截图页面均支持中英文国际化,点击底部的转换即可全网站转换,包括后台管理,同时浏览器会记住本次选择的语言**
> 首页页面
![首页](https://img-blog.csdnimg.cn/20210609212151977.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)
> 首页英文
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210609213403198.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)
2021-10-09 21:46:41 +08:00
> 站内消息系统
![站内消息系统](https://img-blog.csdnimg.cn/a1a83ff01be84406954537e2ab78d999.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
![站内消息系统](https://img-blog.csdnimg.cn/513e7e37f52f48518c2fa1bf14eeea99.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 题目列表页
2021-10-09 21:46:41 +08:00
![题目列表页](https://img-blog.csdnimg.cn/de80b1573ea04195a45b65e0dc55a308.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 题目详情页
2021-10-09 21:46:41 +08:00
![题目详情页](https://img-blog.csdnimg.cn/655a9886cf7d4683812c923b9ce2aa2e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 比赛列表页
![比赛列表页](https://img-blog.csdnimg.cn/2021060921255349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)
2021-10-09 21:46:41 +08:00
**比赛以西南科技大学某届新生赛截图为例**
2021-06-12 17:10:56 +08:00
> 比赛详情首页
2021-10-09 21:46:41 +08:00
![比赛详情页](https://img-blog.csdnimg.cn/50026bde6dd64cd5929b38f8ecc6e72e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
> 比赛题目列表页
![比赛题目列表](https://img-blog.csdnimg.cn/8646fc212b5c47e9b35e60634cfc8d6a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 比赛排行榜
2021-12-12 19:51:55 +08:00
- ACM比赛
![比赛排行榜](https://img-blog.csdnimg.cn/c50140e3b73d482d82ca6f13f47aa080.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
- OI比赛
![oi排行榜](https://img-blog.csdnimg.cn/67f6262854bb44efa70c374f1f156166.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2021-06-12 17:10:56 +08:00
> 提交列表页
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210609213021223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)
> 排行榜
2021-10-09 21:46:41 +08:00
![排行榜](https://img-blog.csdnimg.cn/407ad16361f34b44a282b07af68825e0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 公共讨论区
![公共讨论区](https://img-blog.csdnimg.cn/20210513134216723.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)
> 评论组件
![评论组件](https://img-blog.csdnimg.cn/20210513142826730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center)
2021-10-09 21:46:41 +08:00
> 个人首页
2021-06-12 17:10:56 +08:00
2021-10-09 21:46:41 +08:00
![个人首页](https://img-blog.csdnimg.cn/3f9111cc0767466991ae3d99602b5865.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 个人设置页
2021-10-09 21:46:41 +08:00
![个人设置](https://img-blog.csdnimg.cn/971566eeac674d388b9f5d6064286e14.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 管理后台首页
2021-10-09 21:46:41 +08:00
![管理后端](https://img-blog.csdnimg.cn/9b9674c0f30a441bb200a32756f24d2c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
> 部分手机端显示
2021-10-09 21:46:41 +08:00
![手机端](https://img-blog.csdnimg.cn/c7b3648217af4899bedf7f7d804968ba.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_12,color_FFFFFF,t_70,g_se,x_16)
2021-06-12 17:10:56 +08:00
![评论区](https://img-blog.csdnimg.cn/20210509233845230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70)