首页 > 其他分享 >DOMjudge8.2.3配置DOMserver(基于Docker一键配置,全网最详细,看完包会配)

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

时间:2025-01-14 22:04:41浏览次数:3  
标签:容器 domjudge sudo 包会配 MYSQL Docker mariadb DOMjudge8.2 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. 测试及修改配置文件

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

标签:容器,domjudge,sudo,包会配,MYSQL,Docker,mariadb,DOMjudge8.2,docker
From: https://blog.csdn.net/qq_73162098/article/details/145145690

相关文章

  • FastGPT及大模型API(Docker)私有化部署指南
    FastGPT及大模型API(Docker)私有化部署指南​​经过优化,在不影响FastGPT功能的情况下,大幅降低了部署的设备配置要求,仅需1c1h即可正常部署使用。官方要求配置:​​优化后的实际占用情况:运行内存仅需370M(测试学习场景下)​​官方推荐部署容器:​pg​......
  • 无法联网怎么在docker中安装Ribbitmq
    如果无法连接互联网,无法在Docker中安装RabbitMQ。但是,您可以使用本地镜像或者手动下载RabbitMQ的Docker镜像并进行安装。以下是使用本地镜像的步骤:从可以上网的计算机上拉取RabbitMQ的官方Docker镜像:dockerpullrabbitmq:3-management然后,使用dockersave命令将镜像保存为tar......
  • 使用Nexus搭建Docker仓库
    一、背景Nexus之前已支持了nuget,由于docker仓库和前面几个存在比较大的差异,所以我特此记录下走过的坑。希望能对后来者有所帮助~~(当然,docker私有仓库,大多数是推荐使用harbor,因为我这里的某些历史原因,就沿用nexus)二、建立仓库依次建立代理仓库、私有仓库、组合仓库。需要注意......
  • docker 部署clickhouse
    clickhouse部署mkdir-p/home/data/clickhouse/datamkdir-p/home/data/clickhouse/confmkdir-p/home/data/clickhouse/logmkdir-p/home/data/clickhouse/client-confchmod-R777/home/data/clickhouse/dockerrun--rm-d--name=clickhouse--ulimitnofile=262144:2......
  • 如何修改 Docker 和 Docker Compose 默认占用的网段
    在使用Docker和DockerCompose进行容器化部署时,Docker默认会为容器分配一个私有网段(通常是172.17.0.0/16)。然而,在某些情况下,这个默认网段可能会与现有的网络环境冲突,导致网络连接问题。为了避免这种情况,我们可以手动修改Docker和DockerCompose的默认网段。本文将介绍......
  • ubuntu22.04系统Docker安装
    1、配置docker源#AddDocker'sofficialGPGkey:apt-getupdateapt-getinstallca-certificatescurlinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg-o/etc/apt/keyrings/docker.ascchmoda+r/etc/apt/keyrings......
  • CKA | Docker容器技术概述
    往期文章推荐【新版】容器&Kubernetes认证管理员(CKA)课程介绍k8s-CKS认证课程介绍【K8s】Kubernetes词汇表什么是Docker容器?3个管理多k8s集群实用工具K8S-CKA课程试听:Container概述CKA课程|Docker容器技术概述 今日分享内容CKA第一节课  目录1......
  • DevOps 企业级 CI/CD 实战 —— 整合 GitLab+Jenkins+Harbor+Docker 实现代码全自动化
    前言随着AI人工智能、云计算、Docker、K8S等容器技术等的发展,DevOps得到了广泛的应用和推广,CI/CD(持续集成/持续部署)等概念不断深化和完善。CI/CD是现代软件开发中的重要实践,CI(ContinuousIntegration,持续集成)强调开发人员频繁地将代码集成到共享仓库,并且每次集成都......
  • docker无法下载镜像,更换镜像仓库
     {"registry-mirrors":["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi",......
  • 【docker】docker desktop换国内源时 apply按钮为灰色or换源失败 解决方法
    配docker环境时复制进去国内镜像源后,发现apply按钮为灰色,点不了,如下图解决方法:往下滑,找到下图圈住的选项打勾再回到DockerEngine界面,发现可以点apply按钮了在文本框中添加"registry-mirrors":["http://mirrors.ustc.edu.cn", "http://mirror.azure.cn"]......