Loading

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,

地址如下:https://gitee.com/himitzh0730/hoj/tree/master/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端口号的防火墙)

nacos_pwd

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

posted @ 2026-09-15 10:01  Devinwon  阅读(11)  评论(0)    收藏  举报