记一次修复 Hydro 502 异常 (如何保留数据重置Hydro OJ)

故障现象

我们最近搭建了一个Hydro OJ。搭建完成后偶然在网上发现了一个fps样式的题包,遂尝试导入。
首先是按照官方文档,执行安装fps-importer的指令。

yarn global add @hydrooj/fps-importer
hydrooj addon add @hydrooj/fps-importer

完成后,重启hydrooj。

pm2 restart hydrooj

令人在意的是,重启完成后就再也无法进入OJ了,一直提示502。

解决方案

尝试重启hydrooj,重启服务器,卸载插件后再重启,均无果。
尝试pm2 log,发现一直报127.0.0.1:8888 Connection Refused.
但其实平台应该是运行在80端口的。
各种排查无果,于是尝试备份服务器数据的情况下重置OJ。
先进行数据备份:

hydrooj backup

备份完成后留存数据包备用。
根据官方文档 的说明,执行如下指令:

pm2 stop mongodb
rm -rf /data/db /data/file
mkdir /data/db /data/file
pm2 start mongod
sleep 3
db_password=$(cat /dev/urandom | head -n 10 | md5sum | head -c 20)
echo "db.createUser({
  user: 'hydro',
  pwd: '$db_password',
  roles: [
    { role: 'readWrite', db: 'hydro' }
  ]
})" >/tmp/createUser.js
mongo 127.0.0.1:27017/hydro /tmp/createUser.js
echo "{\"host\":\"127.0.0.1\",\"port\":\"27017\",\"name\":\"hydro\",\"username\":\"hydro\",\"password\":\"$db_password\"}" >~/.hydro/config.json
pm2 stop mongod
pm2 del mongod
pm2 start mongodb
pm2 restart all
pm2 save

完成后打开OJ网页测试,可正常访问。
于是恢复备份的数据:

hydrooj restore <备份包位置>

至此,修复工作完成。大部分数据得以保留。
不得不说,备份是个很实用的功能。

类似文章

一条评论

  1. 更新一下吧,报错
    “`
    127.0.0.1:8888 Connection Refused.
    “`
    的原因是因为hydro其实是运行在8888端口上的,80端口是一个自带的反代。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注