hustoj在线判题平台详细搭建二开及美化过程(ubuntu20.04 / centos7.9)常见问题解决

服务器配置需求

阿里云 腾讯云 华为云均可,腾讯云目前是最合适的。

腾讯云 2H4G 5M 60GB 轻量应用服务器  承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛。
镜像选Ubuntu22.04LTS,物理机安装Ubuntu22.04 Server。

购买链接如下:

【腾讯云】2核2G3M云服务器7.92元/月起,2000元代金券免费领

云服务器购买成功后通过扫码识别登录云控制台:

点击 更多—查看详情

点击 登录 打开 一键登录 窗口 即可在命令行下执行操作   命令前 加入 sudo

一、hustoj部署

ubuntu系统安装:
第一步:

cd /home
sudo wget http://dl.hustoj.com/install.sh 
第二步:
sudo bash install.sh
centos系统安装 :

先上传install-centos7.sh 到home目录下

cd /home
sudo wget http://dl.hustoj.com/install-centos7.sh
sudo bash install-centos7.sh

出现账号和密码。复制记下来,后面要用。

在浏览器里面访问云服务器公网地址例如:101.34.59.x 或者(局域网ip地址 例如192.168.1.x 局域网虚拟机部署)就可以看到主页了。

注册后台管理员

用户名使用 admin。其他按照要求填就行。这个就是管理员账号。

二、hustoj配置


1.大部分功能和选项的开关和参数调整都在配置文件中,安装后几个重要配置文件的位置如下:

/home/judge/etc/judge.conf  #判题judged/judge_client
/home/judge/src/web/include/db_info.inc.php  #Web
/etc/php5/fpm/php.ini 或 /etc/php7.0/fpm/php.ini 或 /etc/php.ini(in Centos7)  #php
/etc/nginx/sites-enabled/default 或 /etc/nginx/nginx.conf(in Centos7)  #nginx

HUSTOJ的两个重要配置文件(judge.conf和db_info.inc.php),互相独立,分别供core和web使用。

core(judged/judge_client)使用的配置文件是judge.conf,内容如下:

OJ_HOST_NAME=127.0.0.1  #用mysql连接读取数据库,数据库的主机地址
OJ_USER_NAME=debian-sys-maint #数据库帐号
OJ_PASSWORD=CM172iAvF10lrrKr #数据库密码
OJ_DB_NAME=jol #数据库名称
OJ_PORT_NUMBER=3306 #数据库端口
OJ_RUNNING=4 #judged会启动judge_client判题,这里规定最多同时运行几个judge_client
OJ_SLEEP_TIME=5 #judged通过轮询数据库发现新任务,轮询间隔的休息时间,单位秒
OJ_TOTAL=1 #老式并发处理中总的judged数量
OJ_MOD=0 #老式并发处理中,本judged负责处理solution_id按照TOTAL取模后余数为几的任务。
OJ_JAVA_TIME_BONUS=2 #Java等虚拟机语言获得的额外运行时间
OJ_JAVA_MEMORY_BONUS=64 #Java等虚拟机语言获得的额外内存
OJ_JAVA_XMS=-Xms64M 
OJ_JAVA_XMX=-Xmx128M
OJ_SIM_ENABLE=0 #//是否开启代码相似度比对,开启这个并且同时开启db_info.inc.php中static  $OJ_SIM=false,才能启用OJ查重
OJ_HTTP_JUDGE=0 #是否使用HTTP方式连接数据库,如果启用,则前面的HOST_NAME等设置忽略
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline #使用HTTP方式连接数据库的基础地址,就是OJ的首页地址
OJ_HTTP_USERNAME=admin #使用HTTP方式所用的用户帐号(HTTP_JUDGE权限),该帐号登录时不能启用VCODE图形验证码,但可以登录成功后启用。
OJ_HTTP_PASSWORD=admin #使用HTTP方式所用的用户密码
OJ_REDISENABLE=0
OJ_REDISSERVER=127.0.0.1
OJ_REDISPORT=6379
OJ_REDISAUTH=123456
OJ_REDISQNAME=hustoj
OJ_OI_MODE=1 #是否启用OI(信息学奥林匹克竞赛)模式,即无论是否出错都继续判剩余的数据,在ACM比赛中一旦出错就停止运行。
OJ_SHM_RUN=1 #是否使用/dev/shm的共享内存虚拟磁盘来运行答案,如果启用能提高判题速度,但需要较多内存。
OJ_USE_MAX_TIME=1 #是否使用所有测试数据中最大的运行时间作为最后运行时间,如果不启用则以所有测试数据的总时间作为超时判断依据
OJ_LANG_SET=0,1,2,3,4,5,6,7,8,9,10,11 #判题机评测语言,即C、C++、Java、Python......
OJ_COMPILE_CHROOT=0
OJ_TURBO_MODE=0
OJ_CPU_COMPENSATION=0.88
OJ_UDP_ENABLE=1
OJ_UDP_SERVER=127.0.0.1
OJ_UDP_PORT=1536


