DOMjudge8.2.3配置DOMserver(基于手动配置nginx+php-fpm,全网最详细,看完包会配)

前言


✨✨✨ 如果您对这篇文章感兴趣,可以点击【导航页 - 访客必读】一文囊括主页所有优质博客 查看更多优质内容,希望可以帮您解决更多问题~。 ✨✨✨


本篇文章系统讲解如何配置 DOMjudge 8.2.3 中的 DOMserver 。

目前最新版本为 8.3.1,但是由于存在各种bug,需要打各种补丁,所以对于新手来说不建议使用。
2023年icpc全部的icpc区域赛以及2024年icpc成都站均采用8.2.x版本,所以8.2.3并不过时,甚至可以称为 ”稳定的最新版(对于新手而言)。

主要有手动配置nginx+php-fpmDocker一键配置两种方式。

本文给出第一种 手动配置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
sudo apt install pkg-config debootstrap libcgroup-dev lsof procps \
	 gcc g++ pypy3 openjdk-17-jdk gfortran

知识点补充:反斜杠 (\) 是一个 换行符,用于让一条命令可以分成多行书写,因此上述命令直接复制粘贴即可,不会报错。

请注意,在配置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

2.下载DOMjudge安装包到指定目录下

在这里给出通过命令行下载和官网下载两种方式:(可能会有下载速率偏慢的问题)

不管哪种方式,我们这里都将其下载并保存到 /home/<username>/ 目录下,(当然也可以根据个人喜好自己再另行创建其他目录,不再赘述)

  • 命令行下载

此命令直接在 /home/<username>/ 目录下使用即可。

wget https://www.domjudge.org/releases/domjudge-8.2.3.tar.gz
  • 官网下载

可以直接通过官网下载链接进行下载。

3.解压安装包并进入解压后的目录

注意下列操作需要在DOMjudge保存目录下进行(我这里是 /home/<username>/

tar -zxf domjudge-8.2.3.tar.gz && cd domjudge-8.2.3/

4.安装DOMjudge

./configure --prefix=/opt/domjudge

此处--prefix=后边为安装目录,我这里采用官方手册的例子,将其安装到/opt 下的目录domjudge中(注意:不需要额外提前在/opt中创建domjudge目录)

make domserver
sudo make install-domserver

5.配置MariaDB 数据库

  1. 进入刚才DOMjudge安装目录下的/domserver/bin/目录中
cd /opt/domjudge/domserver/bin/
  1. 创建 DOMjudge 数据库凭证文件(如果尚不存在)
./dj_setup_database genpass

此凭证保存在 domjudge/domserver/etc/dbpasswords.secret 文件中。

若已存在该凭证,执行此命令也不会报错(检测到文件存在而不进行任何更改),如下图:

在这里插入图片描述

  1. 初始化数据库

命令格式为 dj_setup_database [-u <mysql admin user>] [-p <password>|-r] install,当无用户指定时,将读取刚才我们生成的凭证。(翻译自官方手册)

在这里,我选择默认安装,即不指定用户。

sudo ./dj_setup_database -s install

注意:一定要加上 -s,不然会报错 Access denied,如下图:

在这里插入图片描述

6.配置Web服务器

  1. 创建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

若想要恢复,可以通过sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default 来操作。

  1. 创建 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

测试Nginx配置是否正确:

sudo nginx -t

配置正确会出现如“configuration file test is successful”的提示,如下图:

在这里插入图片描述

重启Nginx服务:

sudo service nginx reload

7.测试

  1. 获取admin账号密码

注意该命令需要在domjudge/domserver/目录下执行:

sudo cat etc/initial_admin_password.secret
  1. 测试前端

用本地浏览器访问 http://127.0.0.1/domjudge/ 即可打开DOMjudge前端,如下图:

在这里插入图片描述

  1. 测试登陆

用刚才查询到的admin账户登陆。(用户名为admin

登陆成功,跳转到管理后台,如下图:

在这里插入图片描述

  1. 配置检查

点击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 '';

  2. 解除 location / 整个代码块的注释;

  3. 注释掉整个 location /domjudgelocation /domjudge/ 两个代码块。

最终效果如下图:

在这里插入图片描述

  1. 重启服务(上文6.4中已经详细讲解,此处不再赘述,只给出相应命令)
sudo service php8.1-fpm reload
sudo nginx -t
sudo service nginx reload
  1. 然后直接使用 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

  2. 取消最后一行关于php_admin_value[date.timezone]的注释,并修改时区为 Asia/Shanghai

  3. 根据 PHP settings 中的报错信息,修改相应字段名(单位是字节)

  4. 重启服务(上文6.4中已经详细讲解,此处不再赘述,只给出相应命令)

sudo service php8.1-fpm reload
sudo nginx -t
sudo service nginx reload
字段名意义备注
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. 根据 MySQL settings 中的报错信息,修改相应字段名(单位是字节)

  2. 若使用的是 mariadb数据库,则 /etc/mysql/mariadb.conf.d/50-server.cnf 文件也需要修改,将相应字段修改为与上述修改的一致即可:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

最终效果如图:

在这里插入图片描述

注意: mysql.cnf中要加 B,例如1024MB,而50-server.cnf中不需要。

  1. 重启数据库
sudo systemctl restart mysql
字段名意义备注
max_connections数据库允许的最大并发连接数
max_allowed_packet单个数据包的最大大小一般设置为题目测试数据文件大小的两倍
innodb_log_file_sizeInnoDB 存储引擎的事务日志文件大小一般设置为题目测试数据文件大小的十倍

配置方式2:Docker一键安装

教程

常见问题及对应解决方案

目前还没遇到过问题…

欢迎大家将自己遇到的问题回复在评论区中,我会积极解答并将其补充到博客中,大家共同进步!

手动配置-速通版(可以无脑复制粘贴)

  1. 安装必要的环境依赖
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
sudo apt install pkg-config debootstrap libcgroup-dev lsof procps \
	 gcc g++ pypy3 openjdk-17-jdk gfortran
  1. 下载DOMjudge安装包到指定目录下

/home/<username>/ 目录下

wget https://www.domjudge.org/releases/domjudge-8.2.3.tar.gz
  1. 解压安装包并进入解压后的目录

/home/<username>/目录下

tar -zxf domjudge-8.2.3.tar.gz && cd domjudge-8.2.3/
  1. 安装DOMjudge

./configure --prefix=/opt/domjudge
make domserver
sudo make install-domserver
  1. 配置MariaDB 数据库
cd /opt/domjudge/domserver/bin/
./dj_setup_database genpass
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
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -s /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/8.1/fpm/pool.d/domjudge.conf
sudo service php8.1-fpm reload
sudo nginx -t
sudo service nginx reload
  1. 测试及修改配置文件

见上文。(此部分不适合速通,建议看上文详细版教程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值