UltiCode:一条命令跑起来的开源全栈 OJ
UltiCode 是一个全栈开源在线评测(Online Judge)平台。Spring Boot 3 + Vue 3 + MySQL 9 + Redis 7 + Nacos,从题目到竞赛、从论坛到管理后台,一条
./scripts/dev/up.sh跑起来。👉 仓库地址:github.com/DavidHLP/UltiCode
🎯 为什么做 UltiCode?
过去几年,身边的算法社区、培训班、企业内训部门在搭建刷题系统时,几乎只有两条路:
- 用现成的 SaaS(LeetCode / Codeforces / 牛客) — 功能强,但数据不归你管,定制能力薄弱,品牌和功能都被绑定;
- 从零自研 — 看似自由,实则意味着要先花 3-6 个月把沙箱、判题、计费、看板、权限、社区这些"看不见的脏活"都做一遍。
UltiCode 想做的,是把第二条路的样板工程跑通、跑稳,然后开源出来:
让你专注于"题目的运营"和"社区的运营",把"工程的搭建"交给 UltiCode。
🚀 一张图看懂 UltiCode
▼text复制代码┌──────────────┐ ┌──────────────┐ │ Console 9002│ │Management 9003│ │ 用户端 PWA │ │ 管理后台 │ └──────┬───────┘ └───────┬──────┘ └─────────┬────────┘ ▼ ┌───────────────────────┐ │ Spring Boot 3 (9001) │ │ 26 modules · D-form │ └──┬─────────┬─────────┬┘ ▼ ▼ ▼ MySQL 9 Redis 7 Nacos 2 (23306) (26379) (28848)
- Console (用户端) — 题库、刷题、提交、竞赛、论坛、成就、PWA;
- Management (管理端) — 用户、题库、提交审计、审核、订阅、数据看板;
- Backend — 26 个业务模块,
controller → service → mapper → entity分层; - D-form 沙箱 — Python / C / C++ / Java 隔离执行,Hexagonal 三段构建(源 → staging → 镜像)。
✨ 核心特性一览
🧑💻 给刷题者
- 题库 + 题单 — 标签、难度、收藏夹、Markdown 题面、测试用例预览
- 在线评测 — 多语言沙箱执行,实时返回 Verdict(AC / WA / TLE / MLE / RE / SE)
- 题解 + 评论 — Markdown + KaTeX 富文本,点赞、收藏、评论
- 竞赛 — 个人赛 / 团队赛 / 公开赛 / 虚拟赛,榜单支持 ACM / OI / IOI 三种规则
- 论坛 — 帖子 / 评论 / 点赞 / 关注 / 通知,自带内容审核
- 成就系统 — 解题徽章、连击、Rating 排行榜
- PWA + 离线 — 可安装到桌面,断网也能看历史提交
- 主题切换 — Light / Dark / System,Compact / Comfortable 密度档
🛠️ 给运营者
- 数据看板 — 注册趋势、提交分布、判题分布、收入概览
- 审核中心 — 举报队列、申诉、敏感词、用户警告
- 订阅 / 计费 — 会员档位、订单、收入仪表
- 审计日志 — 所有特权操作留痕,合规友好
- Nacos 配置中心 — 改配置不用重启,Feature Flag 灰度
还有 20+ 业务模块(auth · user · problem · contest · submission · solution · forum · vote · notification · achievement · moderation · i18n · search · subscription · queue · edgeoperations · refresh-token · websocket · backup · monitoring · email · admin · permission · bookmark · follow),见仓库 README 完整列表。
🖼️ 界面长这样
用户端 · Light & Dark


管理端 · Light & Dark



