DOMjudge的Docker安装 使用Nginx代理的配置方法
使用apt安装Docker、Nginx、Vim(用来修改Nginx配置文件)
apt update #更新一下,不然可能会报错
apt install docker -y
apt install nginx -y
apt install vim -y
使用
docker -v
查看一下Docker安装是否成功
Docker下载DOMjudge需要的镜像
MariaDB 数据库
docker pull mariadb
domserver Web服务
docker pull domjudge/domserver
judgehost 判题机
docker pull domjudge/judgehost
建议先修改Docker国内镜像源再下载
Docker中国区官方镜像:
https://registry.docker-cn.com
网易:
http://hub-mirror.c.163.com
ustc:
https://docker.mirrors.ustc.edu.cn
中国科技大学:
https://docker.mirrors.ustc.edu.cn
阿里云:
https://cr.console.aliyun.com/
创建或修改 /etc/docker/daemon.json 文件,修改为如下形式
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}
重启docker服务使配置生效
systemctl restart docker.service
镜像下载完成后使用以下命令创建启动容器
启动MariaDB数据库
docker run -d --name dj-mariadb -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_USER=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000
容器第一次创建后有参数“-d”会在后台运行
MYSQL_ROOT_PASSWORD=rootpw 数据库root用户的密码,可以修改
启动DOMserver
docker run --link dj-mariadb:mariadb -d -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_ROOT_PASSWORD=rootpw -p 8000:80 --name domserver domjudge/domserver:latest
命令中有对应的数据库的用户和密码,与修改有的一致就可以。
容器创建后会生成一个管理员的密码和一个判题机的密码,可以在其日志里查看
docker logs -t --since 10m 容器ID #查看该容器十分钟内的日志
此时访问主机的8000端口就可以看到domserver的Web页面了
三个判题机
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-0 --link domserver:domserver --hostname judgedaemon-0 -e CONTAINER_TIMEZONE=Asia/Shanghai -e JUDGEDAEMON_USERNAME=judgehost-0 -e JUDGEDAEMON_PASSWORD=judgehost-0 -e DAEMON_ID=0 domjudge/judgehost:latest
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-1 --link domserver:domserver --hostname judgedaemon-1 -e CONTAINER_TIMEZONE=Asia/Shanghai -e JUDGEDAEMON_USERNAME=judgehost-1 -e JUDGEDAEMON_PASSWORD=judgehost-1 -e DAEMON_ID=1 domjudge/judgehost:latest
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-2 --link domserver:domserver --hostname judgedaemon-2 -e CONTAINER_TIMEZONE=Asia/Shanghai -e JUDGEDAEMON_USERNAME=judgehost-2 -e JUDGEDAEMON_PASSWORD=judgehost-2 -e DAEMON_ID=2 domjudge/judgehost:latest
判题机用户名密码-e JUDGEDAEMON_USERNAME=judgehost-0 -e JUDGEDAEMON_PASSWORD=judgehost-0
需要先登录管理员添加用户和修改密码(用户类型是judgehost)。
设置好后基本的DOMjudge就安排好了。
DOMjudge代理配置
首先在主机上配置Nginx的代理服务,找到/etc/nginx/sites-available/default,使用Vim打开
vim /etc/nginx/sites-available/default #可直接打开default
在这里是直接修改的Nginx的默认配置,其实这个文件会在/etc/nginx下的nginx.conf中被引用
·····前边内容省略(这是default文件的一部分)
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
#只需要插入一下三行
location /domjudge/ {
proxy_pass http://127.0.0.1:8000/; # 创建容器的时候用了8000端口
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
·····后边也是
然后是容器里domserver的Nginx的配置
使用以下命令进入容器
docker exec -it 容器ID bash
修改Nginx的配置文件用的是Vim
以下操作是在容器内进行的(也就是使用容器的终端,对容器执行的操作)
apt update # 更新
apt install vim # 安装Vim
使用Vim编辑/etc/nginx/snippets/domjudge-inner
经过多次尝试,其实修改①就可以
修改完保存。执行
nginx -s reload # Nginx重载