注意,core没有识别引号和注释的能力,所以不要自行增加任何引号或注释,否则可能影响judged的启动,上面的解释仅做阅读,不能放入配置文件。
web端使用的配置文件是db_info.inc.php,内容如下:

static     $DB_HOST="localhost";  //数据库服务器ip或域名
static     $DB_NAME="jol";   //数据库名
static     $DB_USER="debian-sys-maint";  //数据库账户
static     $DB_PASS="CM172iAvF10lrrKr";  //数据库密码
static     $OJ_NAME="HUSTOJ";  //左上角显示的系统名称
static     $OJ_HOME="./";    //主页目录
static     $OJ_ADMIN="root@localhost";  //管理员email
static     $OJ_DATA="/home/judge/data";  //测试数据目录
static     $OJ_BBS=false;//"bbs" for phpBB3 bridge or "discuss" for mini-forum or false for close any 
static  $OJ_ONLINE=false;  //是否记录在线情况
static  $OJ_LANG="en";  //默认语言
static  $OJ_SIM=false;  //显示相似度
static  $OJ_DICT=false; //显示在线翻译
static  $OJ_LANGMASK=0; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language
static  $OJ_EDITE_AREA=true;//true: syntax highlighting is active
static  $OJ_ACE_EDITOR=true;
static  $OJ_AUTO_SHARE=false;//true: One can view all AC submit if he/she has ACed it onece.
static  $OJ_CSS="white.css";
static  $OJ_SAE=false; //using sina application engine
static  $OJ_VCODE=false;  //验证码
static  $OJ_APPENDCODE=false;  // 代码预定模板
static  $OJ_CE_PENALTY=false;  // 编译错误是否罚时
static  $OJ_PRINTER=false;  //启用打印服务
static  $OJ_MAIL=false; //内邮
static  $OJ_MARK="mark"; // "mark" for right "percent" for WA
static  $OJ_MEMCACHE=false;  //使用内存缓存
static  $OJ_MEMSERVER="127.0.0.1";
static  $OJ_MEMPORT=11211;
static  $OJ_UDP=true;   //使用UDP通知
static  $OJ_UDPSERVER="127.0.0.1";
static  $OJ_UDPPORT=1536;
static  $OJ_REDIS=false;   //使用REDIS队列
static  $OJ_REDISSERVER="127.0.0.1";
static  $OJ_REDISPORT=6379;
static  $OJ_REDISQNAME="hustoj";
static  $SAE_STORAGE_ROOT="http://hustoj-web.stor.sinaapp.com/";
static  $OJ_CDN_URL="";  //  http://cdn.hustoj.com/  https://raw.githubusercontent.com/zhblue/hustoj/master/trunk/web/ 
static  $OJ_TEMPLATE="bs3"; //使用的默认模板, [bs3 ie ace sweet sae] work with discuss3, [classic bs] work with discuss
//if(isset($_GET['tp'])) $OJ_TEMPLATE=$_GET['tp'];
static  $OJ_LOGIN_MOD="hustoj";
static  $OJ_REGISTER=true; //允许注册新用户
static  $OJ_REG_NEED_CONFIRM=false; //新注册用户需要审核
static  $OJ_NEED_LOGIN=false; //需要登录才能访问
static  $OJ_RANK_LOCK_PERCENT=0; //比赛封榜时间比例
static  $OJ_SHOW_DIFF=false; //是否显示WA的对比说明
static  $OJ_TEST_RUN=false; //提交界面是否允许测试运行
static  $OJ_BLOCKLY=false; //是否启用Blockly界面
static  $OJ_ENCODE_SUBMIT=false; //是否启用base64编码提交的功能,用来回避WAF防火墙误拦截。
static  $OJ_OI_1_SOLUTION_ONLY=false; //比赛是否采用noip中的仅保留最后一次提交的规则。true则在新提交发生时,将本场比赛该题老的提交计入练习。
static  $OJ_OI_MODE=false;//是否开启OI比赛模式,禁用排名、状态、统计、用户信息、内邮、论坛等。
static  $OJ_SHOW_METAL=true;//榜单上是否按比例显示奖牌
static  $OJ_RANK_LOCK_DELAY=3600;//赛后封榜持续时间,单位秒。根据实际情况调整,在闭幕式颁奖结束后设为0即可立即解封。
static  $OJ_BENCHMARK_MODE=false; //此选项将影响代码提交,不再有提交间隔限制,提交后会返回solution id//static  $OJ_EXAM_CONTEST_ID=1000; // 启用考试状态,填写考试比赛ID
//static  $OJ_ON_SITE_CONTEST_ID=1000; //启用现场赛状态,填写现场赛比赛ID
/* share code */
static  $OJ_SHARE_CODE = false; // 代码分享功能
/* recent contest */
static  $OJ_RECENT_CONTEST = false;// "http://algcontest.rainng.com/contests.json" ; // 名校联赛
//$OJ_ON_SITE_TEAM_TOTAL用于根据比例的计算奖牌的队伍总数
//CCPC比赛的一种做法是比赛结束后导出终榜看AC至少1题的不打星的队伍数,现场修改此值即可正确计算奖牌
//0表示根据榜单上的出现的队伍总数计算(包含了AC0题的队伍和打星队伍)
static $OJ_ON_SITE_TEAM_TOTAL=0;

