domjudge docker 部署并部署远程判题机

环境

主服务器 :

  • 阿里云
  • Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-72-generic x86_64)
  • 双核

另外一个判题服务器:

  • 华为云
  • Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-72-generic x86_64)
  • 单核

部署

1. 准备工作

1.1 更改参数

  • /etc/default/grub中的GRUB_CMDLINE_LINUX参数中添加一段内容cgroup_enable=memory swapaccount=1
  • image.png
  • 执行 grub-update
  • 重启服务器

1.2 安装 docker

安装
sudo apt install curl
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

启用
sudo systemctl enable docker
sudo systemctl start docker

换源

由于用的阿里服务器, 所以用的阿里源
替换 /etc/docker/daemon.json 为如下内容

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

重启
sudo systemctl daemon-reload
sudo systemctl restart docker

2. 部署

2.1 部署MariaDB

docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_USER=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000

2.2 部署DomServer

docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_ROOT_PASSWORD=rootpw -p 12345:80 --name domserver domjudge/domserver:latest
  • 其中 12345:80 中的 12345 可以指定为你想要的端口, 如 80 , 注意要将端口开放

执行完命令之后应该已经可以通过 ip地址访问你的 domjudge 了

  • 默认的用户名为 admin
  • 默认的密码通过以下命令查询
docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret

2.3 部署DomJudge(判题机)

注意 此处开始两台服务器有所不同

主服务器
docker run -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-0 --link domserver:domserver --hostname judgedaemon-0 -e DAEMON_ID=0 domjudge/judgehost:latest
docker run -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-1 --link domserver:domserver --hostname judgedaemon-0 -e DAEMON_ID=1 domjudge/judgehost:latest

这两条命令中有所不同的是

  • DAEMON_ID 代表 CPU 的第几个核心, 如 DAEMON_ID=0 则代表 CPU0 , 此处绝对不要超过 (1)(核心数-1) 否则报错了后会非常麻烦
  • --name judgehost-1 这是 docker 容器的名字, 不可以相同

最后, 在网页控制界面的 users  里将用户 judgehost 的密码改为 password 
这时应该已经有两个判题机, 并且都已经在运行了

另一个判题机

首先进入docker容器的终端

socker exec -it domserver /bin/bash

之后 换源(debian)(可选) , apt-get update , apt-get install vim(你想要的编辑器) 
在 docker 的交互界面中修改 /opt/domjudge/domserver/etc/restapi.secret , 首先你会看到

# Randomly generated on host 80693c983685, Wed Feb 19 07:43:20 UTC 2020
# Format: '<ID> <API url> <user> <password>'
default http://localhost/api    judgehost       uWttAwgXaAhH6G7W

在后面添加一行, 修改后:

# Randomly generated on host 80693c983685, Wed Feb 19 07:43:20 UTC 2020
# Format: '<ID> <API url> <user> <password>'
default http://localhost/api    judgehost       uWttAwgXaAhH6G7W
default http://主服务器ip地址/api    judgehost       uWttAwgXaAhH6G7W

之后 exit 退出 docker
执行

docker run -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-0 --link domserver:domserver --hostname judgedaemon-1 -e DAEMON_ID=0 -e DOMSERVER_BASEURL=http://ip地址/ domjudge/judgehost:latest

注意其中修改或添加的几个参数

  • --hostname judgedaemon-1 不能与主服务器的对应参数相同(其实我也没试过)
  • DOMSERVER_BASEURL=http://ip地址/

现在, 不出意外的话 domjudge 已经有 3 个判题机了, 并且都在运行了
image.png


常用的 docker 命令

  • docker ps 查看正在运行的容器
  • docker ps -a 查看所有容器
  • docker start/stop/restart 容器哈希值前n位 容器操作
  • docker rm 容器哈希值前n位
  • docker images 查看镜像
  • docker rmi 删除镜像
  • socker exec -it domserver /bin/bash 进入 docker容器的终端

官方镜像地址
CSL的博客
一篇 CSDN 博客


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

树的直径 下一篇