🏗️ 技术栈为什么选这些?
| 层级 | 选型 | 理由 |
|---|---|---|
| 后端 | Spring Boot 3.2.5 + Java 17 | 国内生态成熟,招聘友好;Spring Security / Validation / OpenAPI 全家桶省心 |
| ORM | MyBatis-Plus 3.5.16 | 复杂 SQL 仍可手写,CRUD 自动生成,兼顾效率与表达力 |
| 持久化 | MySQL 9.1 + Flyway | 行业标准,迁移脚本可审计可回滚 |
| 缓存 / 会话 | Redis 7 + Redisson 4 | 分布式锁、限流、Session 共享一把梭 |
| 服务发现 | Nacos 2.3 | 既是注册中心,又能做配置中心,中小团队不用上 K8s |
| 前端 | Vue 3.5 + Vite 8 + TS strict | Composition API + 类型安全,新项目首选 |
| UI | Tailwind v4 + shadcn-vue | 设计 token 化,主题切换零成本 |
| 测试 | JUnit 5 + Testcontainers + Playwright | 后端集成 + 端到端都有 |
| 运行时诊断 | Arthas 4.2.2 STATELESS MCP | Claude Code / Cursor 直连,线上排查不用 SSH 进容器 |
值得一提的是 Arthas MCP — 我们把它做成了第一公民:Claude Code 会话内能直接 watch / trace / dashboard,30 秒定位线上 N+1,比传统日志翻找快一个数量级。
⚡ 60 秒跑起来
1. 准备工具
| 工具 | 版本 |
|---|---|
| Docker + Compose | v2 |
| Java | 17 |
| Node.js | ^20.19.0 || >=22.12.0 |
| pnpm | 10+ |
| PM2 | latest |
2. 三步启动
▼bash复制代码git clone https://github.com/DavidHLP/UltiCode.git cd UltiCode # 首次:生成带随机凭据的私有 .env ./scripts/dev/init-env.sh # 启动基础设施 + 跑迁移 + 装依赖 + 启动应用 ./scripts/dev/up.sh
3. 访问
| 服务 | 地址 |
|---|---|
| 用户端 | http://localhost:9002 |
| 管理后台 | http://localhost:9003 |
| 后端 API | http://localhost:9001 |
| Swagger | http://localhost:9001/swagger-ui.html |
| Nacos | http://localhost:28848/nacos |
dev 账号:admin / admin123(仅本机使用,生产环境务必改掉)
再次启动且依赖未变?./scripts/dev/up.sh --skip-install 就行。
🧰 适合谁?
| 场景 | 你能拿到什么 |
|---|---|
| 🎓 高校 / 培训机构 | 私有部署的 OJ + 教学社区,数据完全自主 |
| 🏢 企业内部技术培训 | 算法 / 八股刷题系统,接 SSO,接内部权限 |
| 👥 兴趣小组 / 读书会 | 公开或半公开的算法社区,自带论坛 + 成就 |
| 🛠️ 想转全栈的工程师 | 一个真实可跑的全栈项目,业务复杂度足够高,Spring Boot 3 + Vue 3 都能练到 |
| 🧪 研究评测系统 | 沙箱三段构建(源 → staging → 镜像)可拆可换,verdict 编解码开放 |
🤝 怎么参与?
UltiCode 欢迎任何形式的贡献:
- ⭐ Star / Fork — 顺手点一下,是我们最大的动力
- 🐛 报告 Bug — 开 Issue,附
pm2 logs关键片段 - 💡 提 Feature — 大的改动请先写 RFC 放在
docs/adr/(我们已有 10+ 篇 ADR 示范) - 🧑💻 提 PR — 流程见 CONTRIBUTING.md
- 🌏 翻译 — 我们只有中英两套 locale,新语言永远欢迎
- 📣 传播 — 把这篇博客分享给身边需要 OJ 的朋友
仓库内已经为贡献者准备了完整的:
- AGENTS.md — 仓库级权威指南
- CLAUDE.md — Claude Code 协作约定、字符集陷阱、Arthas / PM2 速查
- CONTRIBUTING.md — 从工具链到 PR 清单的 12 节手把手教学
- RUNBOOK.md — On-call 速查表 + 故障排查
- CODEMAPS/ — 6 份自动生成的架构快照(架构 / 后端 / 前端 / 数据 / 依赖 / 沙箱)
- adr/ — 10+ 篇架构决策记录(为什么用 D-form?为什么 WebSocket 只收 cookie?为什么 refresh token 不再下发 access?)
🗓️ 路线图
- ✅ v0.x — 主体功能跑通(2025 → 2026 Q2)
- 🚧 v0.7 — 端到端 E2E 覆盖 + 评测 Replay
- 📋 v1.0 — 公开 SaaS 多租户(如果你想托管别人的 OJ,这会是个里程碑)
- 🔭 v1.x — AI 辅助出题、AI 助教、Verdict 解释
完整路线与里程碑见 GitHub Projects。
📢 一句话邀请
如果你曾经为 LeetCode 的封闭生态叹息过,如果你想给团队一个真正属于你们自己的 OJ,如果你愿意一起把这套系统打磨到 1.0——
欢迎 Star、Fork、Issue、PR,UltiCode 的下一个版本由你定义。
👉 github.com/DavidHLP/UltiCode
Built with ❤️ by the UltiCode team · MIT License
附录:本文中提到的资源
- 仓库主入口 — https://github.com/DavidHLP/UltiCode
- README — https://github.com/DavidHLP/UltiCode/blob/main/README.md
- 贡献指南 — https://github.com/DavidHLP/UltiCode/blob/main/docs/CONTRIBUTING.md
- 截图合集 — https://github.com/DavidHLP/UltiCode/tree/main/docs/screenshots
- 架构快照 — https://github.com/DavidHLP/UltiCode/tree/main/docs/CODEMAPS
- 决策记录 — https://github.com/DavidHLP/UltiCode/tree/main/docs/adr

