OJ平台c语言测试,GitHub - iamwinter/LDUOnlineJudge: Open-source online judge based on laravel | 程序设计在线评测系统 ...

Ludong University Online Judge

鲁东大学程序设计在线测评系统与考试平台

💡 快速了解

概览

预览网站 ;您可以使用账号guest0(密码:9AF860CB)登录参观网站。

该账号可以进入后台管理,不要使用该账号破坏小破站哦😃

程序设计在线评测系统,大学生程序设计考试系统,ACM-ICPC竞赛系统

支持考试/竞赛,支持编程题、代码填空(C/C++/Java/Python3)

Web后端基于php框架 laravel 6.0 开发,php版本=7.2

Web前端使用bootstrap4、jquery,适配移动端和PC端

判题端基于C/C++和shell编程,存放于judge文件夹

前台

首页;公告/新闻,本周榜,上周榜

状态;用户提交记录与判题结果

问题;题库(编程、代码填空)

竞赛;题目(选自题库),排名(ACM,OI)可封榜,赛后补题榜,公告栏,气球派送

排名;用户解题排行榜,可按年/月/周/日查询

后台

判题机;启动/停止linux判题端进程

公告/新闻;用户访问首页可见

用户管理;账号权限分配,批量生成账号,黑名单

题目管理;增改查,公开/隐藏,重判结果,导入与导出(兼容hustoj)

竞赛管理;增删查改,公开/隐藏

系统配置;修改网站名称,打开/关闭一些全局功能,中英文切换等。

开发计划(欢迎在issue区提出建议)

讨论板增加审核功能,以及总开关。

题号重排。目前题号在数据库作为主键,不支持题号重排。

代码高亮。以及使用网页代码编辑器。

查重代码左右对比。

增加About专栏,向用户解释判题命令等。

增加echarts工具进行数据分析,包括榜单、题目通过率等的图表展示。

美化UI,首页增加竞赛、新闻、照片等信息的展示。

后台题面编辑增加markdown编辑器。

考试模式。考试期间只允许考试账号登录,限制登录ip等。

增加版本号标识,以及通过网页端升级系统。

🔧 项目安装

基于Linux Ubuntu 16.04 / 18.04

[帮助:更换软件源]

git clone https://gitee.com/iamwinter/LDUOnlineJudge.git /home/LDUOnlineJudge

# git clone https://github.com/iamwinter/LDUOnlineJudge.git /home/LDUOnlineJudge

bash /home/LDUOnlineJudge/install/ubuntu16.04/install.sh

浏览器访问服务器ip进入首页

注册用户admin自动成为管理员

mysql数据库名lduoj,默认用户lduoj@localhost(密码123456789)

nginx配置文件/etc/nginx/conf.d/lduoj.conf

基于docker(推荐)

[帮助:更换docker镜像源]

docker run -dit --restart=always --cap-add=SYS_PTRACE \

-p 8080:80 \

-v ~/lduoj_docker:/volume \

--name lduoj \

iamwinter/lduoj:latest

-p参数后的8080是主机端口,可自定义。

浏览器访问服务器ip:8080进入首页。

配置域名与端口

-v参数后的~/lduoj_docker是用于保存数据的主机目录,可自定义。

如需备份系统,只需将此文件夹打包备份。

进入容器进行管理: docker exec -it lduoj /bin/bash

🔨 项目升级

基于Linux Ubuntu安装的用户请执行后两行;

基于docker安装的用户请执行全部命令。

docker exec -it lduoj /bin/bash

git clone https://gitee.com/iamwinter/LDUOnlineJudge.git /home/lduoj_upgrade

# git clone https://github.com/iamwinter/LDUOnlineJudge.git /home/lduoj_upgrade

bash /home/lduoj_upgrade/install/ubuntu16.04/update.sh

💿 项目迁移

基于Ubuntu16.04 / 18.04

1.在原主机备份数据库、nginx配置

bash /home/LDUOnlineJudge/install/mysql/database_backup.sh

cp -f /etc/nginx/conf.d/lduoj.conf /home/LDUOnlineJudge/install/nginx/lduoj.conf

2.拷贝原主机文件夹/home/LDUOnlineJudge到新主机相同路径。

3.在新主机上执行安装。

bash /home/LDUOnlineJudge/install/ubuntu16.04/install.sh

