Skip to content

hznuoj-dev/hznuoj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b386b75 · Mar 11, 2025
Mar 19, 2024
Nov 5, 2023
Dec 20, 2021
Dec 15, 2024
Dec 20, 2021
Jan 5, 2020
Mar 11, 2025
Mar 11, 2025
Mar 19, 2024
Mar 11, 2025
Jan 5, 2020
Mar 19, 2024
Mar 11, 2025

Repository files navigation

HZNUOJ

GitHub release

HZNUOJ 是基于 HUSTOJ 改造而来的,遵循 GPL 协议开源

部署指南

构建镜像

在仓库根目录下:

docker build -t hznuoj:latest -f docker/Dockerfile ./

等待 build 完成即可。

完成后 docker image ls,若有看到 hznuoj 的镜像即为成功。

如果不想 build,也可以直接拉取已经编译好的镜像

docker pull hznuoj/hznuoj:latest

其中,latest 表示 tag,可以指定 tag,比如 0.0.3

启动容器

DB

首先需要启动一个 DB,用 MySQL 或者 MariaDB 都可以,这里以 MySQL 5.7 为例:

docker run \
    -d \
    --restart=always \
    --name="mysql" \
    --hostname="mysql" \
    -e MYSQL_ROOT_PASSWORD=root \
    -e TZ=Asia/Shanghai \
    -p 3306:3306 \
    -v /var/docker-data/mysql-5.7/data:/var/lib/mysql \
    mysql:5.7 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci

然后可以使用本 repo 里面的 SQL 文件来创建库和表。

Web

docker run \
    -d -it \
    --name=hznuoj \
    --restart=always \
    -p 80:80 \
    -v /var/hznuoj/static.php:/var/www/web/OJ/include/static.php \
    -v /var/hznuoj/upload:/var/www/web/OJ/upload \
    -v /var/hznuoj/data:/var/hznuoj/data \
    hznuoj/hznuoj:latest
  • -p 80:80 表示把容器的 80 端口映射到宿主机的 80 端口,可自行修改
  • --name=hznuoj 表示指定容器的名字为 hznuoj
  • 路径挂载:
    • 因为有些文件或者目录是在容器运行过程中可能会有变动,所以我们需要把它们放在外部,然后 mount 到容器里面,不然的话,容器一重启,容器里面的文件都会恢复成初始状态
    • -v /var/hznuoj/static.php:/var/www/web/OJ/include/static.php 表示将宿主机上的 /var/hznuoj/static.php 文件挂载到容器内的 /var/www/web/OJ/include/static.php
      • 本 repo 下有一个 static.example.php,应该只需要改一下 DB 相关的变量,然后把文件 mount 到容器中,就可以用了
      • 需要注意的是,宿主机的部分是可以改动的
        • 比如,如果把 static.php 放在 /opt 路径下,那么可以写成 -v /opt/static.php:/var/www/web/OJ/include/static.php
      • 容器内的路径不要变动,而且也没有变动的必要
    • upload 目录是用户上传的文件内容,比如题面里面的图片
    • data 目录是题目数据的目录
    • 如果是想开发的话,可以把 repo clone 下来之后,把 web 目录 mount 进去,容器里的路径应该是 /var/www/web,然后就可以在容器外部修改 web 目录下的文件,你的改动就可以在容器中的实例实时生效了

然后访问 localhost:80 即可。

进入容器

docker exec -it hznuoj bash

使用教程

默认管理员账号为 admin/@Hznu666。

出题手册见 https://www.yuque.com/weilixinlianxin/zcf10d/yfk05w

优势

  • 更华丽的界面
  • 更灵活的权限管理
  • 支持多组样例
  • 有封装好的 Docker 镜像,一键部署

界面截图

首页

支持提交量和访问量的统计

index

榜单

重写过的的榜单

board

能点开查看每题的提交状况

board2

题目编辑界面

problem-edit

多样例支持

problem-edit

权限管理界面

细分的权限分配

privilege

发布

  • 将改动提交一个 PR
  • 在 PR 中,修改 VERSION 中的版本号,版本号要满足 vx.x.x 的格式,如果能满足 语义化版本 的话更好
  • 当 PR merge 到 master 的时候,如果 VERSION 里的版本号不存在于 git tag 中,那么会触发版本发布,会自动构建一个 docker image