Sign inSign up

tangramor/hustoj

By tangramor

Updated 5 months ago

HUSTOJ docker image without MySQL inside

Image
0

316

tangramor/hustoj repository overview

HUSTOJ Docker 部署指南

docker-compose.yml:

services:
  db:
    image: mysql:8.0
    container_name: hustoj-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: mysql_root_password   # 修改为强密码
      MYSQL_DATABASE: jol
      MYSQL_USER: hustoj
      MYSQL_PASSWORD: hustoj123                      # 与 hustoj 服务保持一致
    volumes:
      # MySQL 数据持久化
      - /home/hustoj/data/mysql:/var/lib/mysql
      # 首次启动自动执行的初始化脚本
      #- ./mysql-init:/docker-entrypoint-initdb.d:ro
    networks:
      - hustoj-net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-uhustoj", "-phustoj123", "--silent"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

  # ----------------------------------------------------------
  # HUSTOJ 主服务
  # ----------------------------------------------------------
  hustoj:
    image: tangramor/hustoj
    build:
      context: .
      dockerfile: Dockerfile
    container_name: hustoj-app
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      # 数据库连接(与 db 服务保持一致)
      DB_ROOT_PASS: mysql_root_password
      DB_HOST: db
      DB_PORT: "3306"
      DB_NAME: jol
      DB_USER: hustoj
      DB_PASS: hustoj123                             # 与 db 服务的 MYSQL_PASSWORD 保持一致
    ports:
      - "80:80"      # OJ Web 界面,可改为 "8080:80" 避免冲突
    volumes:
      # --------------------------------------------------------
      # 以下路径映射到宿主机,方便查看和修改
      # --------------------------------------------------------

      # 题目测试数据(最重要!一定要持久化)
      - /home/hustoj/data/judge-data:/home/judge/data

      # judge 配置文件(judge.conf 等)
      - /home/hustoj/data/judge-etc:/home/hustoj/etc

      # judge 运行日志
      - /home/hustoj/data/judge-log:/home/judge/log

      # Web 源码(如需直接修改 PHP 文件,取消注释)
      - /home/hustoj/data/web:/home/hustoj/src/web

      # 上传的文件(题目附件等)
      - /home/hustoj/data/web-upload:/home/hustoj/src/web/upload

      # nginx 日志
      - /home/hustoj/data/nginx-log:/var/log/nginx

      # hustoj 运行日志
      - /home/hustoj/data/hustoj-log:/var/log/hustoj

    networks:
      - hustoj-net

networks:
  hustoj-net:
    driver: bridge

快速开始

1. 修改密码(推荐)

编辑 docker-compose.yml,将以下两处密码改为强密码,并保持一致:

# db 服务
MYSQL_ROOT_PASSWORD: mysql_root_password       # ← 改这里
MYSQL_PASSWORD: hustoj123                      # ← 改这里

# hustoj 服务
DB_ROOT_PASS: mysql_root_password              # ← 与上面保持一致
DB_PASS: hustoj123                             # ← 与上面保持一致
2. 启动
# 启动
docker compose up -d

# 查看启动日志
docker compose logs -f hustoj
3. 访问 OJ

启动完成后,访问:

http://localhost/

首次访问请注册用户名 admin,系统会自动为其赋予管理员权限。


目录挂载说明

宿主机路径容器内路径说明
/home/hustoj/data/mysql/var/lib/mysqlMySQL 数据,必须持久化
/home/hustoj/data/judge-data/home/judge/data题目测试数据,必须持久化
/home/hustoj/data/judge-etc/home/hustoj/etcjudge.conf 等配置文件
/home/hustoj/data/judge-log/home/judge/logjudge 运行日志
/home/hustoj/data/web-upload/home/hustoj/src/web/upload题目附件上传目录
/home/hustoj/data/nginx-log/var/log/nginxnginx 日志
/home/hustoj/data/hustoj-log/var/log/hustojhustoj 系统日志
修改 Web 源码

如果需要直接修改 PHP 源码,取消 docker-compose.yml 中以下注释:

# - /home/hustoj/data/web:/home/hustoj/src/web

首次启动后,web 源码会自动同步到 /home/hustoj/data/web/


常用操作

# 启动服务
docker compose up -d

# 停止服务
docker compose down

# 查看日志
docker compose logs -f

# 进入 hustoj 容器
docker exec -it hustoj-app bash

# 进入 MySQL 容器
docker exec -it hustoj-db mysql -uhustoj -phustoj123 jol

# 重启 judged(在容器内)
docker exec hustoj-app pkill judged && docker exec hustoj-app judged &

端口说明

端口说明
80OJ Web 界面(可在 docker-compose.yml 中改为 8080:80

MySQL 端口不对外暴露,仅容器内部通信。如需访问 MySQL,可临时添加:

ports:
  - "3306:3306"

升级题目数据

将题目测试数据(data/ 目录格式)放入 /home/hustoj/data/judge-data/ 即可, 目录结构如下:

/home/hustoj/data/judge-data/
├── 1000/
│   ├── 1.in
│   └── 1.out
├── 1001/
│   ├── 1.in
│   └── 1.out
└── ...

常见问题

Q: 容器启动后 Web 显示数据库连接失败?
A: 等待约 30 秒让 MySQL 完全就绪,hustoj 启动脚本会自动等待数据库就绪后再启动。

Q: 题目提交后一直 Pending?
A: 查看 judged 日志:docker compose logs hustoj | grep judged

Q: 如何备份数据?
A: 直接备份 /home/hustoj/data/ 目录即可,包含 MySQL 数据和题目数据。

Tag summary

Content type

Image

Digest

sha256:69f84e606

Size

344.2 MB

Last updated

5 months ago

docker pull tangramor/hustoj