在服务器上离线部署judge0日志
·
离线部署docker
首先下载离线安装包:Index of linux/static/stable/
将安装包拷贝到目标服务器上
在主机上解压文件:
tar -xvzf docker-26.1.4.tgz #解压完之后的文件会放到当前目录中的docker目录中 #递归的赋予docker目录中文件可执行权限 sudo chmod 755 -R docker sudo cp docker/* /usr/bin/
配置docker服务:
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --selinux-enabled=false --default-ulimit nofile=65536:65536 ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
赋予docker服务配置文件docker.service执行权限
sudo chmod +x /etc/systemd/system/docker.service
启动docker服务:
#加载systemctl配置 sudo systemctl daemon-reload #设置开机自启动 sudo systemctl enable docker.service #启动docker服务 sudo systemctl start docker #检查docker状态 sudo systemctl status docker #查看docker版本 docker -v
自定义docker运行目录:
#配置docker服务自定义设置 sudo mkdir -p /etc/docker sudo mkdir -p /data/app/dockerWork sudo vim /etc/docker/daemon.json
在文件中添加下述内容:
{
"data-root": "/data/dockerData",#填入自己的目录
}
更改后执行:
sudo systemctl daemon-reload sudo systemctl restart docker docker info #输出查看Root Dir
出现的问题:exec: "fuse-overlayfs": executable file not found in $PATH
解决办法:安装fuse-overlayfs
#安装yun-utils
sudo yum install -y yum-utils
#在联网的机器中下载rpm
mkdir -p /tmp/fuse-overlayfs && cd /tmp/fuse-overlayfs
yumdownloader --resolve --destdir=. fuse-overlayfs
#将下载好的包拷贝到目标服务器,并在目录下执行
sudo rpm -Uvh --force *.rpm
#验证安装
fuse-overlayfs --version
#过程可能出现错误:依赖检测失败:
libfuse3.so.3()(64bit) 被 fuse-overlayfs-0.7.2-6.el7_8.x86_64 需要
libfuse3.so.3(FUSE_3.0)(64bit) 被 fuse-overlayfs-0.7.2-6.el7_8.x86_64 需要
libfuse3.so.3(FUSE_3.2)(64bit) 被 fuse-overlayfs-0.7.2-6.el7_8.x86_64 需要
#使用下述命令继续下载缺失包
yumdownloader --resolve fuse3 fuse3-libs
离线安装docker compose
#下载安装包 https://github.com/docker/compose/releases #或者 wget https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 #复制到离线服务器上 chmod +x docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 docker-compose #将文件放到Docker CLI插件默认目录中 mkdir -p ~/.docker/cli-plugins mv docker-compose ~/.docker/cli-plugins/docker-compose chmod +x ~/.docker/cli-plugins/docker-compose #或者放到系统级插件目录 sudo mkdir -p /usr/local/lib/docker/cli-plugins sudo mv docker-compose /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose #验证安装 docker compose version
部署docker出现问题:当前用户无法访问docker守护进程的Unix socker文件
docker ps -a permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
解决方案:
#查看 socket 文件的权限: ls -l /var/run/docker.sock #正常情况是 srw-rw---- 1 root docker 0 Jul 25 22:13 /var/run/docker.sock #如果组不是 docker,或没有 rw- 权限,执行: sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock #将当前用户添加到docker组 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
离线部署Judge
首先在联网机器上准备好judge0的镜像和代码
#克隆judge0项目 git clone https://github.com/judge0/judge0.git cd judge0 #下载镜像 docker compose -f docker-compose.yml pull #导出镜像 docker save -o judge0_images.tar judge0/judge0:latest postgres:16.2 redis:7.2.4 #拷贝镜像到离线机器 导入 docker load -i judge0_images.tar
在judge目录中执行
docker-compose up -d
然后就能看到启动的容器,不出意外的话就能访问judge0的api了
测试
curl http://localhost:2358/languages
部署遇到的问题
[ghips@cugsat11 DZ01]$ docker load -i judge0_images.tar dd5242c2dc8a: Loading layer 119.2MB/119.2MB 6f1c84e6ec59: Loading layer 17.11MB/17.11MB b52c1c103fae: Loading layer 17.85MB/17.85MB e6d60910d056: Loading layer 149.9MB/149.9MB f63773c65620: Loading layer 520.2MB/520.2MB c8e492f75d96: Loading layer 502.4MB/502.4MB c0b285f105a3: Loading layer 139.1MB/139.1MB 94f42f282973: Loading layer 355.6MB/355.6MB a01174846de8: Loading layer 839.9MB/839.9MB 93ef8e607237: Loading layer 330.6MB/330.6MB 96bdb92d8d86: Loading layer 14.15MB/14.15MB a977fbf9c987: Loading layer 225.9MB/225.9MB 74fd0441fe80: Loading layer 2.084GB/2.084GB 706af213e51e: Loading layer 669.6MB/669.6MB 2dc66f1cc28d: Loading layer 76.08MB/76.08MB write /var/lib/docker/vfs/dir/c001c39b7e4fb4d7b256da603489645fb69c5da681836004af90e325c5c9bd22/usr/local/ghc-8.8.1/lib/ghc-8.8.1/Cabal-3.0.0.0/HSCabal-3.0.0.0.o: no space left on device
上述没空间了,可以切换docker运行目录。
问题2:
[ghips@cugsat11 DZ01]$ sudo docker load -i judge0_images.tar dd5242c2dc8a: Loading layer 119.2MB/119.2MB 6f1c84e6ec59: Loading layer 17.11MB/17.11MB b52c1c103fae: Loading layer 17.85MB/17.85MB e6d60910d056: Loading layer 149.9MB/149.9MB f63773c65620: Loading layer 520.2MB/520.2MB c8e492f75d96: Loading layer 502.4MB/502.4MB c0b285f105a3: Loading layer 139.1MB/139.1MB 94f42f282973: Loading layer 355.6MB/355.6MB a01174846de8: Loading layer 839.9MB/839.9MB 93ef8e607237: Loading layer 330.6MB/330.6MB 96bdb92d8d86: Loading layer 14.15MB/14.15MB a977fbf9c987: Loading layer 225.9MB/225.9MB 74fd0441fe80: Loading layer 2.084GB/2.084GB 706af213e51e: Loading layer 669.6MB/669.6MB 2dc66f1cc28d: Loading layer 76.08MB/76.08MB d4b5a090f908: Loading layer 138.3MB/138.3MB 6abc0d38bb19: Loading layer 9.417MB/9.417MB c3cba357858f: Loading layer 354.5MB/354.5MB 1f8a2cdb429f: Loading layer 335.2MB/335.2MB 8e405162993d: Loading layer 40.47MB/40.47MB ddc736983f7e: Loading layer 352.2MB/352.2MB 7265bf73ba48: Loading layer 152MB/152MB 363040cff96d: Loading layer 216.9MB/216.9MB 597b3b3b8563: Loading layer 434.7kB/434.7kB 8323279740f2: Loading layer 152.2MB/152.2MB beb324aeeb51: Loading layer 2.868MB/2.868MB 19f87ad64a26: Loading layer 13.05MB/13.05MB 0e9bb4586e45: Loading layer 41.63MB/41.63MB 5fae1865d171: Loading layer 2.953MB/2.953MB d85c09b6bff0: Loading layer 1.228GB/1.228GB b040914a6c33: Loading layer 61.36MB/61.36MB e546454d5a85: Loading layer 56.46MB/56.46MB unlinkat /etc/logcheck/ignore.d.server: invalid argument
将 Docker 存储驱动切换成 vfs可以解决上述问题
"storage-driver": "vfs"
问题3:
[ghips@cugsat11 judge0]$ curl http://localhost:2358/languages curl: (56) Recv failure: Connection reset by peer
这个问题暂时不知道如何解决,可能是系统内核版本太低又或者是其他问题。
但是我采取曲线救国策略,利用下述命令可以执行:
docker exec judge0-server-1 curl http://localhost:2358/languages
更多推荐

所有评论(0)