2.如果用户量比较大,报50X错误,可能需要修改/etc/nginx/nginx.conf中的设置:

worker_processes 8;    #其中数字8可以取CPU核心数的整数倍。
events {worker_connections 2048;multi_accept on;
}

3.如果遇到比赛人数多,比赛排名xls文件无法下载,请修改/etc/nginx/sites-enabled/default, 在fastcgi_pass一行的后面增加:

fastcgi_buffer_size 128k;
fastcgi_buffers 32 32k;

4.保存后,重启nginx:

 /usr/sbin/nginx -s reload


三、HUSTOJ的备份与恢复


1.备份
脚本安装的用户,可以使用install目录中的bak.sh进行备份:

sudo bash /home/judge/src/install/bak.sh

2.恢复
如果要恢复,我们需要找到备份的两个压缩包,db_xxxxxxxx.sql.bz2和hustoj_xxxxxxxx.tar.bz2,首先,我们将其解压缩:

tar -jxvf hustoj_20191116.tar.bz2
bzip2 -d db_20191116.sql.bz2


我们解压缩之后会有两个目录(home/、var/)和一个数据库文件(db_xxxxxxxx.sql)。其中home里面存放的是一些数据,而var里面存放的和上面一样是db_xxxxxxxx.sql.bz2数据库文件。
然后,我们就进入新搭建好的HUSTOJ的数据库,将备份的数据库导入进去:

sudo mysql -u root -p -A #登录mysql,这里的root根据你judge.conf而定,接着输入密码
use jol; #进入jol数据库
source /var/backups/db_xxxxxxxx.sql #旧OJ的sql文件路径
最后把home/judge文件夹上传覆盖即可。

四、HUSTOJ的升级


脚本安装的用户,可以使用install目录中的update-hustoj进行升级。

sudo bash /home/judge/src/install/update-hustoj
升级脚本执行后,可能需要登陆web端管理后台,执行一次更新数据库。

五、HUSTOJ的修复


自己不小心改坏了web代码,可以使用install目录中的fixing.sh进行系统修复。

sudo bash /home/judge/src/install/fixing.sh


六、HUSTOJ的美化


1.首先就是OJ最下面的那两个二维码广告:

(1).我们可以通过修改/home/judge/src/web/template/bs3/js.php文件来去除:

sudo  vim /home/judge/src/web/template/bs3/js.php
#或者
#cd /home/judge/src/web/template/bs3/
#sudo vim js.php

