DOMjudge8.2.3配置DOMserver(基于Docker一键配置,全网最详细,看完包会配)

前言


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


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

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

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

本文给出第二种 Docker一键配置 方法的详细教程。(文末也给出了速通版教程)
第一种方法我也写了详细教程,链接在这里

Docker配置起来比较简单,但是可能会有打印机无法识别的问题,
因此如果不需要配置打印机的话,可以采用Docker配置方式,否则强烈建议采用 ”手动配置nginx+php-fpm“ 的方法。

本文基于Ubuntu22.04,以下所有操作,请使用一个 非 root 账户 且 属于 sudoers 组(即该账户可以使用 sudo 命令) 的账户来进行。

对于不同的系统,本文使用到的对应命令可能不同,需要大家结合具体的系统来进行操作,博客有任何错误或者大家有任何问题,都可以直接在评论区留言~

如果我的博客成功解决了您的问题,烦请一件三连 (▽),不胜感激!

配置方式1:手动配置nginx+php-fpm

教程

配置方式2:Docker一键安装

如果安装过程中速度过慢,可以考虑换源。
可能会涉及到Linux系统换源Docker换源Docker内的Linux系统换源,具体可以参考相应的教程。(均已给出超链接)

1.部署MariaDB数据库

sudo docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=[passwd1] -e MYSQL_USER=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=[passwd2] -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000

容器名字为 dj-mariadb ,MySQL 创建用户 domjudge ,密码对应 [passwd2] ,root 密码对应 [passwd1] ,容器时区设置为 Asia/Shanghai ,创建数据库 domjudge ,容器外部数据库端口设置为 13306 ,数据库最大同时连接数为 1000以上信息根据自己需求进行修改。

例如,两个密码均为123456:

sudo docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=123456 -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000

出现下图的提示,即为部署成功:

在这里插入图片描述

补充知识点: -it 参数将容器的标准输入输出附加到终端,让我们直接控制容器,因此需要 Ctrl + P, 然后 Ctrl + Q 从容器中分离,并且容器会继续运行在后台运行。

2. 部署DOMserver

sudo docker run --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=[passwd2] -e MYSQL_ROOT_PASSWORD=[passwd1] -p [容器对外端口]:80 --name domserver domjudge/domserver:[版本]

容器 link 到 dj-mariadb:mariadb ,容器 MySQL 主机地址设置为 mariadb ,容器名为 domserver ,容器时区设置为 Asia/Shanghai

MySQL 用户为 domjudge ,密码对应 [passwd2] ,root 密码对应 [passwd1]注意数据库密码需要一一对应(即这里的passwd1和passwd2与第一步”部署MariaDB数据库“设置的passwd1和passwd2一致)

通过访问 http://127.0.0.1:[容器对外端口]/ 来访问DOMjudge前端,设置为80 即可实现通过访问服务器ip直接访问到DOMjudge前端,

可以指定版本,如不指定则默认为 latest最新版,注意后期配置judgehost时需要与该版本一致。

例如,两个密码均为123456,且版本为 8.2.3

sudo docker run --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=123456 -e MYSQL_ROOT_PASSWORD=123456 -p 80:80 --name domserver domjudge/domserver:8.2.3

出现下图的提示,即为部署成功:

在这里插入图片描述

注意记录下红框内的信息,[passwd3] 是登录 admin 账号时所需要的密码,[passwd4] 是创建 judgehost 时所需的评测机账号的密码。

Initial admin password is [passwd3]
Initial judgehost password is [passwd4]

3.获取初始admin密码以及judgehost密码

  1. 第一种方法已经在上一步”部署DOMserver“的末尾给出

  2. 命令行获取

获取登录 admin 账号时所需要的密码:

sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret

获取创建 judgehost 时所需的评测机账号的密码:

sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/restapi.secret

4. 修改grub

  1. 打开相关文件
sudo nano /etc/default/grub
  1. 找到 GRUB_CMDLINE_LINUX_DEFAULT 并修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0"
  1. 更新
sudo update-grub
  1. 重启
reboot
  1. 检查测试
cat /proc/cmdline

出现下图即为成功:

在这里插入图片描述

5. 测试

  1. 测试前端

通过访问 http://localhost:[容器对外端口]/ 来访问DOMjudge前端,

由于我前期将容器对外端口设置为80,因此直接访问 http://127.0.0.1/ 即可,如下图:

在这里插入图片描述

  1. 测试登陆

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

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

在这里插入图片描述

  1. 配置检查

点击config checker,

在这里插入图片描述

然后把所有标红的栏目,按照提示信息进行修改即可。(具体见下文6.1)

在这里插入图片描述

6.修改配置文件

6.0 前言(修改配置必看)

由于我们采用Docker进行配置,所以修改具体配置时需要进入Docker容器内,常见命令格式如下:

# 查看容器列表
sudo docker ps -a
# 进入容器
sudo docker exec -it [容器名] bash
# 退出容器
exit
# 重启容器
sudo docker restart [容器名]
# 开启容器
sudo docker start [容器名]
# 停止容器
sudo docker stop [容器名]
# 删除容器
sudo docker remove [容器名]

6.1 [config checker] - MySQL settings 修改

1.进入容器内

sudo docker exec -it dj-mariadb bash

进入Docker内部后,默认是 root 用户,所以命令中不需要加 sudo

2.打开配置文件

nano etc/mysql/my.cnf 

Docker内初始不带有nano或vim,可以先 apt update ,然后通过 apt install 进行下载

3.修改

  • 若为首次配置MySQL,请将该文件(my.cnf)修改为下列格式
[mysqld]
innodb_log_file_size = 512M
max_allowed_packet = 128M
  • 根据 MySQL settings 中的报错信息,修改相应字段名(单位是字节)
字段名意义备注
max_connections数据库允许的最大并发连接数
max_allowed_packet单个数据包的最大大小一般设置为题目测试数据文件大小的两倍
innodb_log_file_sizeInnoDB 存储引擎的事务日志文件大小一般设置为题目测试数据文件大小的十倍

4.退出容器

exit

5.重启容器

sudo docker restart dj-mariadb

记得检查一下重启dj-mariadbdomserverjudgehosts是否还在正常工作。

常见问题及对应解决方案

目前还没遇到过问题…

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

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

  1. 部署MariaDB数据库

注意:需要自己设置命令中的[passwd1][passwd2]

sudo docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=[passwd1] -e MYSQL_USER=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=[passwd2] -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000
  1. 部署DOMserver

注意:

  • 命令中的[passwd1][passwd2]需要与第一步设置的一致;
  • 需要自己指定容器对外端口(指定为80可实现ip访问主页)
  • 需要自己指定版本号(后期配置judgehost需要与此版本号一致)
sudo docker run --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=[passwd2] -e MYSQL_ROOT_PASSWORD=[passwd1] -p [容器对外端口]:80 --name domserver domjudge/domserver:[版本]
  1. 获取初始admin密码以及judgehost密码

获取登录 admin 账号时所需要的密码:

sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret

获取创建 judgehost 时所需的评测机账号的密码:

sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/restapi.secret
  1. 修改grub

打开相关文件

sudo nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 并修改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0"

更新

sudo update-grub

重启

reboot

检查测试

cat /proc/cmdline
  1. 测试及修改配置文件

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值