An OnlineJudge System for OI.
The UI is powered by Semantic UI.
Template designed & coded by Sengxian and Menci.
Because of an update to the database structure, users who upgrade from a commit BEFORE 4c673956959532d61b8f9ba0be3191a054b4371a MUST perform the following SQL on the database:
ALTER TABLE `judge_state` ADD `is_public` TINYINT(1) NOT NULL AFTER `compilation`;
UPDATE `judge_state` JOIN `problem` ON `problem`.`id` = `judge_state`.`problem_id` SET `judge_state`.`is_public` = `problem`.`is_public`;
ALTER TABLE `syzoj`.`judge_state` ADD INDEX `judge_state_is_public` (`id`, `is_public`, `type_info`, `type`);Warning The following content is outdated. Please refer to https://syzoj-demo.t123yh.xyz:20170/article/1 for a detailed guide and a demo server.
There's currently no stable version of SYZOJ 2, but you can use the unstable version from git.
git clone https://github.com/syzoj/syzoj
cd syzoj
Install dependencies with npm install or yarn. Also, follow the instructions here to install 7z executable used by the node-7z package.
Copy config-example.json to config.json, and make necessary changes.
SYZOJ 2 uses Sequelize, which supports many database systems, including MySQL and Sqlite.
By default it use the Sqlite database syzoj.db, you can change it in config.json
You should change the session_secret and judge_token in config.json.
In the database, the is_admin field in user table describes whether a user is admin or not.
To make a user be an admin, the only way is via database.
SYZOJ 2 uses a Docker-based sandboxed judger. Please go to syzoj-judge.
Add SYZOJ 2 to system services.
vim [syzoj2 path]/runsyzojEdit runsyzoj as as follows.
#!/bin/bash
cd [syzoj2 path]
npm start > log.txt 2>&1Please change [syzoj2 path].
Add SYZOJ-JUDGE to system services.
vim [syzoj-judge path]/runjudgeEdit runjudge as as follows.
#!/bin/bash
cd [syzoj-judge path]
npm start > jlog.txt 2>&1Please change [syzoj-judge path].
vim /etc/systemd/system/syzoj.serviceEdit /etc/systemd/system/syzoj.service as as follows.
[Unit]
Description=SYZOJ Online Judge
After=network.target
[Service]
Type=simple
PIDFile=/run/syzoj.pid
WorkingDirectory=[syzoj2 path]
ExecStart=[syzoj2 path]/runsyzoj
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.targetPlease change [syzoj2 path].
vim /etc/systemd/system/syzoj-judge.serviceEdit /etc/systemd/system/syzoj-judge.service as as follows.
[Unit]
Description=SYZOJ Judge Daemon
After=network.target
[Service]
Type=simple
PIDFile=/run/syzoj-judge.pid
WorkingDirectory=[syzoj-judge path]
ExecStart=[syzoj-judge path]/runjudge
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.targetPlease change [syzoj-judge path].
systemctl start syzoj
systemctl start syzoj-judgesystemctl stop syzoj
systemctl stop syzoj-judgesystemctl restart syzoj
systemctl restart syzoj-judge是否启用注册邮件验证。
用于 Email Token 签名的 secret,脸滚键盘随意填写即可。
"email": {
"method": "sendmail",
"options": {
"address": "xxxx", // 发件人地址
}
}, "email": {
"method": "aliyundm",
"options": {
"AccessKeyId": "xxxx",
"AccessKeySecret": "xxxx",
"AccountName": "xxxx" // 发件邮箱
}
}, "email": {
"method": "smtp",
"options": {
"host": "smtp.163.com",
"port": 465,
"username": "xxx@163.com",
"password": "xxx",
"allowUnauthorizedTls": false
}
},