在线评测系统(OJ)作为技术社区与教育机构的核心工具,其搭建与维护一直是开发者关注的重点,本文将详细介绍如何在CentOS系统上部署OJ平台,并将其代码托管至GitHub,帮助开发者高效构建稳定、可扩展的编程评测环境。
一、环境准备:CentOS基础配置

1、系统更新与依赖安装
以root权限登录服务器,执行以下命令:
yum update -y yum install -y git gcc-c++ make openssl-devel
更新系统并安装编译工具链,为后续部署依赖项提供基础支持。
2、安装Node.js与PM2进程管理
推荐使用Node.js 16.x以上版本:
curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum install -y nodejs npm install pm2 -g
PM2可保障OJ服务在后台稳定运行,避免进程意外中断。

**二、部署OJ核心服务
1、选择开源OJ框架
HUSTOJ或QDUOJ均为成熟的开源方案,以QDUOJ为例,克隆仓库至本地:
git clone https://github.com/QingdaoU/OnlineJudgeDeploy.git cd OnlineJudgeDeploy
2、配置数据库与后端服务
- 安装MySQL/MariaDB并创建数据库:
yum install -y mariadb-server
systemctl start mariadb
mysql_secure_installation
mysql -u root -p -e "CREATE DATABASE oj DEFAULT CHARSET utf8mb4" - 修改项目配置文件config.yaml,填写数据库连接信息及管理员账号。
3、编译与启动服务

npm install pm2 start server.js --name "OJ_Server" pm2 save
通过pm2 logs命令可实时监控服务状态,排查启动错误。
三、Nginx反向代理与HTTPS加密
1、安装Nginx并配置站点
yum install -y nginx systemctl enable nginx
在/etc/nginx/conf.d/oj.conf中添加以下内容:
server {
listen 80;
server_name oj.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
}
} 执行nginx -s reload生效配置。
2、申请SSL证书(可选但推荐)
使用Certbot自动获取Let's Encrypt证书:
yum install -y certbot python3-certbot-nginx certbot --nginx -d oj.yourdomain.com
HTTPS可提升用户信任度,同时符合搜索引擎对安全性的要求。
四、代码托管至GitHub:版本控制与协作
1、初始化本地Git仓库
在OJ项目根目录执行:
git init git add . git commit -m "Initial commit: OJ deployment"
2、关联远程GitHub仓库
- 在GitHub创建私有仓库(如OnlineJudge-Deploy),复制仓库URL。
- 本地执行:
git remote add origin https://github.com/yourusername/OnlineJudge-Deploy.git
git push -u origin master注意:敏感信息(如数据库密码)需通过.gitignore过滤,或使用环境变量管理。
3、持续集成与自动化部署(进阶)
结合GitHub Actions,可配置自动测试与服务器同步脚本,减少手动运维成本。
**五、安全加固与性能优化
防火墙配置
仅开放必要端口(80/443/22):
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-service=ssh firewall-cmd --reload
定期备份与监控
使用crontab定时备份数据库与代码:
0 3 * * * mysqldump -u root -pPASSWORD oj > /backup/oj_db_$(date +\%F).sql
推荐集成Prometheus+Grafana监控服务器资源占用。
个人观点
OJ系统的成功部署仅是起点,后续需持续关注社区反馈,迭代功能,引入Docker容器化技术可提升判题沙盒的安全性;集成CI/CD流水线能加速功能更新,技术部署的本质是服务用户需求,稳定与易用性永远优先于华而不实的功能堆砌。
