众所周知,scnuoj
性能垃圾,支持的功能少还难以配置。但是没办法,生活还是要继续,性能和功能想解决还得费点时间。那就先解决难以配置的问题吧。
#debian/ubuntu
sudo apt install git -y
#centos/rehl
sudo yum install git -y
请参考这篇教程。
#debian/ubuntu
sudo apt install docker-compose -y
#centos/rehl
sudo yum install docker-compose -y
至此,环境配置已经完成
git clone https://github.com/scnu-socoding/scnuoj.git
将 MYSQL_ROOT_PASSWORD
的值更改为你想要的密码
将 dsn
修改为 mysql:host=mysql;dbname=scnuoj
将 username
修改为 root
password
修改为 你刚才设置的密码
将 OJ_USE_PTRACE
的值修改为 0
Tips: 这里修改的原因是 P trace 机制和 Docker 存在兼容性问题导致。Docker 里的 system call 的值貌似不固定(?)
同上
详情请根据 Caddy 官方文档。
可以选择本地打包或者直接拉取镜像。
首次运行需要安装 scnuoj
。
先在 /scnuoj
目录下运行:
docker-compose up -d --build
生成镜像需要时间,请耐心等待打包完成。
把 docker-compose.yaml 中的 build 改为对应的在线 image,然后运行
docker-compose up -d
运行成功后,进入 php
容器进行安装。
步骤如下:
首先,先使用
docker container ls
命令获取php
容器的CONTAINER ID
。然后,输入
docker exec -it 刚才获取的ID sh
进入容器。运行
./yii install
进行安装。根据提示输入管理员账号、密码和邮箱即可。如果提示权限不足则先执行
chmod +x yii
。输入
exit
退出容器。此时scnuoj
已经搭建完成。
接下来输入:
docker-compose down; docker-compose up -d
重启容器,即可提供服务。
容器化最大的好处就是迁移的时候十分方便。迁移时只需要输入 docker-compose down
在源服务器上停止服务。将整个文件夹打包迁移到新服务器上,重复第一步的环境配置,即可通过 docker-compose up -d
一键开启服务。
进入判题机容器,kill 掉原有的判题机进程,然后输入
./judge/dispatcher -o
./polygon/polygon -o
即可开启 oi 模式。如需关闭,重启容器即可。
如果出现权限问题,请在当前目录中运行
chown -R 1000:1000 *
如果出现迁移到 Docker 之后(非新装) special judge 无法运行正常判题,先参考上面的权限问题。如果还是无法解决,请进入 php 容器,进入 /var/www/html/judge/data
目录,运行
find . -type f -name "spj.cc" -exec sh -c '/usr/bin/g++ -fno-asm -std=c++14 -O2 {} -o $(dirname {})/spj -I /var/www/html/libraries' \;
重新编译所有题目的 special judge 。
由于关掉了 P trace 机制,可能会导致一些安全性问题。
建议对 judge 容器进行隔离,不要让其访问外部网络。使用 socket 连接的方式与数据库进行通信。
在 /judge/config.ini
以及 /polygon/config.ini
中注释掉 OJ_HOST_NAME
和 OJ_PORT_NUMBER
两行,并解除 OJ_MYSQL_UNIX_PORT
的注释。
同时确保 mysqld.sock
已经映射到了 judge
容器中。
同时防止 config.ini
文件被读取,可以将其权限设置为 root
用户所有的 600 文件 chmod 600 config.ini
。