文章目录
前言
本篇文章系统讲解如何配置 DOMjudge 8.2.3 中的 DOMserver 。
目前最新版本为 8.3.1
,但是由于存在各种bug,需要打各种补丁,所以对于新手来说不建议使用。
2023年icpc全部的icpc区域赛以及2024年icpc成都站均采用8.2.x
版本,所以8.2.3
并不过时,甚至可以称为 ”稳定的最新版(对于新手而言)。
主要有手动配置nginx+php-fpm和Docker一键配置两种方式。
本文给出第二种 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密码
-
第一种方法已经在上一步”部署DOMserver“的末尾给出
-
命令行获取
获取登录 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
- 打开相关文件
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
出现下图即为成功:
5. 测试
- 测试前端
通过访问 http://localhost:[容器对外端口]/
来访问DOMjudge前端,
由于我前期将容器对外端口设置为80,因此直接访问 http://127.0.0.1/ 即可,如下图:
- 测试登陆
用刚才查询到的admin账户登陆。(用户名为admin
)
登陆成功,跳转到管理后台,如下图:
- 配置检查
点击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_size | InnoDB 存储引擎的事务日志文件大小 | 一般设置为题目测试数据文件大小的十倍 |
4.退出容器
exit
5.重启容器
sudo docker restart dj-mariadb
记得检查一下重启dj-mariadb
后domserver
和judgehosts
是否还在正常工作。
常见问题及对应解决方案
目前还没遇到过问题…
欢迎大家将自己遇到的问题回复在评论区中,我会积极解答并将其补充到博客中,大家共同进步!
一键配置-速通版(可以无脑复制粘贴)
- 部署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
- 部署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:[版本]
- 获取初始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
- 修改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
- 测试及修改配置文件
见上文。(此部分不适合速通,建议看上文详细版教程)
标签:容器,domjudge,sudo,包会配,MYSQL,Docker,mariadb,DOMjudge8.2,docker From: https://blog.csdn.net/qq_73162098/article/details/145145690