svn服務器搭配apache服務器

SVN是一個優秀的版本管理工具,並且適用於小型的團隊開發。SVN可以獨立服務器運行或者藉助Apache運行,所謂獨立運行是指在服務器上配置好SVN服務器後,網內的計算機可以利用諸如TortoiseSVN這樣的SVN客戶端軟件通過SVN協議(svn://***.***.***.***)對服務器進行簽出(checkout)提交(commit)等操作。若SVN藉助Apache運行,則可通過瀏覽器的http協議直接訪問服務器對應地址下的代碼。

本文先講述如何單獨配置SVN服務器,之後再講述如何添加Apache的http訪問支持。
安裝環境:Fedora 19 / CentOS 6.4
(Windows也可當作SVN服務器,貌似配置過程很簡單,不過從穩定性上考慮,還是選用CentOS作爲服務器更爲理想)


獨立SVN服務器配置

1.安裝subversion包

2.初始化版本倉庫(Repositories) 
安裝完subversion後,需要初始化一個版本倉庫,用於管理代碼。 新建目錄

在新建的目錄上創建倉庫

這裏,svnadmin create之後跟的爲版本倉庫存放代碼的目錄地址,在本文中爲 /home/svn/project,當然,可以根據需求改成其它目錄,但請在以下的操作中根據具體目錄進行對應的修改。 在執行完svnadmin create操作後,在創建的倉庫下,會自動生成幾個目錄

此時,如果你的電腦上有待進行管理的代碼目錄,可以將其導入(import)到SVN的倉庫中。作爲示例,這裏要導入的代碼目錄爲

在svn import命令中,末尾的-m(–message)選項表示爲執行操作的日誌消息,如果不加-m “消息內容”的話,此操作將會報錯svn: E205007。
如果導入成功,你將會看到諸如如下過程(此處截取了導入過程中的末尾部分)

3.用戶管理及權限設置
SVN服務器的配置文件主要有3個,分別爲

添加用戶
添加用戶只需要打開/home/svn/project/conf/passwd文件,添加一行形如“user = password”條目即可。這裏,作爲示例,添加一個admin賬戶,密碼爲123456,以及其它2個賬戶則passwd文件如下

用戶訪問策略配置
/home/svn/project/conf/authz文件用於管理用戶以及用戶組的訪問策略。authz文件中包含若干個節,包括[groups]以及類似[repository:/baz/fuz]這樣的節,注意[groups]節,這裏用於定義用戶組,在[groups]節中定義完不同組的用戶後可以很方便的利用組進行權限管理。

在以上的authz文件中,定義了組g_admin和g_common,g_admin組中包含有admin用戶,g_common組中包含了用戶role_a和role_b。
接下來進行具體目錄的權限控制,可用類似 user = rw 類似的方式爲用戶分配該目錄的對應權限,也可用 @groupname = rw 類似的方式爲用戶組分配該目錄的對應權限,r代表可讀,w代表可寫,rw代表可讀可寫。同時,一定要注意在末尾添加其他人的權限設置,利用 * 通配符代表除了之前提到的其他人。* = 表示其他人不具有任何權限。
注意到文件中的兩個節[/]和[project:/],[/]表示SVN根目錄的權限配置,而[project:/]表示庫project的根目錄權限配置,二者存在細微的差別,但是若沒搞清楚,則會導致訪問時驗證失敗或連接失敗等問題。這裏需要涉及到SVN服務啓動過程的命令,具體見4.啓動SVN服務器中的描述。除此之外還可參考:基於svnserve的服務器,權限文件authz配置的常見問題及解答

SVN全局配置文件
/home/svn/project/conf/subserve.conf 爲SVN的全局配置文件,這裏取消對應行的註釋並指定適當的值,注意不要行前不要留空格,具體如下

4.啓動SVN服務器

-d 表示以deamon方式運行,即後臺運行。 -r用於指定SVN服務根目錄,這裏我們指定的根目錄爲 /home/svn。
聯繫到authz文件中,[/]節中的權限則對應 /home/svn 下權限,[project:/]節中的權限即對應 /home/svn/project 下的權限。但是如果指定SVN服務根目錄爲 /home/svn/project,那麼authz文件中[/]代表目錄 /home/svn/project,而此時[project:/]則沒有對應目錄,因爲/home/svn/project下並沒有名爲project的倉庫,所以就會出錯。
如果修改了SVN的配置文件,那麼需要重啓SVN服務器才能使修改生效。

5.在防火牆中開放SVN端口
如果不在防火牆中開放SVN默認端口3690,則會出現,服務器本機可以訪問SVN服務,而其它網內機器無法連接SVN服務器的錯誤。
首先關閉selinux,修改 /etc/selinux/config 文件

SVN服務的默認端口爲3690,設置防火牆開放3690端口

6.測試SVN服務器
隨意找一個目錄,嘗試從SVN服務器簽出(check out)倉庫

在第一次簽出的時候會提示是否保存明文密碼(因爲SVN的密碼是明文保存的,所以SVN的賬戶安全依賴與Linux系統賬戶的安全)選擇”yes”的話下次就不需要在輸入密碼了,反之,選擇”no”的話下次操作還需進行身份驗證。如果想換個身份操作SVN或者密碼輸錯太多被拒絕,可以刪除用戶目錄下的 ~/.subversion 文件夾以清空身份信息。
如果能順利 check out revision 則表明獨立SVN服務器配置已成功。
這時不論是在服務器本機上還是其它客戶端機器,均能使用SVN服務。對於客戶端操作系統爲Windows的計算機,可以安裝TortoiseSVN進行相應的客戶端操作。


爲SVN服務器添加HTTP支持

經過上面的配置過程後,SVN服務器已經可以正常使用,但是,只能通過SVN協議,無法通過http協議訪問。爲SVN服務器添加HTTP支持可以使得用戶能用瀏覽器通過HTTP協議直接查看倉庫內容,同時也可以在代碼簽出提交時使用HTTP協議。

1.安裝必要包

2.轉換SVN明文密碼爲HTTP要求的加密格式
SVN的密碼是明文保存的,而http服務器不支持明文密碼,所以需要將SVN服務的明文密碼轉換爲http要求的加密格式,可以通過以下的perl腳本完成:
移動到 /home/svn/project/conf 目錄下,編輯perl腳本 PtoWP.pl  (此腳本的作者爲ha97)

爲腳本添加可執行屬性

在目錄 /home/svn/project/conf/passwd 所在目錄中運行PtoWP.pl腳本,對passwd文件進行轉換

轉換過程如下

轉換完成後目錄下會出現一個 webpasswd 文件,即爲http支持的密碼文件。

2.修改http.conf,使得http支持SVN

在httpd.conf文件的最後添加如下信息

看了不少文章,有部分文章說在這裏還需添加兩個模塊的語句,另外還需要 yum install subversion-deps-* 包來使得svn得到http的支持。

但是,根據官方的說明(Please note that the dependencies distribution subversion-deps-* is no longer available in 1.7 and later.)也就是說在1.7以及1.7之後的版本中不需要安裝依賴的subversion-deps-*包,而本人實驗證明,也不需要在httpd.conf文件中添加上述兩行加載模塊的語句。

修改SVN主目錄的所有者和所屬組爲Apache

3.在防火牆中開放httpd服務的80端口

如果不在防火牆中開放80端口,則會出前客戶機無法通過http協議連接SVN服務器的情況。
注:關於服務重啓命令,在fedora 19中採用的是systemctl restart service_name.service形式。

4.重啓httpd服務

5.通過瀏覽器測試
在瀏覽器地址欄輸入 http://your_svn_server_ip/project,在彈出的身份確認框中輸入用戶名密碼,能通過瀏覽器查看SVN倉庫。
同時可以通過http協議執行svn操作

參考網頁:

下面暫時就不參考 網頁 http://www.ha97.com/4467.html   了( 上面講的這步太複雜 )

PtoWP.pl 不需要建立. 按下面的做就好

安裝httpd:

cd /
find -name httpd
如果 httpd 找不到表示沒有安裝,需要安裝

yum install httpd

cd /etc/httpd/conf/
vi + httpd.conf

在 httpd.conf的末尾加上 :

############################################################################
<Location /Test >
DAV svn
SVNPath /home/svn/ repos/
AuthType Basic
AuthName "svn for repos"
AuthUserFile /home/svn/repos/conf/passwd
AuthzSVNAccessFile /home/ svn/repos/conf/authz
Satisfy all
Require valid-user
</Location>
LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so

LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so
ServerName localhost:80
############################################################################

下面再:

yum install mod_dav_svn

find / -name mod_dav_svn.so
find / -name mod_authz_svn.so

驗證這兩個 so存不存在

/etc/init.d/httpd restart

看是否報錯 (Stopping httpd    FAILED報錯沒事的)

ps -aux|grep svnserve
kill -9 29189
svnserve -d -r /home/web/Test

用小烏龜查看

svn://192.168.16.230/phone7_drore

看是否能訪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章