在线评测系统(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流水线能加速功能更新,技术部署的本质是服务用户需求,稳定与易用性永远优先于华而不实的功能堆砌。