Installation.zh CN - houyhlouis/LLMOJ GitHub Wiki
安装与端口配置
环境要求
- 操作系统: Ubuntu 24.04 或 26.04(amd64),运行在普通虚拟机或物理机上。不支持受限的 Docker 或 LXC 容器。
- 系统功能: systemd 254 或更高版本,cgroup v2 并启用 cpu、memory 和 pids 控制器。
- 在本机评测: LLMOJ 可用的 CPU 至少 2 个,内存至少 256 MiB。首次构建时有 8 GiB 内存会更顺利。
- 磁盘空间: 完整安装需要 30 GiB 空闲空间,仅网页安装需要 10 GiB。
- 网络: 首次安装需要从 Ubuntu 软件源、GitHub、npm、Node.js 和 Go 下载;完整安装还需要下载 Docker 镜像和评测沙箱文件。
完整安装已在 Ubuntu 24.04 上测试。Ubuntu 26.04 可以通过安装器的检查,但尚未完成一次全新的完整安装测试。
新安装默认位于 /opt/LLMOJ。默认目录还是 /opt/LibreOJ 时安装的站点保持原位置;对它们运行安装器时请加上 --prefix /opt/LibreOJ。
安装
curl -fsSL https://raw.githubusercontent.com/houyhlouis/LLMOJ/main/install.zh-CN.sh -o /tmp/llmoj-install.zh-CN.sh
sudo bash /tmp/llmoj-install.zh-CN.sh --repository houyhlouis/LLMOJ
如果没有 curl,先执行 sudo apt-get update && sudo apt-get install -y curl ca-certificates。需要英文提示时改用 install.sh。
脚本会下载仓库的指定提交,并记录安装的仓库和提交。它不会登录 GitHub。私有仓库请自行下载源码,并在其中运行 sudo bash deploy/install.zh-CN.sh。
安装器会询问:
- 安装模式:完整站点或仅网页;
- 监听地址和 HTTP 端口;
- 安装目录和站点名称;
- 用户在浏览器中访问的地址。在 NAT 后或云服务器上,请填写真实的公网 IP 或域名,因为自动检测到的可能是内网地址;
- 完整站点还会询问 Docker 源,首次安装时还会询问评测槽数量。
参数
| 参数 | 说明 |
|---|---|
--repository OWNER/REPO |
要安装的公开仓库(下载脚本必填) |
--ref BRANCH_OR_TAG_OR_COMMIT |
要安装的分支、标签或提交,默认 main(仅下载脚本) |
--prefix PATH |
安装目录,默认 /opt/LLMOJ;必须是不含空格和特殊字符的绝对路径。每台服务器只能安装一个站点 |
--role all|web |
all(默认)为完整站点;web 为不含评测和本机 AI 任务的网站 |
--port NUMBER |
HTTP 端口,默认 80。2002、2020、13306、16379、19000 和 19001 为内部使用 |
--listen ADDRESS |
0.0.0.0(默认,所有地址)或 127.0.0.1(仅本机,用于反向代理之后) |
--public-url ORIGIN |
用户访问的地址,例如 https://oj.example.com,不含路径。默认根据服务器 IP 和端口推测。它本身不会配置 HTTPS |
--site-name TEXT |
站点名称,默认 LLMOJ,1~60 个字符 |
--judge-slots NUMBER |
评测槽数量(仅完整站点);0 或省略表示自动 |
--docker-source URL |
Docker 软件包源,默认 https://download.docker.com |
--docker-mirrors URL[,URL] |
Docker Hub 镜像源;默认不设置,保留服务器现有配置 |
--yes、--non-interactive |
不提问,使用给出的参数,其余用默认值 |
--interactive |
即使通常不提问也进行询问(需要终端) |
--check |
只检查服务器是否满足要求 |
--plan |
只显示将要执行的步骤 |
--help、-h |
显示帮助 |
--check 和 --plan 仍会把源码下载到临时目录,但不会安装任何东西。--repository 和 --ref 属于下载脚本,deploy/install.zh-CN.sh 不接受它们。
示例:
sudo bash /tmp/llmoj-install.zh-CN.sh --repository houyhlouis/LLMOJ \
--yes --port 8080 --public-url http://oj.example.com:8080 --site-name "AI Practice"
如何选择评测槽数量
每个评测槽同一时间运行一个程序;槽越多,能并行评测的提交越多。默认值同时也是最大值:
CPU 数减一,与内存(MiB)除以 256,两者取较小值(且不超过 511)
这样留出一个 CPU 给网站的其他部分,并为每个槽分配 256 MiB 内存。例如内存足够时,4、8、16 个 CPU 分别对应 3、7、15 个槽。只有 1 个 CPU 或内存不足 256 MiB 的服务器不能评测:请使用 --role web 安装,或增加资源。
安装器只在首次生成 judge.yaml 且没有传入 --judge-slots 时询问。直接回车(或输入 0)使用自动值,也可以输入更小的数。再次运行安装器会保留已有的数量。之后如需修改,例如增加了 CPU 或内存,请使用扩缩容命令;用不同的 --judge-slots 重新运行安装器不会修改已有安装。
防火墙、HTTPS 与其他系统修改
安装器不会修改防火墙或云安全组,请自行放行站点端口。数据库、Redis、MinIO、后端及其监控指标只在本机监听,不要让外部访问它们。在配置 HTTPS 之前,站点使用普通 HTTP。
为了 Redis,安装器会设置 vm.overcommit_memory=1 并保存到 /etc/sysctl.d/99-libreoj-redis.conf(已有同名文件时不覆盖)。MinIO 可能提示“服务器故障会导致数据不可用”:它运行在单台服务器上,因此请另外做好备份。
安装完成后
安装成功后,终端会显示 admin 用户名、随机生成的 32 位密码,以及同样保存了它们的文件路径 config/admin-credentials.json(仅 root 可读)。请妥善保管,不要公开。再次运行安装器时,只有密码仍然有效才会显示。
使用以下命令管理服务:
sudo systemctl status libreoj.target
sudo systemctl restart libreoj.target
sudo systemctl stop libreoj.target
sudo systemctl disable libreoj.target
sudo journalctl -u libreoj-backend -u libreoj-judge -u libreoj-nginx -n 100 --no-pager
之后修改设置请参阅配置总览;服务、端口、邮件和存储见安装后运维。安装新版本请使用升级器,而不是安装器。
安装失败时
解决报告的问题后,用与第一次相同的参数重新运行安装器:目录、模式、站点名称、访问地址、监听地址、端口、评测槽数量和 Docker 源。不要通过删除配置或安装状态来绕过参数不一致。
MariaDB 初始化失败与安全重试
如果 MariaDB 初始化时对数据目录报告 Errcode: 13 Permission denied,而该目录确实属于 mysql,原因很可能是 AppArmor:它阻止 root 在 MariaDB 切换到 mysql 用户之前读取该目录。修改所有者或权限无法解决。
安装器从一开始就以 mysql 用户运行数据库程序来避免这个问题(见 initialize-mariadb.py)。AppArmor 保持开启,只额外允许访问本站点自己的目录。数据库先在私有的暂存目录中初始化,由一个关闭了网络的临时服务器检查,然后才移动到正式位置。
已有的数据库会被检查并保留:如果它不完整或已损坏,安装器会停止,而不会删除、覆盖或重设密码。失败的尝试会保留暂存数据和日志。请阅读安装器指出的日志,解决原因后用相同参数重新运行。不要删除数据库、密钥或安装状态;修复或恢复不完整的数据库之前请先备份。
该工具是安装流程的一部分,不要对正在运行的站点执行它。