故障现象
我们最近搭建了一个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 <备份包位置>
至此,修复工作完成。大部分数据得以保留。
不得不说,备份是个很实用的功能。
文章评论
更新一下吧,报错
```
127.0.0.1:8888 Connection Refused.
```
的原因是因为hydro其实是运行在8888端口上的,80端口是一个自带的反代。