HOJ实战:从零部署到功能扩展的完整开发指南

张开发
2026/4/8 13:46:00 15 分钟阅读

分享文章

HOJ实战:从零部署到功能扩展的完整开发指南
1. 环境准备与基础部署在CentOS系统上部署HOJ在线判题系统宝塔面板是最便捷的选择。我实测过多次用宝塔可以省去80%的配置时间。首先确保你的服务器满足最低配置要求2核CPU、4GB内存、50GB硬盘空间。这个配置足够支撑中小规模的在线判题需求。安装宝塔面板只需要一行命令yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安装完成后记得在宝塔面板的安全组中放行以下端口80(HTTP)、443(HTTPS)、3306(MySQL)和8888(宝塔默认端口)。这里有个小技巧我建议把默认的8888端口改成其他不常见的端口号能有效减少被扫描的风险。接下来安装必要的运行环境Nginx 1.20MySQL 5.7PHP 7.4PM2管理器Docker管理器安装完这些基础组件后创建一个新的MySQL数据库字符集选择utf8mb4这个字符集支持完整的Unicode字符包括emoji表情。我遇到过学生提交代码时用了特殊符号导致乱码的问题utf8mb4能完美解决。2. HOJ核心组件安装与配置HOJ系统由三个核心组件构成前端、后端和判题服务。我建议按照这个顺序安装因为前端依赖后端API而后端又依赖判题服务。先下载最新的HOJ发行版解压后你会看到三个主要目录hoj-frontend基于Vue.js的前端项目hoj-backendSpring Boot后端项目hoj-judgeserver判题服务配置Nginx反向代理时有几点需要注意静态资源缓存设置要合理我一般设置图片/css/js缓存30天开启gzip压缩能显著提升加载速度WebSocket配置要正确否则实时判题结果无法推送到前端数据库连接配置在application.yml文件中这里有个坑要注意MySQL的时区设置。建议在连接字符串后加上?serverTimezoneAsia/Shanghai否则可能会遇到时间显示不正确的问题。3. 系统功能扩展实战HOJ的二次开发主要集中在前端组件和后端API两部分。以添加签到功能为例我来分享下具体实现步骤。首先在前端src/views目录下新建SignIn.vue组件这个组件需要显示签到日历记录连续签到天数显示签到奖励后端需要新增三个API接口/api/signin/check检查今日是否已签到/api/signin/do执行签到操作/api/signin/history获取签到历史数据库层面需要新建user_signin表包含字段id (主键)user_id (用户ID)sign_date (签到日期)continuous_days (连续签到天数)这里有个性能优化点签到记录会随时间增长建议按月分表存储比如user_signin_202307。我在实际项目中测试过百万级数据查询速度能提升5倍以上。4. Docker化部署与持续集成将定制化的HOJ系统打包成Docker镜像是团队协作的最佳实践。每个功能扩展完成后都应该生成新的Docker镜像。编写Dockerfile时要注意多阶段构建可以显著减小镜像体积。这是我的一个优化后的Dockerfile示例# 构建阶段 FROM maven:3.8-jdk-11 AS build COPY . /app WORKDIR /app RUN mvn clean package -DskipTests # 运行阶段 FROM openjdk:11-jre-slim COPY --frombuild /app/target/hoj-backend.jar /app.jar EXPOSE 8080 ENTRYPOINT [java,-jar,/app.jar]使用CI/CD工具自动化这个过程能节省大量时间。我通常用GitHub Actions配置如下关键步骤代码push触发构建运行单元测试构建Docker镜像推送到私有镜像仓库在测试服务器部署这套流程跑下来从代码提交到生产环境部署最快只要10分钟。特别提醒一点记得在CI配置中妥善保管你的Docker登录凭证我吃过泄露的亏。

更多文章