前言
✨✨✨ 如果您对这篇文章感兴趣,可以点击【导航页 - 访客必读】一文囊括主页所有优质博客 查看更多优质内容,希望可以帮您解决更多问题~。 ✨✨✨
本篇文章系统讲解如何配置 DOMjudge 8.2.3 中的 DOMserver 。
目前最新版本为 8.3.1
,但是由于存在各种bug,需要打各种补丁,所以对于新手来说不建议使用。
2023年icpc全部的icpc区域赛以及2024年icpc成都站均采用8.2.x
版本,所以8.2.3
并不过时,甚至可以称为 ”稳定的最新版(对于新手而言)。
主要有手动配置nginx+php-fpm和Docker一键配置两种方式。
本文给出第一种 手动配置nginx+php-fpm
方法的详细教程。(文末也给出了速通版教程)
第二种方法我也写了详细教程,链接在这里。
Docker配置起来比较简单,但是可能会有打印机无法识别的问题,
因此如果不需要配置打印机的话,可以采用Docker配置方式,否则强烈建议采用 ”手动配置nginx+php-fpm“ 的方法。
本文基于Ubuntu22.04
,以下所有操作,请使用一个 非 root
账户 且 属于 sudoers
组(即该账户可以使用 sudo
命令) 的账户来进行。
对于不同的系统,本文使用到的对应命令可能不同,需要大家结合具体的系统来进行操作,博客有任何错误或者大家有任何问题,都可以直接在评论区留言~
如果我的博客成功解决了您的问题,烦请一件三连 (▽),不胜感激!
配置方式1:手动配置nginx+php-fpm
1.安装必要的环境依赖
下面分别是 nginx+php-fpm 和 mariadb数据库 的相关依赖:
sudo apt install libcgroup-dev make acl zip unzip mariadb-server nginx \
php php-fpm php-gd php-cli php-intl php-mbstring php-mysql \
php-curl php-json php-xml php-zip composer ntp
- 1
- 2
- 3
sudo apt install pkg-config debootstrap libcgroup-dev lsof procps \
gcc g++ pypy3 openjdk-17-jdk gfortran
- 1
- 2
知识点补充:反斜杠 (\
) 是一个 换行符,用于让一条命令可以分成多行书写,因此上述命令直接复制粘贴即可,不会报错。
请注意,在配置Web服务器上,DOMjudge官方手册中采用的 apache2
,但是由于其在处理高并发场景的能力上低于 nginx
,因此本篇教程 采用nginx
。(目前国内各大icpc比赛也是采用的nginx)
若您已经按照官方手册配置了 apache2
,可以按照下列方式进行彻底卸载:
sudo apt-get autoremove apache2 -y
sudo apt-get remove apache* -y
sudo apt-get --purge remove apache-common -y
sudo apt-get --purge remove apache -y
sudo find /etc -name "*apache*" |xargs rm -rf
sudo rm -rf /var/www
sudo rm -rf /etc/libapache2-mod-jk
sudo dpkg -l |grep apache2|awk '{print $2}'|xargs dpkg -P
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.下载DOMjudge安装包到指定目录下
在这里给出通过命令行下载和官网下载两种方式:(可能会有下载速率偏慢的问题)
不管哪种方式,我们这里都将其下载并保存到 /home/
目录下,(当然也可以根据个人喜好自己再另行创建其他目录,不再赘述)
- 命令行下载
此命令直接在 /home/
目录下使用即可。
wget https://www.domjudge.org/releases/domjudge-8.2.3.tar.gz
- 1
- 官网下载
可以直接通过官网下载链接进行下载。
3.解压安装包并进入解压后的目录
注意下列操作需要在DOMjudge保存目录下进行(我这里是 /home/
)
tar -zxf domjudge-8.2.3.tar.gz && cd domjudge-8.2.3/
- 1
4.安装DOMjudge
./configure --prefix=/opt/domjudge
- 1
此处--prefix=
后边为安装目录,我这里采用官方手册的例子,将其安装到/opt
下的目录domjudge
中(注意:不需要额外提前在/opt
中创建domjudge
目录)
make domserver
- 1
sudo make install-domserver
- 1
5.配置MariaDB
数据库
- 进入刚才DOMjudge安装目录下的
/domserver/bin/
目录中
cd /opt/domjudge/domserver/bin/
- 1
- 创建 DOMjudge 数据库凭证文件(如果尚不存在)
./dj_setup_database genpass
- 1
此凭证保存在 domjudge/domserver/etc/
的 dbpasswords.secret
文件中。
若已存在该凭证,执行此命令也不会报错(检测到文件存在而不进行任何更改),如下图:
- 初始化数据库
命令格式为 dj_setup_database [-u
,当无用户指定时,将读取刚才我们生成的凭证。(翻译自官方手册)
在这里,我选择默认安装,即不指定用户。
sudo ./dj_setup_database -s install
- 1
注意:一定要加上 -s
,不然会报错 Access denied,如下图:
6.配置Web服务器
- 创建
DOMjudge Nginx
配置符号链接
sudo ln -s /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
- 1
- 删除默认的
Nginx
配置文件符号链接
默认的 Nginx
配置文件通常包含一个简单基本的 Nginx
配置。删除它可以避免与 DOMjudge
配置 的冲突。
sudo rm -f /etc/nginx/sites-enabled/default
- 1
若想要恢复,可以通过sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
来操作。
- 创建
DOMjudge PHP-FPM
配置符号链接
首先查询一下自己系统中安装了的php版本,可用php -v
命令,如下图:
将下列命令中的8.1
替换为您系统中的版本。
sudo ln -s /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/8.1/fpm/pool.d/domjudge.conf
- 1
- 重启服务
重启php服务:(注意将命令中的8.1
替换为您系统中php的版本)
sudo service php8.1-fpm reload
- 1
测试Nginx配置是否正确:
sudo nginx -t
- 1
配置正确会出现如“configuration file test is successful”的提示,如下图:
重启Nginx服务:
sudo service nginx reload
- 1
7.测试
- 获取admin账号密码
注意该命令需要在domjudge/domserver/
目录下执行:
sudo cat etc/initial_admin_password.secret
- 1
- 测试前端
用本地浏览器访问 http://127.0.0.1/domjudge/ 即可打开DOMjudge前端,如下图:
- 测试登陆
用刚才查询到的admin账户登陆。(用户名为admin
)
登陆成功,跳转到管理后台,如下图:
- 配置检查
点击config checker,
然后把所有标红的栏目,按照提示信息进行修改即可。(具体如何修改见本教程第8条)
8.修改配置文件
8.0 前言(修改配置必看)
修改完配置后,一定要重启服务才会成效。
8.1 实现使用ip访问前端(即不需要加 /domjudge
)
sudo nano /opt/domjudge/domserver/etc/nginx-conf-inner
- 1
-
将
set $prefix /domjudge;
修改为set $prefix '';
-
解除
location /
整个代码块的注释; -
注释掉整个
location /domjudge
和location /domjudge/
两个代码块。
最终效果如下图:
- 重启服务(上文6.4中已经详细讲解,此处不再赘述,只给出相应命令)
sudo service php8.1-fpm reload
sudo nginx -t
sudo service nginx reload
- 1
- 2
- 3
- 然后直接使用 http://127.0.0.1 即可访问DOMjudge前端。
8.2 [config checker] - PHP settings 修改
注意:将下列命令中的 8.1
修改为您系统中php的版本。
sudo nano /etc/php/8.1/fpm/pool.d/domjudge.conf
- 1
-
根据机器内存,设置合理的
pm.max_children
值 -
取消最后一行关于
php_admin_value[date.timezone]
的注释,并修改时区为Asia/Shanghai
-
根据 PHP settings 中的报错信息,修改相应字段名(单位是字节)
-
重启服务(上文6.4中已经详细讲解,此处不再赘述,只给出相应命令)
sudo service php8.1-fpm reload
sudo nginx -t
sudo service nginx reload
- 1
- 2
- 3
字段名 | 意义 | 备注 |
---|---|---|
pm.max_children | 同时运行的最大 PHP 进程数量 | 根据domserver实际承载量和机器内存综合决定,一般 每 1 GB 内存设置 40 个进程 |
php_admin_value[memory_limit] | 每个请求使用的最大内存 | 一般对应于题目的内存限制 |
php_admin_value[upload_max_filesize] = 256M | 单个上传文件的最大大小 | 一般限制单个程序或者测试数据的大小 |
php_admin_value[post_max_size] | 所有 POST 请求的总数据大小 | 一般限制单个程序或者上传题目时压缩包的大小 |
php_admin_value[max_file_uploads] | 可以上传的最大文件数量 | 一般限制测试数据测试点的数量 |
php_admin_value[date.timezone] | 服务器时区 | 修改为 Asia/Shanghai |
8.3 [config checker] - MySQL settings 修改
sudo nano /etc/mysql/conf.d/mysql.cnf
- 1
- 若为首次配置MySQL,请将该文件(
mysql.cnf
)修改为下列格式
[mysqld]
max_connections = 1000
max_allowed_packet = 1024MB
innodb_log_file_size = 4096MB
- 1
- 2
- 3
- 4
-
根据 MySQL settings 中的报错信息,修改相应字段名(单位是字节)
-
若使用的是
mariadb
数据库,则/etc/mysql/mariadb.conf.d/50-server.cnf
文件也需要修改,将相应字段修改为与上述修改的一致即可:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
- 1
最终效果如图:
注意: mysql.cnf
中要加 B
,例如1024MB,而50-server.cnf
中不需要。
- 重启数据库
sudo systemctl restart mysql
- 1
字段名 | 意义 | 备注 |
---|---|---|
max_connections | 数据库允许的最大并发连接数 | |
max_allowed_packet | 单个数据包的最大大小 | 一般设置为题目测试数据文件大小的两倍 |
innodb_log_file_size | InnoDB 存储引擎的事务日志文件大小 | 一般设置为题目测试数据文件大小的十倍 |
配置方式2:Docker一键安装
教程。
常见问题及对应解决方案
目前还没遇到过问题…
欢迎大家将自己遇到的问题回复在评论区中,我会积极解答并将其补充到博客中,大家共同进步!
手动配置-速通版(可以无脑复制粘贴)
- 安装必要的环境依赖
sudo apt install libcgroup-dev make acl zip unzip mariadb-server nginx \
php php-fpm php-gd php-cli php-intl php-mbstring php-mysql \
php-curl php-json php-xml php-zip composer ntp
- 1
- 2
- 3
sudo apt install pkg-config debootstrap libcgroup-dev lsof procps \
gcc g++ pypy3 openjdk-17-jdk gfortran
- 1
- 2
- 下载DOMjudge安装包到指定目录下
在 /home/
目录下
wget https://www.domjudge.org/releases/domjudge-8.2.3.tar.gz
- 1
- 解压安装包并进入解压后的目录
在 /home/
目录下
tar -zxf domjudge-8.2.3.tar.gz && cd domjudge-8.2.3/
- 1
- 安装DOMjudge
./configure --prefix=/opt/domjudge
- 1
make domserver
- 1
sudo make install-domserver
- 1
- 配置
MariaDB
数据库
cd /opt/domjudge/domserver/bin/
- 1
./dj_setup_database genpass
- 1
sudo ./dj_setup_database -s install
- 1
- 配置Web服务器
涉及php的地方需要注意版本号,例如下列命令中的8.1
(可以php -v
查询php的版本)
sudo ln -s /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
- 1
sudo rm -f /etc/nginx/sites-enabled/default
- 1
sudo ln -s /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/8.1/fpm/pool.d/domjudge.conf
- 1
sudo service php8.1-fpm reload
- 1
sudo nginx -t
- 1
sudo service nginx reload
- 1
- 测试及修改配置文件
见上文。(此部分不适合速通,建议看上文详细版教程)
评论记录:
回复评论: