Genuine-OJ 是一个现代化的在线评测系统(Online Judge, OJ)
Genuine-OJ 是一个现代化的在线评测系统(Online Judge, OJ),特别适用于信息学竞赛(OI)培训和编程练习。该项目由青岛中学与北京十一学校的大佬们共同开发,旨在提供一个功能强大、界面友好的在线编程评测平台。Genuine-OJ 的架构设计和实现都体现了现代 Web 开发的最佳实践,包括前后端分离、Docker 化部署等。下面详细介绍 Genuine-OJ 的主要特点和组成部分。
主要特点
-
前后端分离:
- 前端: 使用 Vue.js 构建,提供了响应式的用户界面,用户体验良好。
- 后端: 使用 Python(Django)构建,提供了强大的业务逻辑处理能力和高效的数据管理。
-
Docker 化部署:
- 提供了完整的 Dockerfile 和 Docker Compose 文件,支持一键部署,大大简化了安装和配置过程。
-
安全性:
- 使用 Seccomp 和其他安全机制,确保用户提交的代码在安全的沙箱环境中执行,防止恶意代码对系统造成损害。
-
丰富的功能:
- 题库管理: 管理员可以轻松添加、编辑和删除题目,支持多种格式的题目描述和测试数据。
- 用户管理: 支持用户注册、登录、权限管理等功能。
- 比赛管理: 支持创建和管理编程比赛,可以设置比赛时间和规则。
- 评测结果: 提供详细的评测报告,包括运行时间和内存使用情况。
-
扩展性强:
- 支持多种编程语言,包括但不限于 C、C++、Java、Python 等。
- 提供了插件机制,方便开发者扩展系统功能。
项目组成
-
后端 (Django):
- 项目地址: genuine-oj/backend - GitHub
- 功能: 处理业务逻辑,提供 RESTful API 接口供前端调用,管理数据库等。
-
前端 (Vue.js):
- 项目地址: genuine-oj/frontend-naive - GitHub
- 功能: 提供用户界面,包括用户登录、题库浏览、代码提交、评测结果查看等。
-
判题沙箱 (Seccomp):
- 项目地址: genuine-oj/judger - GitHub
- 功能: 安全地执行用户提交的代码,防止恶意代码对系统造成损害。
-
判题服务器:
- 项目地址: genuine-oj/judge-server - GitHub
- 功能: 封装判题沙箱,提供更高级别的接口,方便后端调用。
-
Docker 化部署:
- 项目地址: genuine-oj/deploy - GitHub
- 功能: 提供 Dockerfile 和 Docker Compose 文件,支持一键部署。
部署步骤
-
克隆仓库:
bash深色版本
git clone https://github.com/genuine-oj/deploy.git cd deploy
-
修改配置文件:
- 修改
docker-compose.yml
文件中的配置,如数据库连接信息、端口映射等。 - 修改
.env
文件中的环境变量,如数据库用户名、密码等。
- 修改
-
启动 Docker 容器:
bash深色版本
docker-compose up -d
-
访问系统:
- 打开浏览器,访问
http://localhost
,即可看到 Genuine-OJ 的登录页面。
- 打开浏览器,访问
常见问题
-
前端修改后不生效:
- 确保前端代码已经正确编译和打包。可以尝试重新构建前端项目: bash
深色版本
cd frontend-naive npm install npm run build
- 确保前端代码已经正确编译和打包。可以尝试重新构建前端项目: bash
-
数据库连接问题:
- 检查
docker-compose.yml
和.env
文件中的数据库配置是否正确。 - 确保数据库容器已经成功启动并运行。
- 检查
-
判题超时或失败:
- 检查判题沙箱和判题服务器的日志,查看是否有错误信息。
- 确保判题服务器的资源(CPU、内存)充足。
社区和支持
- GitHub Issues: 如果您在使用过程中遇到任何问题,可以在 Genuine-OJ 的 GitHub 仓库 中提交 Issue,项目维护者和社区成员会尽力帮助您解决问题。
- 文档: 项目提供了详细的文档,包括安装指南、使用手册和开发指南,帮助用户快速上手。
总结
Genuine-OJ 是一个功能强大、易于部署和维护的在线评测系统,特别适合学校和培训机构用于编程教学和竞赛。通过其现代化的架构设计和丰富的功能,Genuine-OJ 为用户提供了一个高效、安全的编程练习和评测平台。希望这些信息能帮助您更好地了解和使用 Genuine-OJ。
2