项目源码|GlowXQ OJ 在线判题系统|Spring Boot 3 + Vue 3 · Docker

项目源码|GlowXQ OJ 在线判题系统|Spring Boot 3 + Vue 3 · Docker-远影归灯
项目源码|GlowXQ OJ 在线判题系统|Spring Boot 3 + Vue 3 · Docker
此内容为付费资源,请付费后查看
80积分
付费资源

想给编程课设或竞赛训练搭一套能真正「提交—评测—出结果」的在线判题站,又不想从零拼沙盒?GlowXQ OJ 把多语言评测、题库练习、竞赛、管理端,以及「代码游戏 / 代码画画」趣味模块收进一套前后端分离工程,并提供 Docker Compose 与 All-in-One 两种一键部署。本机只要 Docker,不必先装 JDK / Maven / Node,就能起完整栈做答辩演示。

本文给出界面截图与可下载源码压缩包。协议为 Apache-2.0,压缩包内保留 LICENSE;二次分发请继续保留许可与版权声明。定位是课设 / 竞赛训练底座,公网暴露前务必改默认口令与 JWT。

能做什么

  • 多语言在线评测:C++ / Java / Python / Rust / JavaScript;基于 go-judge 沙盒,支持 amd64 / arm64
  • 多题型:编程题、单选 / 多选 / 判断 / 填空 / 简答,兼顾练习与考核
  • 练习与竞赛:题目列表、题面、在线 IDE 提交与评测结果(AC / WA 等)
  • 管理端:用户、题目、竞赛等后台能力(按角色入口)
  • 代码游戏:关卡式写代码控制角色移动、战斗、收集
  • 代码画画:画笔绘图,以及数组 / 网格 / 树 / 链表等结构可视化
  • 一键部署:Compose 多容器,或 All-in-One 单容器全家桶

技术栈

  • 后端:Java 21、Spring Boot 3.4、MyBatis 系 ORM、Redis、MySQL 8、MinIO
  • 前端:Vue 3.5、TypeScript、Element Plus、Vite、CodeMirror 6
  • 判题:go-judge 安全沙盒(容器内执行用户代码)
  • 部署:Docker ≥20 + Compose V2;本地开发才需要 JDK 21 / pnpm

标签建议:Spring Boot 3 Java 21 Vue 3 TypeScript Element Plus MySQL Redis MinIO Docker OJ 课设

Docker 部署步骤

环境: 仅需 Docker 与 Compose V2。内存建议 ≥4GB;构建阶段可按机器下调 JAVA_OPTS。

方案 A:Docker Compose(推荐本地体验)

# 克隆后进入目录(国内可用镜像站)
chmod +x deploy.sh
./deploy.sh

脚本会检查环境、从 .env.example 生成 .env(并处理 JWT)、多阶段构建前后端并拉起 MySQL / Redis / MinIO / API / 前端。

部署完成后默认大致为:

服务 地址
前端 http://localhost
后端 API http://localhost:7101
API 文档 http://localhost:7101/doc.html
MinIO 控制台 http://localhost:9001

常用命令:./deploy.sh status / logs / stop / update;开发只起基础设施可用 ./deploy.sh dev。

方案 B:All-in-One 单容器

chmod +x deploy-allinone.sh
./deploy-allinone.sh

全家桶打进一个容器,通常只暴露 80。注意 README 示例可能包含 --privileged(沙盒需要);不要在不信任的环境随意开 privileged,也不要在裸机直接跑评测器去执行陌生代码。

配置务必改掉的项

复制生成的 .env(或 .env.allinone)后至少检查:

  • MySQL / Redis 默认口令(示例里常见占位,部署前改成自己的)
  • JWT_SECRET_KEY(脚本可能自动生成;生产务必确认不是占位串)
  • 生产设置 SITE_URL 为实际域名,否则文件 URL 可能不对
  • MinIO 访问密钥同理不要用文档里的示例值上公网

初始化账号以项目 README / 库内种子为准;演示站文档里会写管理员 / 学生 / 老师入口。正文与截图里对手机号样式账号、默认密码做脱敏处理,你本地登录后请立刻改密。

界面截图

说明:本机 Docker 全栈首编耗内存与时间较大时,界面截取自官方演示站;源码包仍为完整可部署仓库(已去掉 node_modules / target / dist / .git 等)。截图中账号类信息已打码。

1. 登录页

01-login.png

2. 题目列表

02-problem-list.png

3. 题面详情

03-problem-detail.png

4. 在线 IDE 提交

04-ide-submit.png

5. 评测结果(AC)

05-judge-ac.png

6. 评测结果(WA,如有)

06-judge-wa.png

7. 竞赛 / 练习相关页

07-contest.png

8. 管理端(用户或题目管理)

08-admin.png

9. 代码游戏或代码画画

09-code-fun.png

实测踩坑(本地 Docker 跑通记录)

  • 手写测试点评测报「test case has not found」:测试点写在 /goj/testcase,评测却去 /judge/testcase 读。进 api 容器执行 ln -s /goj/testcase /judge/testcase 即可(重建容器后需重做)。
  • 正确答案被判 PE:题目默认不忽略行末空白,建题时把「去除末尾空白」打开。
  • 前端镜像构建报 ERR_PNPM_IGNORED_BUILDS:Dockerfile 里把 pnpm 固定到 9 版本。
  • MinIO 官方镜像拉不到:换成可用的 MinIO 镜像源即可,不影响评测。
  • 内存紧张:.env 里把 JAVA_OPTS 调到 -Xms128m -Xmx384m 左右,5GB 内存的机器能跑全栈。
  • 用接口建题时记得带租户请求头,否则会报租户字段为空。

部署与安全提醒

  • 判题沙盒会执行用户提交的代码:务必容器隔离;禁止在宿主机裸跑评测去执行不可信代码。
  • All-in-One / 沙盒路径若要求 privileged,仅在你清楚风险的机器上使用,公网前收紧权限与网络暴露面。
  • 默认数据库口令、JWT、MinIO 密钥、演示账号密码都是教学示例,上线前全部更换。
  • 题库与附件若自行导入第三方题面,请自行确认授权;本压缩包以可部署源码与初始化结构为主,不附带额外商业题包。
  • 首次构建偏久(多阶段编译);小内存机器优先 Compose,并下调 JVM,或先在演示环境熟悉界面再本机构建。
  • 协议 Apache-2.0:保留 LICENSE 与版权声明;勿把他人付费文档 / 视频一并打包分发。

小结

GlowXQ OJ 把「多语言 OJ + 竞赛练习 + 趣味编程模块 + Docker 一键起」收成一条可答辩演示的链路:改配置、起容器、登录验收菜单与提交评测即可。适合 Java 21 / Vue 3 课设底座,或作为竞赛训练站的起点;真正对外服务前,请把口令、JWT、沙盒与暴露端口按上面清单收紧。

源码压缩包可在本文下载,需 80 积分。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容