domjudge docker 部署并部署远程判题机
环境
主服务器 :
- 阿里云
- 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 
- 执行
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, 此处绝对不要超过 否则报错了后会非常麻烦--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 个判题机了, 并且都在运行了
常用的 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容器的终端
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!