宝塔面板CentOS 7.9保姆级教程从零部署HOJ在线判题系统含域名HTTPS配置对于想要搭建私有在线编程练习平台的个人开发者或小型团队来说HOJHust 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.20MySQL 5.7PHP 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/443HTTP/HTTPS8080后端API8088判题服务3306MySQL建议仅限本地访问4. 域名与HTTPS配置为你的HOJ系统配置域名和HTTPS可以提升安全性和专业性。假设你已经有一个域名并解析到了服务器IP。在宝塔面板中进入网站选项卡找到之前创建的HOJ站点点击设置选择SSL选择Lets 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服务以启用用户注册和密码找回功能题目导入可以通过后台批量导入题目为了测试系统是否正常工作可以尝试注册一个新用户创建或导入一个简单的编程题目如AB 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 judge3调整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中的限制参数开发完成后重新构建并部署相应组件即可生效。建议在本地开发环境进行修改和测试然后再部署到生产服务器。