(2).找到这两行,将其注释或删除(注释://or/* */):

$("body").append("<div id=footer class=center >GPLv2 licensed by <a href='https://github.com/zhblue/hustoj' >HUSTOJ</a> "+(new Date()).getFullYear()+" </div>");
$("body").append("<div class=center > <img src='http://hustoj.com/wx.jpg' width='120px'><img src='http://hustoj.com/alipay.png' width='120px'><br> 欢迎关注微信公众号onlinejudge</div>");

(3).保存退出:wq,刷新网页,然后我们就可以看到广告消失了。

2.至于上面的广告就是公告了,进入后台管理,把公告删除就行了。

3.当我们发个新闻,新闻的下面会显示:

(1).这个我们可以在/home/judge/src/web/index.php:

vim /home/judge/src/web/index.php

(2).在里面找到:

$view_news .= "</div>";
$view_news .= "<div class='panel-footer'>请到<a target='_blank' href='https://github.com/zhblue/hustoj'> GitHub</a>来,给我们加个星星!&nbsp;Please give us a star on <a target='_bla    nk' href='https://github.com/zhblue/hustoj'>Github</a>!</div>";
$view_news .= "</div>";


(3).将其注释掉或删除。

(4).如果你想去掉新闻标题后面的小尾巴:

(5).我们同样是在index.php文件中修改:

sudo vim /home/judge/src/web/index.php

(6).在里面找到:

$view_news .= "<div class='panel-heading'><big>" . $row[ 'title' ] . /*"</big>-<small>" . $row[ 'user_id' ] .*/ "</small></div>";
(7).将"</big>-<small>" . $row[ 'user_id' ] .注释或删除掉:

4.OJ的评测结果默认是在后面加上一个分数的,例如Accepted100。
(1).如果想要去掉这个分数,我们只需要在/home/judge/src/web/status.php中找到(大概在295行左右):

$view_status[$i][3].= "$mark</a>";
(2).将其注释或删除掉就行了:

七、导入题库

后台导入问题失败
1、先用谷歌浏览器直接打开xml文件,看是否有语法错误,如果有,用文本编辑器修订提示的行号。
2、如果超过100M,可以先用EasyFPSViewer拆分成多个小文件,然后再导入。
3、对于HUSTOJ,可以先压缩为zip再上传导入
4、修改/etc/php/7.2/fpm/php.ini, 提高post_max_size、upload_max_filesize 、memory_limit、max_execution_time 的值。修改后执行sudo service php7.2-fpm restart生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下多Chrome谷歌浏览器版本共存

场景 某些年代久远的 WEB 应用&#xff0c;必须在指定的浏览器或版本才能正常运行&#x1f602;&#xff0c;此时就需要多个版本 chrome 浏览器共存。 解决方案 下载指定版本 可以从 https://www.chromedownloads.net/ 下载需要的版本&#xff0c;此处下载的是87.0.4280.14…

分布式锁-Redis红锁解决方案

一 分布式锁的概念 1&#xff1a;概念 分布式锁&#xff08;多服务共享锁&#xff09; 在分布式的部署环境下&#xff0c;通过锁机制来让多客户端互斥的对共享资源进行访问控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共…

虹科资讯 | 10月智能制造行业动态回顾

文章来源&#xff1a;虹科工业控制 阅读原文&#xff1a;https://mp.weixin.qq.com/s/0jR_QgmR6tmrRoTFAo8mFw 10月&#xff0c;虹科与PLCopen合作开展IEC 61131-3培训&#xff0c;目前正在火热报名中&#xff1b;人工智能领域的迅猛发展引起了智能制造业的广泛关注&#xff…

都2023年了,不会还有人不会设计软件测试用例叭?不会吧不会吧

一、概念 测试用例的基本概念&#xff1a; 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素 。 主要步骤&#xff1a; 测试环境——测试步骤—…

逻辑(css3)_强制不换行

需求 如上图做一个跑马灯数据&#xff0c;时间、地点、姓名、提示文本字数都不是固定的。 逻辑思想 个人想法是给四个文本均设置宽度&#xff0c;不然会出现不能左对齐的现象。 此时四个文本均左对齐&#xff0c; 垂直排列样式也比较好看&#xff0c;但是出现一个缺点&#…

激光雷达标定板提高自主驾驶功能的感知精度

激光雷达&#xff08;LiDAR&#xff09;是一种通过发射激光束并测量反射回来的时间来测量目标距离和形状的传感器。为了提高激光雷达的感知精度和稳定性&#xff0c;需要进行激光雷达标定&#xff0c;以确定其激光束的准确性和稳定性。 如果没有激光雷达&#xff0c;自动驾驶的…

【Git】Git暂存使用

当我们正常使用Git切换分支时&#xff0c;会出现以下提示&#xff08;请在切换分支之前提交您的更改或隐藏它们&#xff09;&#xff1a; Please commit your changes or stash them before you switch branches. 这是由于你现有分支上有修改还没有commit&#xff0c;而你又选择…

GPT与人类共生:解析AI助手的兴起

随着GPT模型的崭新应用&#xff0c;如百度的​1​和CSDN的​2​&#xff0c;以及AI助手的普及&#xff0c;人们开始讨论AI对就业市场和互联网公司的潜在影响。本文将探讨GPT和AI助手的共生关系&#xff0c;以及我们如何使用它们&#xff0c;以及使用的平台和动机。 GPT和AI助手…

2127. 参加会议的最多员工数 (困难,基环内向树,拓扑排序)

思路&#xff1a; 将每个员工作为节点&#xff0c;喜欢的关系作为边&#xff0c;显然是能够组成若干张连通图的&#xff0c;关键就在于如何理解一张图首先要证明&#xff1a;任何一个第一步构成的图必是一个有且仅有一个环的连通图&#xff08;如下面图片所示&#xff0c;也称…

【uniapp】JavaScript基础学习-20231027

今天有找到一个比较好的网站 https://www.w3school.com.cn/js/index.asp 介绍也全面&#xff0c;内容也比较多。我觉得把最基本的语法看看&#xff0c;然后可以上手写代码了。其他的就是需要靠长期的学习和积累了。 基础语法的使用&#xff1a; 1、定义一个变量 2、对变量赋值 …

电子沙盘数字沙盘地理信息开发教程第17课

M3DGIS电子沙盘数字沙盘地理信息开发教程第17课新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格。 public bool Atmosphere;//是否显示大气圈。&#xff08;因为WPF不支持shader功能&#xff0c;所以效果嘛。。。&#xff09; 在SDK中提供底层的模型访问接…

如何选择合适的进口跨境商城源码?揭秘电商平台的成功之道

了解进口跨境电商平台源码的重要性 在进口跨境电商行业的兴起中&#xff0c;选择合适的商城源码是创业者成功的关键之一。进口跨境商城源码可提供网站架构、功能模块、支付系统、物流管理等基础构建&#xff0c;帮助企业快速搭建属于自己的商城平台。然而&#xff0c;在众多商城…

区块链-蚂蚁链(阿里系产品),至信链(腾讯系),长安链(国家队)

目录 区块链-蚂蚁链&#xff08;阿里系产品&#xff09;,至信链&#xff08;腾讯系&#xff09;,长安链&#xff08;国家队&#xff09; ①蚂蚁链&#xff08;阿里系产品&#xff09; ②至信链&#xff08;腾讯系&#xff09; ③长安链&#xff08;国家队&#xff09; Hyp…

NI USB9218国产对标51.2 kS/s/ch,2通道C系列通用模拟输入模块

51.2 kS/s/ch&#xff0c;2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择&#xff0c;因而用户可在各个通道上进行…

Simulink HDL--如何生成Verliog代码

Simulink生成HDL的方法可以快速设计出工程&#xff0c;并结合FPGA验证&#xff0c;相比于手写HDL代码虽然存在代码优化不足的问题。但是方法适合做工程的快速验证和基本框架搭建。本文将介绍Simulink HDL生成Verliog代码的基本操作 1、逻辑分析仪功能 Simulink生成HDL前需要通…

利用移动互联、物联网、智能算法、地理信息系统、大数据分析等信息技术开发的智慧工地云平台源码

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术&#xff0c;提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平&#xff0c;实现工程施工可视化智能管理&#xff0c;并逐步实现绿色生态建造。 技术架构&#xff1a;微…

安装Redis

目录 安装步骤 1.切换到root用户,使用su命令切换到root用户. 2.使用apt命令来搜索redis相关的软件包. 3.使用qpt命令安装reids."apt install redis". 4.手动修改redis的配置文件. 5.重新启动服务器 6.使用redis自带的客户端来连接服务器. 在使用redis的命令之…

系统韧性研究(3)| 工程系统韧性要求

从最基本的层面上说&#xff0c;系统韧性指的是系统在逆境中继续执行其任务的程度。虽然对操作连续性至关重要&#xff0c;但系统的服务&#xff08;能力&#xff09;只是系统继续执行其任务所必须保护的一些资产。该系统必须检测不利因素&#xff0c;对其作出反应&#xff0c;…

Vscode使用国内镜像源下载,秒下

镜像源 国内镜像地址&#xff1a;https://vscode.cdn.azure.cn 使用方法&#xff1a;很简单&#xff0c;只需要在官网选择自己需要的版本&#xff0c;点击下载&#xff0c;在下载的路径中将我们的镜像源替换上去即可 1.81.1版本下载链接 https://vscode.cdn.azure.cn/stable/…

软件测试优秀的测试工具,会用三款工作效率能提升一半

我们将常用的测试工具分为10类。 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 注&#xff1a;工具排名没有任何意义。 大多数初学者&…