一个多平台的在线评测系统,使用 PHP 和 C++ 构建。
- 使用 C++ 作为后端语言,加快评测机的运行速度。
- 使用流行的 MySQL/MariaDB 作为数据库开发语言,简单易上手。
- 使用 PHP 作为前端开发语言,网站功能更加强大。
- 由 Editor.md 项目稍作改造而成的 Markdown 可视化编辑器,对原项目中出现的部分语法解析错误进行修正,并调整 Latex 解析格式,题目迁移更加简便。
- 支持多平台多架构进行项目搭建,甚至一台破旧手机也能够完成本项目的部署。
- 支持 LemonLime 软件中 Special Judge 源文件的格式,同样支持 Testlib.h 格式。
- PHP 模块化编写,让网站更易容易扩展。
- 支持文件输入输出和标准输入输出两种输入输出方式。
- 更新中......
目前 LYOJ 理论支持的系统有: Windows10+ x64
,Ubuntu20.04+ amd64
,Ubuntu20.04+ arm64
,NOI Linux 2 amd64
,Debian 10 amd64
,Debian 10 arm64
,CentOS 8 amd64
,CentOS 8 arm64
,......
实际开发者测试成功的系统有: Windows10 x64
,Ubuntu20.04 amd64
,Ubuntu20.04 arm64
,NOI Linux 2 amd64
,CentOS 8 amd64
。其中由于 Linux 各发行版之间的差异,CentOS 8 amd64
只有手动部署的情况下能够部署成功。
以上未经测试过的系统并不代表无法部署,可能只是开发者家里没有相应的设备而未完成测试,请根据自己设备情况进行测试。
必要软件包: PHP8.0+,MySQL/MariaDB,nginx/apache/IIS,g++,MySQL Connector,libjson。其中网站端无论是使用 nginx/apache/IIS 都能运行。
对于 Windows 用户,所有必须软件都会发布在 Release 界面里。
对于 Ubuntu/NOI Linux 2/Debian 用户,您只需要输入 sudo apt install mariadb-server mariadb-client nginx g++ libmysqlclient-dev libjsoncpp-dev -y
就能安装除 PHP8.0+ 以外的必要软件包。至于 PHP8.0+,在每个版本发布时的 Release 界面都有着已经配置好了的 PHP8.0+,下载对应系统版本的压缩包,解压后开箱即用。
对于 CentOS 用户,很抱歉由于软件源比较古老,除 nginx 以外的所有软件包都无法符合能够正常运行的最低版本要求,需要您自行更换非官方软件源或自行编译所有必要软件包。
可选软件包: Python2,Python3,openjdk8,openjdk11,openjdk13,openjdk16,openjdk17,PHP7.4,fpc。
我们提供了针对于 Ubuntu 用户的一键安装脚本,对于 Ubuntu 用户,您只需要输入
sudo bash -c "$( curl -L https://raw.fastgit.org/LittleYang0531/lyoj/dev/script/install.sh )"; # 国内用户输入这行
sudo bash -c "$( curl -L https://raw.githubusercontent.com/LittleYang0531/lyoj/dev/script/install.sh )"; # 国外用户输入这行
并按照脚本内的提示完成安装即可。
除 Ubuntu 以外的用户均只能通过手动安装来进行安装。
备注:
- 我们正在准备制作适用于 CentOS 和 ArchLinux 的一键安装脚本,但由于机子有限,开发进程可能会延后。
- Windows 的安装程序应该会比 CentOS 和 ArchLinux 先发布。
- 由于 CentOS 软件源过于古老,一键安装脚本不一定能制作成功。
对于 Windows 用户,我们并没有提供一键配置选项,请依据下面的手动配置选项进行配置
对于 Ubuntu 用户,拉取完完整的项目包后,进入项目主目录,输入以下命令后,按照提示内容输入信息。等到出现 Success 后,配置完成。
root@root:~/lyoj$ sudo g++ judgemgr.cpp -o /usr/bin/judgemgr -lmysqlclient -ljsoncpp -O2
root@root:~/lyoj$ judgemgr build
配置好系统依赖环境后,拉取源码包,并进入源码主目录。
-
建立项目的主文件夹,对于 Linux,项目主文件夹为
/etc/judge/
,对于 Windows,项目主文件夹为C://judge/
-
在 MySQL/MariaDB 中建立一个新数据库,并输入
source init.sql
初始化数据库。 -
退出数据库,数据库的名字以及 MySQL/MariaDB 的相关信息填入到配置文件
config.json
中的mysql
数组下。 -
复制源码中的 web 文件夹和 crontab 文件夹到项目的主文件夹中。
-
配置网站端的配置文件,具体配置方法见各网站端官网上的教程。
-
在项目主文件夹中建立 contest,problem,spjtemp,tmp 这四个文件夹。
-
在
announcement.md
和email.html
中分别写入网站公告和邮件格式,并将这两个文件复制项目主文件夹中。 -
将邮箱地址,邮箱访问码,邮件服务器地址等信息填入
config.json
中的controllers > register > configs
数组下,复制config.json
到项目主目录下。 -
编译源码 spjtemp 目录下所有的 C++ 源文件,并将它们放到项目主文件夹下的 spjtemp 文件夹下,编译命令为
g++ A.cpp -o A(.exe)
,其中 A 为源文件名,并且括号中的内容只有在 Windows 下方可添加。 -
编译
judge.cpp
。- 对于 Windows 用户,若使用 Release 中的软件包进行配置,编译指令为
g++ judge.cpp -g -o judge.exe -lpsapi -lmysql -ljson -pthread
,否则请遵循各软件包提供的编译参数进行编译。 - 对于 Ubuntu 用户,编译指令为
sudo g++ judge.cpp -g -o /usr/bin/judge -lmysqlclient -ljsoncpp -lpthread
- 对于 CentOS 用户,请根据网上所提供的各软件包的编译参数进行编译。
- 对于 Windows 用户,若使用 Release 中的软件包进行配置,编译指令为
-
输入
sudo judge
或./judge.exe
来运行后台评测机程序。 -
进入网页端,按照提示进行配置即可。
对于一键配置的用户,只需要输入 judgemgr update
便可完成所有更新进程。
对于手动配置的用户,您需要保存所有数据,重新拉取源码包进行配置。
感谢以下的第三方开源组件对本项目的帮助 (排名不分先后):
以及曾经使用过的 luogu-dev/markdown-palettes (虽然最后由于功能太弱放弃使用了)
本项目基于 AGPL v3 开源。
在您部署 LYOJ 时,最少需要保留底部的 Powered by lyoj
字样,其中的 lyoj
字样需指向 https://github.com/LittleYang0531/lyoj
。
若您对源码做出修改,同样需要以 AGPL v3 开源,您可以以 Powered by lyoj, Modified by xxx
格式在页脚注明。
鉴于 Mirai 处的 不和谐事件 对此项目做如下声明:
- 项目开源不代表开发者有义务为您提供服务。
- 在提问前请先阅读《提问的智慧》。
- 若有必要,开发者有权对您停止任何技术支持。
如果您对以上条目感到不适,建议您停止使用本项目。