天天看點

virtual judge 本地部署方案

這是一種将自己的電腦當作伺服器來部署一個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)

(當然了,上面的網址是需要FQ的,好資源都得FQ。)

在伺服器上安裝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.) 解壓下載下傳的檔案

tar -xzvf jdk1.7.0_80

2.) 移動檔案夾到指定目錄下

sudo mkdir /usr/lib/jvm

sudo mv jdk1.7.0_80/ /usr/lib/jvm/

3.) 設定環境變量

sudo vi /etc/profile

//在本篇文章中,建議用vi或者vim編輯文檔,用gedit會報錯(雖然好像沒什麼影響...)

在檔案最後加入如下内容:

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.) 使修改生效:

5

sudo source /etc/profile

//如果提示source command not found

//請執行以下兩步:

//sudo -s

//source /etc/profile

這時候在終端輸入 java –version 檢視目前 JDK 版本

至此,JDK 配置完成

2.2 Redis的安裝和配置

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.)    通過apt-get安裝Maven3

    ubuntu12.04之後,可直接用apt-get來獲得

    sudo apt-get install maven -y

安裝完後,sudo su 進入root

用 mvn –v 檢視一下Maven的版本,如下圖:

安裝完畢後,預設的JDK版本可能會被更改。

因為Maven3安裝的同時把openjdk也一并安裝了。

    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.)    apt-get安裝tomcat7:

    sudo apt-get install tomcat7 -y  

    tomcat7預設會被安裝在目錄/var/lib/tomcat7/下,

    安裝完之後在浏覽器下輸入localhost:8080檢視是否安裝成功

    如果出現下圖,即為安裝成功

    2.)    安裝tomcat7-admin

    安裝成後,我們還需要安裝一個tomcat7-admin

    sudo apt-get install tomcat7-admin

    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"/>

    4.)    重新開機tomcat:

    sudo /etc/init.d/tomcat7 restart

重新在浏覽器打開tomcat界面

點選manager webapp,用剛才我們建立的使用者登陸

5.) 修改JDK預設的JDK版本

  1. 檢查 tomcat7 的 Server Information,版本可能不是我們自己的jdk版本。

  2. 這裡我們要修改tomcat使用的JDK版本,這步很重要,否則會出現很多問題

    sudo gedit /etc/default/tomcat7

    加入如下内容:

    JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80

    再次重新開機tomcat7:

OK, tomcat7的JDK版本修改完畢。

2.5 Mysql的安裝

    sudo apt-get install mysql-server -y

    安裝過程中會要求你輸入資料庫的密碼,這裡我直接用的123456,連續輸入兩次即可。

    進入資料庫測試一下

    mysql -u root -p

至此,搭建 Virtual Judge 所需的所有環境,都已搭建完畢!

3. 工程代碼實施

準備好四個檔案,就是一開始下載下傳的那四個:

3.1 Vjudge的打包

進入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/ 目錄下

    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的絕對路徑改為正确的路徑

    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導入(可能我的版本略微舊了點)。

    mysql -u root -p  

    create database vhoj;  

    exit;

mysql -h localhost -u root -p vhoj < vhoj_20141109.sql
sudo /etc/init.d/tomcat7 restart

    最後,重新開機tomcat7,進入manager

    檢視Application,可以看到vjudge已經處于running狀态了。

4. 大功告成的Vjudge

在位址欄輸入localhost:8080/vjudge,進入搭建成功的vjudge:

到此為止,Virtual Judge 終于搭建成功,just enjoy it!