敏捷如狐 · ACM 竞赛 + 题库训练平台
- 前端:React 19 + TypeScript + Vite + TailwindCSS v4 + Zustand + SWR + Axios + Monaco Editor + ReactRouter
- 后端:SpringCloud + Nacos + Spring Security(骨架)
- 评测:Go 沙箱(cgroups + seccomp)
- 基础设施:PostgreSQL + Redis + RocketMQ + Docker Compose
ruohu-oj/
├── apps/
│ ├── backend/ # SpringCloud 多模块工程(Gradle)
│ │ ├── Dockerfile # 统一构建 5 个 jar 为 ruohu-backend:latest
│ │ ├── ruohu-gateway/ # 网关模块
│ │ ├── ruohu-auth/ # 鉴权 / 用户 / 班级
│ │ ├── ruohu-question/ # 题库 / 标签 / 题解
│ │ ├── ruohu-contest/ # 比赛 / 提交 / 聊天 / 通知
│ │ └── ruohu-judge/ # 内部评测
│ └── frontend/ # 前端主站 + Admin
├── packages/
│ └── shared/ # 共享类型与常量
├── infra/ # 基础设施即代码(Docker Compose 编排)
│ ├── docker-compose.yml # 服务编排入口
│ ├── .env # 镜像版本 / 数据库凭据 / Nacos 令牌
│ ├── nacos/ # Nacos 共享配置与初始化脚本
│ ├── rocketmq/ # RocketMQ Broker 配置
│ ├── nginx/ # OpenResty 反向代理配置
│ └── db/init.sql # PostgreSQL 初始化脚本(扩展)
├── openresty/ # (历史)nginx.conf 已迁至 infra/nginx
└── pnpm-workspace.yaml
所有基础设施与后端服务由 infra/docker-compose.yml 编排,配置集中在 infra/.env。
# 启动全部服务(含后端镜像构建)
docker compose -f infra/docker-compose.yml up --build
# 仅启动基础设施(Nacos / PostgreSQL / Redis / RocketMQ / 配置初始化)
docker compose -f infra/docker-compose.yml up -d \
nacos nacos-config-init postgres redis rocketmq-namesrv rocketmq-broker
# 停止并清理
docker compose -f infra/docker-compose.yml down说明:后端镜像
ruohu-backend:latest由apps/backend/Dockerfile构建 (GradlebootJar编译 5 个模块),首次构建需下载 Gradle 与依赖,耗时较长。 Nacos 3.x 需要infra/.env中的NACOS_AUTH_TOKEN等鉴权变量; PostgreSQL 18 数据卷挂载于/var/lib/postgresql。
| 服务 | 端口 | 说明 |
|---|---|---|
| Nacos 控制台 | 8848 | 注册 / 配置中心 |
| PostgreSQL | 5432 | 关系数据库 ruohuoj |
| Redis | 6379 | 缓存 / 限流 / 会话 |
| RocketMQ NameServer | 9876 | 消息路由 |
| RocketMQ Broker | 10909 / 10911 | 消息存储 |
| OpenResty | 80 | 反向代理(/api → 网关) |
| ruohu-gateway | 9000 | API 网关 |
| ruohu-auth / question / contest / judge | 9001–9004 | 后端微服务 |
pnpm install
pnpm dev