前段時間一直忙項目,所以項目初期的svn服務就一直沒來得及更新,今天剛好忙完就將自己之前的配置重新總結了下,供大家參考。
svn(subversion)作為一款開源的代碼版本管理軟體,目前普遍用在項目開發人員將本地的原始碼上傳到web測試伺服器的一種同步軟體。
其儲存版本資料有2種方式:BDB(一種事務安全型表類型)和預設的FSFS(一種不需要資料庫的儲存系統)。因為BDB方式在伺服器中斷時,有可能鎖住資料,所以還是FSFS方式相對安全一些。
本篇博文就是為了實現開發人員使用windows下的svn用戶端將原始碼上傳到服務端svn版本庫,並利用svn的hock指令碼將庫資料同步到apache目錄,達到即時測試web頁面的功能。
我的部落格新站已經建好,更多新的內容即將在新站更新。。
歡迎訪問 http://www.showerlee.com
解決方案:
一.環境部署
作業系統: centos6.3 x64
SVN: subversion-1.8.0
apache: httpd-2.4.4
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135114333-0.jpg" title="svn+apache.jpg" />
svn server(centos6.3 x64): 192.168.7.74
svn client(win7 x64): 192.168.7.129
1.關閉iptables和SELINUX
# service iptables stop
註:如需開啟防火牆,則添加如下一條規則開啟svn 3690連接埠
# iptables -A INPUT -p tcp --dport 3690 -j ACCEPT
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
2.同步時間
# ntpdate asia.pool.ntp.org
3.安裝apache
傳送門:http://showerlee.blog.51cto.com/2047005/1174141
4.關閉系統內建svnserve
# service svnserve stop
# chkconfig svnserve off
註:本文檔為了與apache2.4.4配合不發生相容問題,所以使用了最新編譯版本的svn,這裡關閉是為了保證與rpm的版本不衝突.
二.svn安裝配置:
(svn server)
1.下載svn源碼包並安裝
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.8.0.tar.bz2
# tar jxvf subversion-1.8.0.tar.bz2
# cd subversion-1.8.0
建立安裝目錄
# mkdir -p /usr/local/svn
2.安裝svn依賴包並解壓模組到svn根目錄:
# wget http://www.sqlite.org/sqlite-amalgamation-3071501.zip
# unzip sqlite-amalgamation-3071501.zip
# mv sqlite-amalgamation-3071501 sqlite-amalgamation
編譯安裝
# ./configure --prefix=/usr/local/svn
# make && make install
測試安裝是否成功
# /usr/local/svn/bin/svnserve --version
-----------------------------
svnserve,版本 1.8.0 (r1490375)
編譯於 Jun 29 2013,04:08:41 在 x86_64-unknown-linux-gnu
-----------------------------
注:centos6.3預設裝有svn服務端,版本為為1.6.11,其中svn命令在/usr/bin/svn下被環境變數載入,本文檔編譯的版本為1.8.0,不推薦使用低版本svn指令執行以下操作,可能會有報錯。這裡為了區分建議直接全路徑訪問編譯後的高版本svn指令執行以下操作。
3.配置svn
1).建立版本庫目錄這個需安裝目錄區分開)
# mkdir -p /data/svndata/www.example.com
2).建立svn版本庫
# svnadmin create /data/svndata/www.example.com
註:執行此命令後svn自動在/data/svndata/目錄下添加必須的設定檔.
# ls /data/svndata/www.example.com
--------------------
conf db format hooks locks README.txt
--------------------
注:版本庫不同於一般的檔案夾, 直接在作業系統上建立檔案無法被SVN識別, 必須使用import等命令將檔案匯入版本庫.此為svn內部指令,create用於建立版本庫。請使用svn help查看詳細說明。
3).修改版本庫設定檔
# vi /data/svndata/www.example.com/conf/svnserve.conf
修改如下配置
-------------------------------
[general]
# 使非授權使用者無法訪問
anon-access = none
# 使授權使用者有寫入權限
auth-access = write
# 指明密碼檔案路徑
password-db = passwd
# 存取控制檔案
authz-db = authz
# 認證命名空間,subversion會在認證提示裡顯示,並且作為憑證緩衝的關鍵字。
realm = /data/svndata/www.example.com
--------------------------------
4).配置使用者
# vi /data/svndata/www.example.com/conf/passwd
添加如下內容
-----------------
[users]
user01 = 123456
user02 = 123456
-----------------
註:可以添加多個svn賬戶,=前後為使用者名稱和密碼
5).配置許可權
# vi /data/svndata/www.example.com/conf/authz
添加以下內容
-------------
[/]
user01 = rw
user02 = r
------------
註:列出對各使用者的授權。包括唯讀r,讀寫rw。沒有列出的使用者,則不允許訪問
6).啟動svn服務
# /usr/local/svn/bin/svnserve -d -r /data/svndata/
註:此指令用於啟動svn服務,-d指明以守護模式運行,svn自動在3690連接埠監聽。3690是預設連接埠,可以使用“--listen-port=”或者“--listen-host=”來指定其它連接埠以及非本地主機。-r選項用來指定svn服務的根目錄,這樣使用者就可以使用相對路徑訪問,而不用提供完整路徑。
7).檢查連接埠
# lsof -i:3690
----------------------------
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
svnserve 65371 root 3u IPv4 82329 0t0 TCP *:svn (LISTEN)
----------------------------
8).設定開機啟動
# echo "/usr/local/svn/bin/svnserve -d -r /data/svndata/" >> /etc/rc.local
到此svn初步搭建完畢
三.svn同步apache配置:
1.添加apache的svn模組
# cd ~/subversion-1.8.0
# cp ./subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/local/apache2/modules/
# cp ./subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/local/apache2/modules/
# vi /usr/local/apache2/conf/httpd.conf
末行添加如下內容:
---------------------
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
---------------------
重啟apache服務:
# /usr/local/apache2/bin/apachectl restart
2.設定svn同步指令碼
建立apache虛擬目錄
# mkdir -p /usr/local/apache2/htdocs/www.example.com
設定apache預設使用者為該虛擬目錄宿主
# chown -R daemon.daemon /usr/local/apache2/htdocs/www.example.com
建立指令碼,將svn該版本庫資料同步到apache虛擬目錄
# cd /data/svndata/www.example.com/
# vi post-commit
------------------------
#!/bin/sh
export LANG=zh_CN.UTF-8
SVN=/usr/local/svn/bin/svn
WEB=/usr/local/apache2/htdocs/www.example.com
#預設無需輸入帳號密碼
#USERNAME=user01
#PASSWORD=123456
# SVN update $WEB --username $USERNAME --password $PASSWORD --no-auth-cache
$SVN update $WEB
------------------------
註:該指令碼會在用戶端執行svn commit同時被觸發,從而將版本庫的資料同步到apache虛擬目錄
設定指令碼可執行許可權
# chmod a+x post-commit
使用checkout建立一個工作複本
# /usr/local/svn/bin/svn co svn://localhost/www.example.com /usr/local/apache2/htdocs/www.example.com/
按照提示操作
==============================================
認證領域: <svn://localhost:3690> /data/svndata/www.example.com/
“root”的密碼: 123456
認證領域: <svn://localhost:3690> /data/svndata/www.example.com/
“user01”的密碼: 123456
-----------------------------------------------------------------------
注意! 你的密碼,對於認證域:
<svn://localhost:3690> /data/svndata/www.example.com/
只能明文儲存在磁碟上! 如果可能的話,請考慮配置你的系統,讓 Subversion
可以儲存加密後的密碼。請參閱文檔以獲得詳細資料。
你可以通過在“/root/.subversion/servers”中設定選項“store-plaintext-
passwords”為“yes”或“no”,
來避免再次出現此警告。
-----------------------------------------------------------------------
儲存未加密的密碼(yes/no)?yes
A /usr/local/apache2/htdocs/www.example.com/1.txt
A /usr/local/apache2/htdocs/www.example.com/2.txt
A /usr/local/apache2/htdocs/www.example.com/3.txt
取出版本 3。
==============================================
svn認證成功,同步認證資訊會儲存在apache虛擬目錄 ./www.example.com/.svn/ 下
註:這裡同步的3個txt檔案為版本庫已儲存資料
3.重啟svn服務:
# killall svnserve
# /usr/local/svn/bin/svnserve -d -r /data/svndata/
四.svn用戶端配置
(svn client)
1.下載TortoiseSVN,並預設安裝
http://sourceforge.net/projects/tortoisesvn/files/latest/download?source=dlp
2.建立版本庫:
例如:
1).在F盤建立work檔案夾並右鍵選擇SVN Checkout,建立svn用戶端版本庫
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/113511HJ-1.png" style="float:none;" title="31.png" />
2).輸入svn遠程版本庫URL,以及本地版本庫存放路徑
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135115N8-2.png" style="float:none;" title="8.png" />
3).輸入該版本庫使用者名稱密碼,預設該賬戶資訊明文儲存在/data/svndata/www.example.com/conf/passwd內
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135115431-3.png" style="float:none;" title="9.png" />
4).建立版本庫完成,顯示為第一個版本
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135115H5-4.png" style="float:none;" title="34.png" />
3.同步版本庫
例如:在windows用戶端版本庫裡有新的檔案更新,如何將資料同步到web端
1).首先,右鍵該版本庫www.example.com目錄,選擇svn Update
相當於將svn伺服器端的資料同步更新到本地,即擷取資料。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135114Y5-5.png" style="float:none;" title="2.png" />
2).顯示更新到第四個版本
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/11351145c-6.png" style="float:none;" title="3.png" />
3).右鍵該版本庫www.example.com目錄,選擇svn Commit
相當於將本地用戶端的資料同步提交到svn服務端,即推送資料。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135111335-7.png" style="float:none;" title="4.png" />
4).將需要推送的資料打鉤,OK即可完成操作.
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/113511N24-8.png" style="float:none;" title="5.png" />
5).顯示目前為第五個版本
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135113111-9.png" style="float:none;" title="6.png" />
查看是否成功將檔案推送到apache虛擬目錄
# cd /usr/local/apache/htdocs
# pwd
# ls -l
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1135115B1-10.png" title="7.png" />
---------大功告成-----------
本文出自 “一路向北” 部落格,請務必保留此出處http://showerlee.blog.51cto.com/2047005/1240955