UltiCode:一条命令跑起来的开源全栈 OJ

UltiCode 是一个全栈开源在线评测(Online Judge)平台。Spring Boot 3 + Vue 3 + MySQL 9 + Redis 7 + Nacos,从题目到竞赛、从论坛到管理后台,一条 ./scripts/dev/up.sh 跑起来。👉 仓库地址:github.com/DavidHLP/UltiCode


🎯 为什么做 UltiCode?

过去几年,身边的算法社区、培训班、企业内训部门在搭建刷题系统时,几乎只有两条路:

  1. 用现成的 SaaS(LeetCode / Codeforces / 牛客) — 功能强,但数据不归你管,定制能力薄弱,品牌和功能都被绑定;
  2. 从零自研 — 看似自由,实则意味着要先花 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 全家桶省心
ORMMyBatis-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 strictComposition API + 类型安全,新项目首选
UITailwind v4 + shadcn-vue设计 token 化,主题切换零成本
测试JUnit 5 + Testcontainers + Playwright后端集成 + 端到端都有
运行时诊断Arthas 4.2.2 STATELESS MCPClaude Code / Cursor 直连,线上排查不用 SSH 进容器

值得一提的是 Arthas MCP — 我们把它做成了第一公民:Claude Code 会话内能直接 watch / trace / dashboard,30 秒定位线上 N+1,比传统日志翻找快一个数量级。


⚡ 60 秒跑起来

1. 准备工具

工具版本
Docker + Composev2
Java17
Node.js^20.19.0 || >=22.12.0
pnpm10+
PM2latest

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
后端 APIhttp://localhost:9001
Swaggerhttp://localhost:9001/swagger-ui.html
Nacoshttp://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


附录:本文中提到的资源

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP