宝塔面板+CentOS 7.9保姆级教程:从零部署HOJ在线判题系统(含域名HTTPS配置)
宝塔面板+CentOS 7.9保姆级教程:从零部署HOJ在线判题系统(含域名HTTPS配置)
对于想要搭建私有在线编程练习平台的个人开发者或小型团队来说,HOJ(Hust Online Judge)是一个功能完善且易于二次开发的开源判题系统。本文将手把手教你如何通过宝塔面板这一可视化工具,在CentOS 7.9系统上完成从环境准备到域名配置的全流程部署。
1. 环境准备与基础配置
在开始部署之前,我们需要确保服务器满足HOJ运行的基本要求。推荐使用至少2核CPU、4GB内存的云服务器,系统盘空间不小于50GB。如果你的服务器配置较低,可能需要调整部分参数以获得更好的性能。
首先,登录你的CentOS 7.9服务器,执行以下命令更新系统并安装必要组件:
yum update -y yum install -y wget curl git unzip接下来,我们需要安装宝塔面板。宝塔提供了极其友好的Web界面,大大简化了服务器管理流程。运行以下命令一键安装最新版宝塔面板:
curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh安装完成后,终端会显示面板访问地址、用户名和初始密码。记下这些信息,然后在浏览器中访问面板地址。首次登录后,系统会提示你安装推荐的运行环境套件。
提示:出于安全考虑,强烈建议在首次登录后立即修改默认的宝塔面板端口和密码。
在宝塔面板的"软件商店"中,我们需要安装以下组件:
- Nginx 1.20+
- MySQL 5.7+
- PHP 7.4(虽然HOJ主要使用Java,但部分功能可能需要PHP支持)
- PM2管理器(用于管理Node.js进程)
- Docker管理器(HOJ的判题服务基于Docker运行)
2. HOJ核心服务部署
HOJ系统由多个组件构成,包括前端界面、后端API服务和判题服务。我们将分步骤安装这些组件。
2.1 数据库配置
首先在宝塔面板中创建HOJ所需的数据库:
- 进入"数据库"选项卡,点击"添加数据库"
- 填写数据库名(如
hoj),用户名和密码 - 字符集选择
utf8mb4以支持完整的Unicode字符 - 权限设置为"本地服务器"
创建完成后,我们需要导入HOJ的初始数据库结构。下载HOJ官方提供的SQL文件:
wget https://gitee.com/himitzh0730/hoj/raw/master/hoj.sql -O /www/backup/hoj.sql然后通过宝塔的"数据库"管理界面导入这个SQL文件到刚才创建的数据库中。
2.2 后端服务部署
HOJ的后端基于Spring Boot开发,我们可以直接从GitHub或Gitee获取最新代码:
cd /www/wwwroot git clone https://gitee.com/himitzh0730/hoj.git克隆完成后,进入项目目录配置后端服务:
cd hoj/backend cp application.yml.example application.yml nano application.yml在配置文件中,需要修改以下关键参数:
spring.datasource部分:填写之前创建的数据库连接信息judge.token:设置一个安全的判题服务通信令牌email部分:配置SMTP邮件服务(用于用户注册和密码找回)
保存配置后,使用Maven构建项目:
mvn clean package -DskipTests构建完成后,生成的jar包位于target目录下。我们可以使用宝塔的"PM2管理器"来管理这个Java服务:
- 在PM2管理器中点击"添加项目"
- 项目路径选择
/www/wwwroot/hoj/backend/target/hoj-backend.jar - 启动方式选择"Java"
- 点击"添加"启动服务
2.3 前端服务部署
HOJ的前端基于Vue.js开发,部署前需要先安装Node.js环境。在宝塔面板中:
- 打开"PM2管理器"
- 切换到"Node版本"选项卡
- 安装Node.js 14.x或更高版本
然后进入前端目录进行构建:
cd /www/wwwroot/hoj/web npm install npm run build构建完成后,生成的静态文件会放在dist目录中。我们需要在宝塔面板中创建一个新的网站来托管这些文件:
- 进入"网站"选项卡,点击"添加站点"
- 填写域名(如果没有域名可暂时使用服务器IP)
- 根目录指向
/www/wwwroot/hoj/web/dist - 其他设置保持默认
3. 判题服务配置
HOJ的判题服务运行在Docker容器中,这是确保代码执行环境隔离和安全的关键组件。首先确保宝塔的Docker管理器已正确安装并运行。
然后创建判题服务的配置文件:
mkdir -p /etc/hoj/judge nano /etc/hoj/judge/docker-config.yml配置文件内容示例:
judge: server: name: judge-server host: localhost port: 8088 token: your_secure_token_here # 需与后端配置一致启动判题服务容器:
docker run -d \ --name hoj-judge \ -v /etc/hoj/judge:/config \ -v /var/hoj/judge:/judge \ -p 8088:8088 \ --restart always \ registry.cn-shanghai.aliyuncs.com/hoj/judge在宝塔面板的"安全"选项卡中,确保以下端口已放行:
- 80/443(HTTP/HTTPS)
- 8080(后端API)
- 8088(判题服务)
- 3306(MySQL,建议仅限本地访问)
4. 域名与HTTPS配置
为你的HOJ系统配置域名和HTTPS可以提升安全性和专业性。假设你已经有一个域名并解析到了服务器IP。
在宝塔面板中:
- 进入"网站"选项卡,找到之前创建的HOJ站点
- 点击"设置",选择"SSL"
- 选择"Let's Encrypt"免费证书
- 勾选要申请的域名和"强制HTTPS"选项
- 点击"申请"
证书申请成功后,我们需要配置Nginx反向代理,使前端能够访问后端API。编辑站点的Nginx配置文件,在server块中添加以下内容:
location /api/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /judge/ { proxy_pass http://localhost:8088/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }保存配置后重启Nginx服务。现在你的HOJ系统应该可以通过HTTPS访问了。
5. 系统初始化与测试
首次访问你的HOJ系统时,需要使用默认管理员账号登录:
- 用户名:
hoj - 密码:
hoj123456
登录后立即修改管理员密码,然后进行以下基本配置:
- 系统设置:配置站点名称、LOGO、备案信息等
- 判题机管理:确认判题服务状态为"正常"
- 邮件配置:设置SMTP服务以启用用户注册和密码找回功能
- 题目导入:可以通过后台批量导入题目
为了测试系统是否正常工作,可以尝试:
- 注册一个新用户
- 创建或导入一个简单的编程题目(如A+B Problem)
- 提交代码验证判题功能是否正常
6. 常见问题排查
在部署过程中可能会遇到一些问题,以下是几个常见问题的解决方法:
判题服务无法连接
- 检查
judge.token在后端和判题服务配置中是否一致 - 确保8088端口已开放且未被防火墙拦截
- 查看判题容器日志:
docker logs hoj-judge
前端无法访问API
- 确认Nginx反向代理配置正确
- 检查后端服务是否正常运行:
pm2 list - 查看后端日志:
pm2 logs hoj-backend
数据库连接问题
- 确认MySQL用户有远程连接权限(如果前后端分离部署)
- 检查
application.yml中的数据库连接信息 - 确保MySQL的
max_connections设置足够大
性能优化建议
- 对于高并发场景,考虑增加判题服务实例:
docker-compose scale judge=3 - 调整MySQL的缓冲池大小:
innodb_buffer_pool_size = 1G(根据内存调整) - 启用Nginx的gzip压缩和静态文件缓存
7. 二次开发与扩展
HOJ系统具有良好的扩展性,可以根据需要进行二次开发。以下是一些常见的定制方向:
前端定制
- 修改
/web/src中的Vue组件来调整界面 - 更新
/web/public中的静态资源(如LOGO、favicon) - 调整主题颜色:修改
/web/src/styles/variables.scss
后端功能扩展
- 添加新的API接口:在
/backend/src/main/java相应包中创建新类 - 修改业务逻辑:调整service层代码
- 添加新的数据库表:创建Flyway迁移脚本
判题语言支持
- 添加新的编程语言:修改判题服务的
/judge/languages配置 - 调整资源限制:更新
/judge/config中的限制参数
开发完成后,重新构建并部署相应组件即可生效。建议在本地开发环境进行修改和测试,然后再部署到生产服务器。
