想给编程课设或竞赛训练搭一套能真正「提交—评测—出结果」的在线判题站,又不想从零拼沙盒?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. 登录页

2. 题目列表

3. 题面详情

4. 在线 IDE 提交

5. 评测结果(AC)

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

7. 竞赛 / 练习相关页

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

9. 代码游戏或代码画画

实测踩坑(本地 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 积分。














暂无评论内容