基于docker

1.在原主机将文件夹~/lduoj_docker(或docker容器内/volume)打包,发送到新主机相同位置。

原主机 [ 进入容器 -> 打包压缩 -> 发送到新主机(用户名root;ssh端口号22;实际ipip) ]:

docker exec -it lduoj /bin/bash

tar -zcvf volume.tar.gz /volume

scp -P 22 volume.tar.gz root@ip:~/

新主机 [ 解压 -> 重命名 ]:

cd ~/

tar -zxvf volume.tar.gz

mv volume lduoj_docker

2.在新主机基于docker安装(见项目安装)。

3.若原主机自定义了nginx配置文件,可自行复制到新主机。

或参考配置域名与端口

📣 判题端使用说明

启动方式

A. 网页端进入后台首页,即可点击相应按钮启动/重启/停止判题端

B. 通过终端命令启动判题端:bash /home/LDUOnlineJudge/judge/startup.sh

判题端配置

数据库连接信息、判题线程数、判题机名称等配置项均在项目根目录下文件.env

默认判题线程数为5,可根据服务器内存及性能适当调节

📄 整体架构

主要文件

routes/web.php:路由转发文件,定义了全站路由。

config/oj/:含本OJ自定义的配置文件。

app/Http/:后端控制器Controllers、中间件Middleware等程序。

resources/views/:前端html代码。

resources/lang/:网页文字语言文件。

public/:网页访问入口index.php,js、css文件和web插件。

storage/app/:保存题目数据、文件等。

storage/app/public/:保存静态文件(如图片)等。

软连接到public/storage供网页访问。

judge/:判题程序,与laravel框架无关。

install/:用于安装本OJ,与laravel框架无关。

.env.example:配置文件,含数据库连接信息、判题设置等。

复制为.env生效。

工作原理

Web前端使用bootstrap4、jquery,适配移动端和PC端。

网页端向用户展示题目等相关信息,用户可通过题目或竞赛途径上传自己的代码。

判题机启动时,轮询程序(judge/cpp/polling.cpp)将不停查询数据库,

收集未判的提交记录(提交编号),

然后开启子进程(judge/cpp/judge.cpp)判题(最多并行5个)。

对于每一个判题进程,主要步骤是:从数据库读取代码、编译、输入数据运行、

输出结果与正确结果对比(或者特判)、将判题结论写入数据库。

💻 本地二次开发

下载源码

git clone https://gitee.com/iamwinter/LDUOnlineJudge.git

# git clone https://github.com/iamwinter/LDUOnlineJudge.git

cd LUDOnlineJudge

准备环境

推荐phpstudy(含php、mysql、nginx等环境)。推荐IDE是PhpStorm。

数据库创建:LDUOnlineJudge/install/mysql/lduoj.sql。

nginx配置:LDUOnlineJudge/install/nginx/lduoj.conf。

也可以自行配置apache服务器。

填写配置文件

cp -rf .env.example .env

然后编辑.env文件,填写mysql连接信息。

初始化项目

mkdir -p storage/app/public # 新建前端静态文件存储目录

chmod -R 777 storage bootstrap/cache # linux必需!

composer install --ignore-platform-reqs # 下载依赖

php artisan storage:link # 将静态文件存储目录软连接到public/storage

php artisan key:generate # 必需,生成.env中的APP_KEY

php artisan optimize # 必需,加载并优化所有配置信息

预览主页。

打开浏览器访问http://localhost:port显示主页则表示部署成功,

其中port请替换为nginx配置的端口号。

开始愉快的编程。

🌏 Docker镜像发布

将本项目构建为docker镜像,务必在一个新建文件夹内操作(如./lduoj_build,结束后删除即可)

mkdir lduoj_build && cd lduoj_build

git clone https://gitee.com/iamwinter/LDUOnlineJudge.git

# git clone https://github.com/iamwinter/LDUOnlineJudge.git

docker build -f ./LDUOnlineJudge/install/docker/Dockerfile -t lduoj:local .

为镜像重命名(相当于复制了一份,请将用户名iamwinter替换)

docker tag lduoj:local iamwinter/lduoj:latest

将镜像上传到dockerhub

docker login

docker push iamwinter/lduoj:latest

💝 鸣谢

📜 开源许可

iamwinter/LDUOnlineJudge is licensed under the

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值