弱校 菜雞,一直到如今 尚未本身的 OJ, 上個星期,領導搞來一臺服務器, 準備本身搭個oj , 這個任務分配到我身上了, 搞了 一個星期 終於搞定了php
分享一下 本身的歷程;css
搭建起來 可是, 第一次特別混亂,第二次 用Apache 可是 又同時裝了 nginx 到帳兩個互掐,html
最後最後 重新裝了系統 一次點亮;java
【 MYSQL + Nginx + PHP5.0 + phpmyadmin】
mysql
一 裝系統, ubuntu 1404 server 版本;linux
1.刻錄成啓動盤, http://www.jointd.com/?p=457nginx
2. 安裝在 服務器上遇到CD-ROM問題是 解決方法:git
http://blog.csdn.net/sizaif/article/details/78483355github
3. 服務器的 網有問題, 在選擇 安裝包是 加載到12% 就返回到 menu 界面 。 因此 直接裸裝,web
二 換源,
裸裝完 系統後, 源 /etc/apt/sources.list 裏面是空的; 而且 沒有 vim 只有 vi
因此只能手撕 , 只寫 阿里源 就能夠, vi 不會用的 本身 百度 ,, i 插入 d 刪除 y 複製 p 粘貼 只能告訴你這麼多 嘻嘻
http://blog.csdn.net/sizaif/article/details/78500482
三 遠程服務ssh
裝好後 在 /etc/rc,lcoal exit 0 前面 添加 /etc/init.d/ssh start 設置開機啓動
http://blog.csdn.net/sizaif/article/details/78500393
在 本身電腦上 用 putty 就能夠直接訪問你的 ubuntu了 (在一個局域網內 ) 輸入 服務器ip 地址 就能夠
四 搭好遠程後 (開始搭上 快車咯)
在本身電腦上 輸入 命令 直接複製 就能夠
由於是 裸裝 因此 須要 什麼 就裝什麼 就能夠了
先 裝 mysql 和 php 以及 nginx
更新源
裝 mysql 過程當中 輸入 mysql 的 密碼 這裏 很重要 要記住!!!!!
apt-get update apt-get install mysql-server mysql-client 安裝php及對mysql的支持 apt-get install php5 php5-fpm php5-mysql php-apc 根據實際須要,選擇性的安裝php的各種功能模塊(具體請自行百度) apt-get install php-pear php5-dev php5-curl apt-get install php5-gd php5-intl php5-imagick apt-get install php5-imap php5-mcrypt php5-memcache apt-get install php5-ming php5-ps php5-pspell apt-get install php5-recode php5-snmp php5-sqlite apt-get install php5-tidy php5-xmlrpc php5-xsl
這裏是 安裝的 源碼:
大致 思路: 建立 judge 用戶, 從網站下載 源碼 , 安裝須要的軟件, 配置 判題機的 數據庫用戶名和密碼 (與mysql 裏一致) 把 nginx的 網站目錄改到 源碼下的 web 下
若是學過 linux 的話 這些 命令 很容易懂, 若是 沒法 svn 的話 那就 先 去網站 手動下載, 複製到 src 目錄下 進行配置
若是 想 一步完成的話, 首先 確保 svn co https://github.com/zhblue/hustoj/trunk/trunk/ src 這條命令是可行的 , 可行 在一步操做, 不行的話 就 手動下載, 本身 根據命令行 相應的配置
#!/bin/bash apt-get update apt-get install -y subversion /usr/sbin/useradd -m -u 1536 judge cd /home/judge/ svn co https://github.com/zhblue/hustoj/trunk/trunk/ src apt-get install -y make flex g++ clang libmysqlclient-dev libmysql++-dev php5-fpm nginx mysql-server php5-mysql php5-gd fp-compiler openjdk-7-jdk USER=`cat /etc/mysql/debian.cnf |grep user|head -1|awk '{print $3}'` PASSWORD=`cat /etc/mysql/debian.cnf |grep password|head -1|awk '{print $3}'` mkdir etc data log cp src/install/java0.policy /home/judge/etc cp src/install/judge.conf /home/judge/etc if grep "OJ_SHM_RUN=0" etc/judge.conf ; then mkdir run0 run1 run2 run3 chown judge run0 run1 run2 run3 fi sed -i "s/OJ_USER_NAME=root/OJ_USER_NAME=$USER/g" etc/judge.conf sed -i "s/OJ_PASSWORD=root/OJ_PASSWORD=$PASSWORD/g" etc/judge.conf sed -i "s/DB_USER=\"root\"/DB_USER=\"$USER\"/g" src/web/include/db_info.inc.php sed -i "s/DB_PASS=\"root\"/DB_PASS=\"$PASSWORD\"/g" src/web/include/db_info.inc.php chown www-data src/web/upload data if grep client_max_body_size /etc/nginx/nginx.conf ; then echo "client_max_body_size already added" ; else sed -i "s:include /etc/nginx/mime.types;:client_max_body_size 80m;\n\tinclude /etc/nginx/mime.types;:g" /etc/nginx/nginx.conf fi mysql -h localhost -u$USER -p$PASSWORD < src/install/db.sql echo "insert into jol.privilege values('admin','administrator','N');"|mysql -h localhost -u$USER -p$PASSWORD sed -i "s:root /usr/share/nginx/html;:root /home/judge/src/web;:g" /etc/nginx/sites-enabled/default sed -i "s:index index.html:index index.php:g" /etc/nginx/sites-enabled/default sed -i "s:#location ~ \\\.php\\$:location ~ \\\.php\\$:g" /etc/nginx/sites-enabled/default sed -i "s:#\tfastcgi_split_path_info:\tfastcgi_split_path_info:g" /etc/nginx/sites-enabled/default sed -i "s:#\tfastcgi_pass unix:\tfastcgi_pass unix:g" /etc/nginx/sites-enabled/default sed -i "s:#\tfastcgi_index:\tfastcgi_index:g" /etc/nginx/sites-enabled/default sed -i "s:#\tinclude fastcgi_params;:\tinclude fastcgi_params;\n\t}:g" /etc/nginx/sites-enabled/default /etc/init.d/nginx restart sed -i "s/post_max_size = 8M/post_max_size = 80M/g" /etc/php5/fpm/php.ini sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 80M/g" /etc/php5/fpm/php.ini /etc/init.d/php5-fpm restart service php5-fpm restart cd src/core ./make.sh if grep "/usr/bin/judged" /etc/rc.local ; then echo "auto start judged added!" else sed -i "s/exit 0//g" /etc/rc.local echo "/usr/bin/judged" >> /etc/rc.local echo "exit 0" >> /etc/rc.local fi /usr/bin/judged
【到這裏, 默認你已經配置完了, 而且 在瀏覽器內 打開 localhost 出現 judgeonline了 】
下面的操做是 安裝 phpmyadmin 數據庫網頁版 便於管理 用戶 ,進行後臺刪除之類的;
安裝phpmyadmin
sudo apt-get install phpmyadmin
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin配置連接到 /home/judge/src/web 下 ( 以前nginx 更改了 網站目錄, 配置到JudgeOnline 目錄下了)
sudo ln -s /usr/share/phpmyadmin /home/judge/src/web
此時 就能夠 經過 用其餘電腦 訪問 服務器的 ip地址 後面加 /phpmyadmin 進去就能夠了
admin 是超級管理員,
有兩個 數據庫 是 配置信息, 能夠本身設置的
一個在 /home/judge/etc 下
4. 配置文件judge.conf註釋 OJ_HOST_NAME=127.0.0.1 若是用mysql鏈接讀取數據庫,數據庫的主機地址 OJ_USER_NAME=root 數據庫賬號 OJ_PASSWORD=root 數據庫密碼 OJ_DB_NAME=jol 數據庫名稱 OJ_PORT_NUMBER=3306 數據庫端口 OJ_RUNNING=4 judged會啓動judge_client判題,這裏規定最多同時運行幾個judge_client OJ_SLEEP_TIME=5 judged經過輪詢數據庫發現新任務,輪詢間隔的休息時間,單位秒 OJ_TOTAL=1 老式併發處理中總的judged數量 OJ_MOD=0 老式併發處理中,本judged負責處理solution_id按照TOTAL取模後餘數爲幾的任務。 OJ_JAVA_TIME_BONUS=2 Java等虛擬機語言得到的額外運行時間。 OJ_JAVA_MEMORY_BONUS=512 Java等虛擬機語言得到的額外內存。 OJ_SIM_ENABLE=0 是否使用sim進行代碼類似度的檢測 OJ_HTTP_JUDGE=0 是否使用HTTP方式鏈接數據庫,若是啓用,則前面的HOST_NAME等設置忽略。 OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline 使用HTTP方式鏈接數據庫的基礎地址,就是OJ的首頁地址。 OJ_HTTP_USERNAME=admin 使用HTTP方式所用的用戶賬號(HTTP_JUDGE權限),該賬號登陸時不能啓用VCODE圖形驗證碼,但能夠登陸成功後啓用。 OJ_HTTP_PASSWORD=admin 密碼 OJ_OI_MODE=0 是否啓用OI(信息學奧林匹克競賽)模式,即不管是否出錯都繼續判剩餘的數據,在ACM比賽中一旦出錯就中止運行。 OJ_SHM_RUN=0 是否使用/dev/shm的共享內存虛擬磁盤來運行答案,若是啓用能提升判題速度,但須要較多內存。 OJ_USE_MAX_TIME=1 是否使用全部測試數據中最大的運行時間做爲最後運行時間,若是不啓用則以全部測試數據的總時間做爲超時判斷依據。 OJ_LANG_SET=0,1,2,3,4 #判哪些語言的題目
配置文件db_info.inc.php註釋 static $DB_HOST="localhost"; 數據庫的服務器地址 static $DB_NAME="jol"; 數據庫名 static $DB_USER="root"; 數據庫用戶名 static $DB_PASS="root"; 數據庫密碼 // connect db 數據庫鏈接部分 static $OJ_NAME="HUSTOJ"; OJ的名字,將取代頁面標題等位置HUSTOJ字樣。 static $OJ_HOME="./"; OJ的首頁地址 static $OJ_ADMIN="root@localhost"; 管理員email static $OJ_DATA="/home/judge/data"; 測試數據所在目錄,實際位置。 static $OJ_BBS="discuss";//"bbs"論壇的形式,discuss爲自帶的簡單論壇,bbs爲外掛論壇,參考bbs.php代碼。 static $OJ_ONLINE=false; 是否使用在線監控,須要消耗必定的內存和計算,所以若是併發大建議關閉 static $OJ_LANG="en"; 默認的語言,中文爲cn static $OJ_SIM=true; 是否顯示類似度檢測的結果。 static $OJ_DICT=true; 是否啓用在線英字典 static $OJ_LANGMASK=1008; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language 用掩碼錶示的OJ接受的提交語言,能夠被比賽設定覆蓋。1008爲只使用C/CPP/Pascal/Java。 static $OJ_EDITE_AREA=true; 是否啓用高亮語法顯示的提交界面,能夠在線編程,無須IDE。 static $OJ_AUTO_SHARE=false;//true: 自動分享代碼,啓用的話,作出一道題就能夠在該題的Status中看其餘人的答案。 static $OJ_CSS="hoj.css"; 默認的css,能夠選擇dark.css和gcode.css,具備有限的界面制定效果。 static $OJ_SAE=false; //是不是在新浪的雲平臺運行web部分 static $OJ_VCODE=true; 是否啓用圖形登陸、註冊驗證碼。 static $OJ_APPENDCODE=false; 是否啓用自動添加代碼,啓用的話,提交時會參考$OJ_DATA對應目錄裏是否有append.c一類的文件,有的話會把其中代碼附加到對應語言的答案以後,巧妙使用能夠指定main函數而要求學生編寫main部分調用的函數。 static $OJ_MEMCACHE=false;是否使用memcache做爲頁面緩存,若是不啓用則用/cache目錄 static $OJ_MEMSERVER="127.0.0.1"; memcached的服務器地址 static $OJ_MEMPORT=11211; memcached的端口 static $OJ_RANK_LOCK_PERCENT=0; //比賽封榜時間的比率,如5小時比賽設爲0.2則最後1小時封榜。 static $OJ_SHOW_DIFF=false; //顯示WrongAnswer時的對比
234