HydroOJ 从入门到入土(23)大版本5.0.0正式发布
hydro 5.0.0 大版本正式更新,新增了作业、比赛、训练的搜索功能,以及批量小组管理等等,修复了在线编辑器的右键功能,还有一些小 bug,值得尝试升级。本篇记录一下升级中出现的问题以及解决方法。
[!CAUTION]
5.0 的 api 变动很多,很多插件可能会直接爆炸。建议先备份,然后有条件的可以先在备用站尝试升级。
更新 node.js 的版本:
# 先查看 node 的版本,如果
node -v
# 备份当前包版本,以防以后需要降级
yarn global list > ~/backup/versions.txt
# 开始更新
nix-channel --update # 这一步可能会卡网络,不行多试几次
nix-env -iA nixpkgs.nodejs nixpkgs.yarn # yarn 需要更新环境,放心版本号不会更新,还是 1.22.22
更新HydroOJ 本体
yarn global upgrade-interactive --latest
pm2 restart hydrooj --update-env
static 机制更改
static 机制更改!每次都会覆盖刷新,所有缓存内容重启 hydrooj 之后全部被清除,以下方法全部失效。
- 通过直接修改 ~/.hydro/static/theme-x.xx.x.css 文件的方式调整字体
- gzip / brotli 预压缩缓存节约带宽
- 题目编辑和题解区域的 monaco 默认字号大小
- 线编辑器(scratchpad)里边的默认字号
- 其他类似修改
具体源代码位置:packages/hydrooj/src/entry/worker.ts line 70-78
if (process.env.NODE_APP_INSTANCE === '0') {
const staticDir = path.join(os.homedir(), '.hydro/static');
await fs.emptyDir(staticDir); __清空__ `~/.hydro/static` 目录
// Use ordered copy to allow resource override
for (const f of Object.values(global.addons)) { //复制所有已安装的 addon 插件的 public 目录
const dir = path.join(f, 'public');
// eslint-disable-next-line no-await-in-loop
if (await fs.pathExists(dir)) await fs.copy(dir, staticDir);
}
其他注意事项:
插件兼容性
建议先用测试服务器做好兼容性测试,再备份后更新。
如果插件出现兼容性出问题,可以参考 @gtn1024 编写的 AI skill,让AI 根据这个修改。如果能用,希望能给原作者提 pr。
@gtn1024:
https://github.com/gtn1024/hydro-dev-skills 前阵子搞了个 hydro 开发的 skills 来着。上对 llm 写 Hydro 插件有一定帮助。可以尝试尝试。
同时让 LLM 搞了个 api reference 文档,可以尝试。内容不一定全对,不过大概率还是能用的 https://hydro-plugin-api-reference.pages.dev/meta/llm-txt.html
NodeJS 版本至少为 22
Hydro v5 要求 NodeJS 版本至少为 22 , 使用
nix-channel --update && nix-env -iA nixpkgs.nodejs
更新 。
Hydro v5 为大版本更新,内含数据库表结构调整,升级后无法回退至旧版本,建议升级前进行备份。
沙箱不工作 System Error Checker returned with status 127.
HydroJudge 新版本依赖 awk 指令,可通过
nix-env -iA nixpkgs.gawk && pm2 restart hydro-sandbox
安装,安装后重启沙盒。
MongoDB 漏洞
mongodb全版本出现漏洞 建议各位立刻从防火墙直接关闭 27017 端口的外部访问
解决方案:
- 备份系统(快照)
- 查看当前安装的 mongodb 版本: mongod --version
- 关闭 mongodb: pm2 stop mongodb
- 更新 channel: nix-channel --update
- 根据你的 mongodb 版本在下方选择大版本相同的,覆盖安装:
nix-env -iA hydro.mongodb4
nix-env -iA hydro.mongodb5
nix-env -iA hydro.mongodb6
nix-env -iA hydro.mongodb7 - 确认新安装的是以下版本之一:4.4.30, 5.0.32, 6.0.27, 7.0.28
- 启动 mongodb: pm2 start mongodb --update-env
- 重启 Hydro: pm2 restart hydrooj
评测返回显示:Wrong Answer 0[object Object]
5.0.2~5.0.3出现,过两天就会修复。临时修复手段(2026.6):
hydrooj patch 98538cafd7c02d8495a2d40d521122e676a8268f
Python 默认版本调整为 3.13
hydro 5 默认是 Python3.13,所以如果之前装了很多包,控制面板里的配置得修改一下,环境变量需要修改.
PYTHONPATH=/lib/python3.1x/site-packages
修改完了要 pm2 重启所有 hydro 开头的服务
另外,xeger 和 cyaron 目前在 hydro 的 nix channel上仅提供 3.13 版本。
Breaking API change
- vjudge: 使用 vjudge.mount 表替代 domain.mount
- judge: breaking: 不再支持在 checker 等的编译阶段读取选手代码
- core: 强制要求使用 inject 声明插件依赖
- core: 移除旧版本 bus 调用
- core: 移除 global.Hydro.service
- core: 移除 global.Hydro.ui.template
- core: 移除 global.Hydro.lib
- core: 移除 String.prototype.translate (使用 ctx.i18n.translate)
- core: 升级至 Mongo Driver 6
- core: 移除 registerResolver, registerValue, registerUnion (使用 ctx.api.resolver/...)
- core: 移除 paginate, rank (使用 ctx.db.paginate, ctx.db.ranked)
- core: 移除 setting.yaml
- core: oauth: 改为使用 ctx.oauth.provide() 注册

浙公网安备 33010602011771号