一个在线判题平台,自研代码沙箱,支持编译、运行 golang 代码,为 Gopher 开发者提供良好的自我提升刷题体验。
实现功能包括:
- 用户注册、用户登录、用户退出;
- 普通用户浏览题目、提交代码、查看提交记录,查看代码运行结果;
- 管理员添加、修改、删除题目
- 编译,运行 Golang 代码
- 代码评测,样例校验
前端:vue-cli 框架 + Arco Design 组件库
后端:
- 语言:Golang + go-zero 框架 + GORM + gRPC
- 数据库:MySQL
- 缓存:Redis
- 消息队列:RabbitMQ
- 网关:Nginx
- 链路追踪:Jaeger
- 服务监控:Prometheus + Grafana
- 容器:Docker + Docker Compose
- 热编译工具:modd
0,启动独立服务 gyu_oj_sandbox,为 gyu_oj_platform 做准备;
- 拉取项目:
git clone git@github.com:GyuXiao/gyu-oj-sandbox.git
- 配置 rpc/etc/sandbox.yaml 文件中的 SandboxBy.Type,默认是 golang;
- 不同配置的优缺点:
- golang:响应速度快,但安全性不如 docker
- docker:响应速度不如 golang 原生,但安全性较高
- 启动项目(建议在 linux 环境下):
- 先进入到对应的目录:
cd cmd/api/sandbox.go- 进入项目根目录,执行:
go run sandbox.go
1,启动 gyu_oj_backend 项目
- 拉取项目:
git clone git@github.com:GyuXiao/gyu_oj_platform.git
- 进入项目根目录,先配置运行环境:
- 修改 docker-compose-env.yml 文件的
- mysql_password
- redis_password
- 修改 app/user/rpc/etc/user.yaml 文件的
- mysql_password
- redis_password
- JwtAuth.AccessSecret
- 修改 app/user/api/etc/user.yaml 文件的
- JwtAuth.AccessSecret
- 修改 app/question/api/etc/question.yaml 文件的
- JwtAuth.AccessSecret
- 修改 app/question/rpc/etc/question.yaml 文件的
- mysql_password
- 修改 app/judge/rpc/etc/judge.yaml 文件的
- CodeSandbox.Url
- 修改 docker-compose-env.yml 文件的
- 容器化启动项目:
# 先启动环境 docker-compose -f docker-compose-env.yml up -d # 再启动项目 docker-compose -f docker-compose.yml up -d
2,启动 gyu_oj_frontend 项目
- 环境要求:
- node: v18.16.0
- npm: 9.5.1
- @vue/cli 5.0.8
- 进入 gyu_oj_frontend 项目,在根目录执行
npm run serve
项目配置说明:
MySQL 或 Redis 的 password,根据开发者喜好设置,
JwtAuth.AccessSecret 则是根据业务需求设置对应的 Jwt 密钥
CodeSandbox.Url 则是 gyu_oj_sandbox 服务所在的网络

