這是一種將自己的電腦當作服務器來部署一個vj的方法,我也是參考前輩們的做法稍作了改動,如果在服務器上部署的話需要在細節上稍作改動:
一.什么是Virtual Judge? vj的工作原理什么? vj有什么特點?
所謂的Virtual Judge是區別於Online Judge而言的,OJ具有自己的題庫、判題終端等等,但是VJ是沒有的。VJ的工作原理是把題目用爬蟲抓過來,當你用VJ的賬號提交題目的時候VJ會用自己在對應的OJ上的賬號來提交你的代碼,並抓取判題結果呈現給用戶。簡單來說就是你只要注冊一個賬號就可以在各個OJ(當然要是VJ支持的)上提交題目了。
除此之外,VJ還有幾個功能很棒:
創建比賽。可以用VJ支持的那些OJ上的題目來組成一場比賽(每個人度可以加比賽,這點時很棒的),很適合大家一起做套題,或者個人刷專題使用。
實時排名。你可以按VJ說明的格式來生成一個比賽的排行榜,把這個榜和你創建的比賽掛鈎之后就可以在比賽過程中實時地看到其他各個隊伍的AC情況以及自己的排名。有些大 型比賽的排行榜已經有人制作好了,你只需要在設置的時候直接勾選別人創建的排行榜(也就是“比賽回放”)就行了,不必再親自制作。
二.部署環境:ubuntu12.04
三.virtual judge 本地部署方案:
去http://code.google.com/p/virtual-judge/downloads/list下載安裝包(vjudge.war)
在http://code.google.com/p/virtual-judge/source/browse/#svn%2Ftrunk%2Fjudge%2FMySQL-config頁面下載最新的數據庫文件(VIR.sql)
(當然了,上面的網址是需要翻牆的,好資源都得翻牆。)
在服務器上安裝tomcat,jre,jdk,MySQL命令:sudo apt-get install tomcat6 openjdk-6-jre openjdk-6-jdk mysql-server-5.5 mysql-client-5.5
將安裝包復制到ttop@ubuntu:/var/lib/tomcat6/webapps
重啟tomcat:sudo service tomcat6 restart
修改ttop@ubuntu:/var/lib/tomcat6/webapps/vjudge/WEB-INF/目錄下面的配置文件
數據庫db.properties
uername=root
jdbc.password=123456(密碼隨意)
賬戶配置:account.conf
格式:oj 用戶名 密碼
(這里需要自己在各大oj注冊的帳號)
[注]:URAL提交的時候只需要用戶ID,但是由於源程序中寫的是PasswordList,你需要把用戶ID放在密碼的位置
Codeforces源程序中提交時使用了代理,需要在服務器上放置goagent並使用tmux在后台開啟,默認為127.0.0.1:8087
建立數據庫並倒入剛才下載的數據庫文件:
mysql -u root -p
密碼:123456
create database vhoj
use vhoj
source VIR.sql
exit
重啟tomcat:sudo service tomcat6 restart
自己pc在瀏覽器訪問:http://localhost:8080/judge/,正常顯示就說明配置成功了
別的pc在瀏覽器訪問:http://你的pc的ip:8080/judge/,便可愉快刷各大oj的題目了
四.virtual judge問題解決
當無法評判時,重啟tomcat:
sudo service tomcat6 restart
1. 前期准備工作
1.1 一個Linux系統
因為現場賽的緣故,我一直使用的都是烏邦圖。
這里我測試用的是ubuntu14.04 Desktop 64bit ,當然選擇Server會更好一些.
系統的安裝不再贅述,作為服務器請選用Server版本。
1.2 更新源
在搭建環境之前,請確保你的源是有效的,速度是給力的,
建議選擇一個國內的源14.04 LTS 更新源
1
2
3
|
sudo gedit /etc/apt/sources.list 將原來的源覆蓋並保存
最后執行
sudo apt-get update 更新源
|
1.3 必要文件准備
我們需要下載這幾個文件(部分鏈接需要FQ才能訪問):
1.*.sql https://gist.github.com/trcnkq/a3cf7004759d41d79eb7
2.http_client.json https://gist.github.com/trcnkq/7a5deff639ff99475138
3.remote_accounts.json https://gist.github.com/trcnkq/e9dac7eea72d2b781949
4.virtual judge源文件 https://github.com/trcnkq/virtual-judge
如果無法FQ或者鏈接失效,請用我的百度雲鏈接: Vjudge搭建 (這里面包含了之后會用到的一系列文件,嫌麻煩可以都下載下來)
2. 必要環境搭建
2.1 JDK的安裝和配置
首先需要下載JDK,地址:https://jdk7.java.net/download.html (之前的雲盤鏈接內有64位的,請認准這個jdk版本)
注意系統是32位還是64位
1.) 解壓下載的文件
1
|
tar -xzvf jdk1.7.0_80
|
2.) 移動文件夾到指定目錄下
1
2
3
|
sudo mkdir /usr/lib/jvm
sudo mv jdk1.7.0_80/ /usr/lib/jvm/
|
3.) 設置環境變量
1
2
|
sudo vi /etc/profile
//在本篇文章中,建議用vi或者vim編輯文檔,用gedit會報錯(雖然好像沒什么影響...)
|
在文件最后加入如下內容:
1
2
3
4
|
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
|
4.) 使修改生效:
1
2
3
4
5
|
sudo source /etc/profile
//如果提示source command not found
//請執行以下兩步:
//sudo -s
//source /etc/profile
|
這時候在終端輸入 java –version 查看當前 JDK 版本
至此,JDK 配置完成
2.2 Redis的安裝和配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
1.) 下載安裝Redis:
wget http://download.redis.io/releases/redis-2.8.9.tar.gz
tar xvzf redis-2.8.9.tar.gz
cd redis-2.8.9/
make
sudo make install
2.) 配置init腳本:
wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server
wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf
sudo mv redis-server /etc/init.d/redis-server
sudo chmod +x /etc/init.d/redis-server
sudo mv redis.conf /etc/redis.conf
3.) 初始化用戶和日志路徑
第一次啟動Redis前,建議為Redis單獨建立一個用戶,並新建data和日志文件夾
sudo useradd redis
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown redis.redis /var/lib/redis
sudo chown redis.redis /var/log/redis
4.) 設置開機自動啟動,關機自動關閉
update-rc.d redis-server defaults
5.) 啟動Redis:
/etc/init.d/redis-server start
|
2.3 Maven3的安裝和配置
1
2
3
|
1.) 通過apt-get安裝Maven3
ubuntu12.04之后,可直接用apt-get來獲得
sudo apt-get install maven -y
|
安裝完后,sudo su 進入root
用 mvn –v 查看一下Maven的版本,如下圖:
安裝完畢后,默認的JDK版本可能會被更改。
因為Maven3安裝的同時把openjdk也一並安裝了。
1
2
3
4
5
|
2.) 修改系統默認的jdk
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_80/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_80/bin/javac 300
update-alternatives --config java //請選擇jdk1.7.0_80版本的jdk
update-alternatives --config javac
|
使用java -version或者mvn -v再次查看,JDK版本已更改
2.4 Tomcat7的安裝和配置
1
2
3
4
5
|
1.) apt-get安裝tomcat7:
sudo apt-get install tomcat7 -y
tomcat7默認會被安裝在目錄/var/lib/tomcat7/下,
安裝完之后在瀏覽器下輸入localhost:8080查看是否安裝成功
如果出現下圖,即為安裝成功
|
1
2
3
|
2.) 安裝tomcat7-admin
安裝成后,我們還需要安裝一個tomcat7-admin
sudo apt-get install tomcat7-admin
|
1
2
3
4
5
6
7
8
|
3.) 修改賬戶:
安裝完畢之后,我們進入tomcat7的conf目錄下修改tomcat-users.xml文件
cd /var/lib/tomcat7/conf/
gedit tomcat-users.xml
我這里用的是
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
|
1
2
|
4.) 重啟tomcat:
sudo /etc/init.d/tomcat7 restart
|
重新在瀏覽器打開tomcat界面
點擊manager webapp,用剛才我們建立的用戶登陸
5.) 修改JDK默認的JDK版本
檢查 tomcat7 的 Server Information,版本可能不是我們自己的jdk版本。
這里我們要修改tomcat使用的JDK版本,這步很重要,否則會出現很多問題
1
2
3
4
5
|
sudo gedit /etc/default/tomcat7
加入如下內容:
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
再次重啟tomcat7:
sudo /etc/init.d/tomcat7 restart
|
OK, tomcat7的JDK版本修改完畢。
2.5 Mysql的安裝
1
2
3
4
|
sudo apt-get install mysql-server -y
安裝過程中會要求你輸入數據庫的密碼,這里我直接用的123456,連續輸入兩次即可。
進入數據庫測試一下
mysql -u root -p
|
至此,搭建 Virtual Judge 所需的所有環境,都已搭建完畢!
3. 工程代碼實施
准備好四個文件,就是一開始下載的那四個:
3.1 Vjudge的打包
1
2
3
4
|
進入
virtual-judge-master 目錄:
cd virtual-judge-master/
用
Maven 將 Virtual Judge 打包:
mvn clean package
|
里面會有一個vjudge.war文件,就是我們打包完成的 Virtual Judge。
把這個war文件拷到tomcat7的webapps目錄下。
打包的過程可能會相當長,特別是網絡不好的情況下,萬一掉包了,非常蛋疼,如果你不想等待太久,可以直接下載此文件,在文章開頭的百度雲網盤鏈接里.
放到webapps目錄后,會自動生成一個vjudge文件夾,如果沒有生成,你也可以自行解壓。
3.2 remote_accounts.json文件的編輯
把各個OJ的提交賬號添加到remote_accounts.json里。
3.3 config.properties文件的編輯
如不需要代理或VPN訪問國外OJ,保留http_client.json里面的[“direct”]即可。
3.4 vjudge的簡單部署
把 remote_accounts.json 和 http_client.json 兩個文件放在指定的文件夾下
這里我放在 /var/lib/tomcat7/webapps/vjudge/ 目錄下
1
2
|
sudo mv http_client.json /var/lib/tomcat7/webapps/vjudge/
sudo mv remote_accounts.json /var/lib/tomcat7/webapps/vjudge/
|
更改/webapps/vjudge/WEB-INF/classes/的目錄下config.properties文件
將remote_accounts.json和http_client.json的絕對路徑改為正確的路徑
1
2
|
cd /var/lib/tomcat7/webapps/vjudge/WEB-INF/classes/
sudo gedit config.properties
|
PS:如果你的數據庫密碼不是123456,那么上面的root密碼你也需要修改,默認為123456
3.5 vhoj數據庫的建立
在mysql中新建一個數據庫,名字為:vhoj,
並把表vhoj_20141109.sql導入(可能我的版本略微舊了點)。
1
2
3
|
mysql -u root -p
create database vhoj;
exit;
|
1
|
mysql -h localhost -u root -p vhoj < vhoj_20141109.sql
|
1
|
sudo /etc/init.d/tomcat7 restart
|
1
2
|
最后,重啟tomcat7,進入manager
查看Application,可以看到vjudge已經處於running狀態了。
|
4. 大功告成的Vjudge
在地址欄輸入localhost:8080/vjudge,進入搭建成功的vjudge:
到此為止,Virtual Judge 終於搭建成功,just enjoy it!