Hcode OJ部署、维护、更新
系统部署
自行搜索查阅文档
前端修改
- 仅修改图标
如果仅仅只是修改前台logo、管理后台logo和favicon.ico,那么操作如下:
修改docker-compose.yml,在hoj-frontend模块中的volumes中添加如下:
注意:冒号前面的是你主机实际存储图片文件的路径,主要是确定是否需要修改这个;冒号后面的是映射的docker容器内的文件路径,不要修改!!!
例如:/usr/share/nginx/html/assets/img/logo.a0924d7d.png这个不要修改,主要修改./logo.png,确定图片文件的路径即可!
- ./logo.a0924d7d.png:/usr/share/nginx/html/assets/img/logo.a0924d7d.png
- ./backstage.8bce8c6e.png:/usr/share/nginx/html/assets/img/backstage.8bce8c6e.png
- ./favicon.ico:/usr/share/nginx/html/favicon.ico
logo.a0924d7d.png为前台导航栏左边的logo,backstage.8bce8c6e.png为后台侧边导航栏上方的logo,favicon.ico为小图标
注意——这里有hash值,就是形如中间的backstage.8bce8c6e.png部分,不然会找不到。
原因如下:
Logo文件名的Hash值与你的HOJ版本不匹配
很多教程写死了 logo.a0924d7d.png,但不同HOJ版本的文件名hash是不同的!如果版本不对,你挂载的路径在容器内不存在,会出现两种情况:
- Docker把它当成目录挂载而不是文件,导致Nginx访问异常
- 挂载成功但原路径文件不存在,logo显示破损,但通常不会导致服务不可用
正确做法:先进入运行中的前端容器确认真实文件名:
# 先启动不挂载自定义logo的原始版本,进入容器查看真实文件名
docker exec -it hoj-frontend sh
ls /usr/share/nginx/html/assets/img/ | grep -E "logo|backstage"
你会看到类似 logo.xxxxxx.png 和 backstage.xxxxxx.png,这才是你当前版本真正的文件名!
图片文件需放在与docker-compose.yml同个目录下,或者提供绝对路径也可。
修改保存完成,使用docker compose up -d重启hoj-frontend即可,前端浏览器有缓存,可以刷新浏览器或者换别的浏览器进行查看!
- 自定义前端
直接下载 hoj-vue,
修改后,使用npm run build,生成一个dist文件夹,结构如下:
dist
├── index.html
├── favicon.ico
└── assets
├── css
│ ├── ....
├── fonts
│ ├── ....
├── img
│ ├── ....
├── js
│ ├── ....
....
....
将 dist文件夹复制到服务器上某个目录下,比如 /hoj/www/html/dist,然后修改docker-compose.yml,在 hoj-frontend 模块中的 volumes 中增加一行 - /hoj/www/html/dist:/usr/share/nginx/html (冒号前面的请修改为实际的路径),然后 docker compose up -d 即可。
数据备份
- 单体部署
请到~/hoj-deploy/standAlone的目录下,即是与docker-compose.yml的文件同个目录下,该目录下有个叫hoj的文件夹,里面的文件夹介绍如下:
hoj
├── file # 存储了上传的图片、上传的临时题目数据、markdown引用的文件等文件
├── judge # 存储了每个提交题目的评测过程产生的数据
├── log # 存储了hoj-backend项目的运行日志
├── testcase # 存储了题目的评测数据
└── data
├── mysql
│ ├── data # 存储了MySQL数据库的数据
├── redis
│ ├── data # 存储了redis产生的快照数据
那么,如果需要备份,只需将该hoj文件夹复制一份即可,在新的机器上重新部署新的hoj的时候,将该文件夹放置与docker-compose.yml一个目录下,使用docker compose up -d即可启动恢复原来的数据。
注意:在新机器上启用备份的数据的操作顺序如下:
1,先将hoj文件夹先复制到~/hoj-deploy/standAlone目录里面(保证该目录无hoj文件夹,干净!)
2,然后修改.env文件的配置,主要是Redis,Nacos,MySQL等的密码配置,与原先备份hoj文件夹时的老机器的配置一致!
3,最后再使用docker compose up -d启动!
- 分布式部署
(略)
密码修改
如何修改MySQL、Redis、Nacos的密码?
-
在部署HOJ之前,想修改默认的密码
部署之前指的是还没执行docker compose up -d命令,在./hoj-deploy/standAlone目录中还未有hoj文件夹(hoj文件夹的介绍)时,可以先修改.env文件里面对应各种的默认密码,保存后再执行docker compose up -d启动HOJ -
在部署HOJ之后,想修改已设置的密码
1,无数据时
没有重要的数据,可以直接删除在./hoj-deploy/standAlone目录中hoj文件夹,然后修改.env文件里面对应各种的默认密码,保存后再执行docker compose up -d启动HOJ
2,有数据时
不能直接删除hoj文件夹,那么操作如下:
如果修改Redis的密码:
只需修改.env文件中的REDIS_PASSWORD配置,docker restart hoj-redis重新启动hoj-redis即可生效。
如果修改MySQL的密码:
需要进入到hoj-mysql容器进行修改,操作如下
(1)进行hoj-mysql容器
docker exec -it hoj-mysql bash
(2)输入对应的mysql密码,进入mysql数据库
注意:-p 后面跟着数据库密码例如hoj123456
mysql -uroot -p数据库密码
(3)成功进入后,执行以下命令
mysql> use mysql;
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql> ALTER user 'root'@'%' IDENTIFIED BY '新的数据库密码' PASSWORD EXPIRE NEVER;
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新的数据库密码';
mysql> FLUSH PRIVILEGES;
(4) 两次exit 退出mysql和容器。
(5)修改.env文件中的MYSQL_ROOT_PASSWORD的密码为新的数据库密码。
(6)重启所有HOJ的容器:docker compose restart。
如果修改Nacos的密码
需要登录到Nacos控制台进行修改,操作如下,
(1)浏览器中访问http://ip:8848/nacos,然后输入.env文件中默认设置的账号密码,即NACOS_USERNAME和NACOS_PASSWORD参数进行登录。(记得打开服务器8848端口号的防火墙)

(2)点击页面右上角的用户名,选择修改密码,在弹出的弹窗中输入新密码确认修改即可!
(3)到服务器上修改.env文件中的NACOS_PASSWORD的密码为新的Nacos密码。
(4)重启所有HOJ的容器:docker compose restart。

浙公网安备 33010602011771号