前言
本文基于go-judge项目搭建,由于go-judge官网项目GitHub - criyle/go-judge: Sandbox Server in REST / gRPC API. Based on Linux container technologies.,资料太少,而且只给了C++语言的调用样例,无法知道其他常见语言比如:Python、Java等;同时go-judge也没有给出鉴权方式如何设置与调用,内部原理是啥? 因此本文结合自己搭建OJ系统的实践经验,耗时一周,总结了这篇文章,你可以按照文章步骤快速搭建一个基于go-judge完善的判题系统,支持C++、C语言、Java、Python3、Python2。
本文同时借鉴参考了HOJ、QDUOJ等其他开源OJ。
注意,文章中如若涉及楼主公网IP或者其他私有信息,请务必保密!
阅读本文你将了解:
(1)如何使用云服务器单独部署go-judge,不使用docker;
(2)使用docker如何部署go-judge服务;
(3)go-judge官方各项目介绍,中文文档补充;
(4)go-judge请求接口举例,以C++、C语言、Java、Python3、Python2为例,如需其他环境也可自行根据样例探索;
(5)go-judge启动参数如何设置,如何调整限制内存、CPU等参数;
(6)流程基于Linux宝塔面板搭建,你不需要对linux特别了解。
(7)常见问题处理:sudo apt-get update apt install执行慢的解决方法、GoJudge官网源码压缩包无法下载,Chrome浏览器等均提示有病毒,或者无法解压;Docker内安装语言包等问题处理;
(8)多机部署建议;
(9)教你如何基于Docker构建多语言支持的镜像,文章给了dockerfile文件,你可以基于他构建自己的镜像,本文支持C++、C语言、Java、Python3、Python2语言。HOJ的Dockerfile过于复杂,本文进行了精简。
全文目录
1 官网
2 部署流程
2.1 服务器部署
2.2 Docker部署(推荐)
2.3 构建全新镜像
2.4 隐患
2.5 构建镜像和容器命令
3 启动参数设置
3.1 所有参数
3.2 常用参数设置
4 请求接口
4.1 全部接口
4.2 Run接口举例
5 请求参数样例
5.1 C语言
5.2 C++
5.3 Java
5.4 Python3
5.5 Python2
6 常见问题解决
6.1 sudo apt-get update apt install执行慢的解决方法,更换镜像源
6.2 apt install g++报Unable to locate package
6.3 CentOS7系统需要开启User命名空间才能使用Docker部署沙箱
6.4 GoJudge官网源码压缩包无法下载,Chrome浏览器等均提示有病毒,或者无法解压
6.5 Git Clone时报错
6.6 Docker内安装语言包
7 附录
7.1 HOJ language.yml配置
1、官网
go-judge官网:https://github.com/criyle/go-judge
官方中文文档:https://github.com/criyle/go-judge/blob/master/README.cn.md
go-sandbox 官网 https://github.com/criyle/go-sandbox
go-judge是由REST / gRPC API实现的go-sandbox,底层是go-sandbox
部署go-judge有两种方式:
(1)直接服务器部署,用官网给的可执行文件;
(2)Docker部署,用官网给的命令,会基于官网镜像生成docker容器。
以上两种方式都不需要额外安装go环境,但判题环境比如c++,python等需要安装。
官网也给出了使用go-judge的例子:https://github.com/criyle/go-judger-demo
在该例子中,可基于Dockerfile.exec,构建自己的镜像,本文后续将给出如何构建一个自己的go-judge镜像,如何支持多编译环境等。
二、服务部署流程
(1)下载官网给的可执行二进制文件
自行根据自己的服务器版本选择,一般情况下是选这个:
由于go-judge资料欠缺,楼主耗时3天将部署流程整理成了手册(40页),如您需要可访问:go-judge判题机详细部署教程go-judge多语言支持_UUID资料库 获取,或者CSDN资源:https://download.csdn.net/download/liuning940307/89212973