前言
SVN服務器有2種運行方式:獨立服務器和借助apache。2種方式各有利弊,獨立SVN服務器不結合Apache安裝使用,連接獨立SVN服務器也不用HTTP協議。這是比較快捷的SVN服務器配置方法。以Apache的模塊方式運行詳解http://developer.51cto.com/art/201006/203438.htm。本次安裝時使用的是獨立用品方式。
SVN存儲版本數據也有2種方式:BDB和FSFS。因為BDB方式在服務器中斷時,有可能鎖住數據所以還是FSFS方式更安全一點,我安裝時也使用的是FSFS方式。
版本庫數據存儲對照表
特性 | Berkeley DB | FSFS |
---|---|---|
對操作中斷的敏感 | 很敏感;系統崩潰或者權限問題會導致數據庫“塞住”,需要定期進行恢復。 | 不敏感。 |
可只讀加載 | 不能 | 可以 |
存儲平台無關 | 不能 | 可以 |
可從網絡文件系統訪問 | 不能 | 可以 |
版本庫大小 | 稍大 | 稍小 |
可擴展性:修訂版本樹的數量 | 數據庫,沒有限制 | 許多古老的本地文件系統在處理單一目錄包含上千個條目時出現問題。 |
可擴展性:文件較多的目錄 | 較慢 | 較快 |
速度:檢出最新的代碼 | 較快 | 較慢 |
速度: 大的提交 | 較慢,但是時間被分配在整個提交操作中 | 較快,但是最后較長的延時可能會導致客戶端操作超時 |
組訪問權處理 | 對於用戶的umask設置十分敏感,最好只由一個用戶訪問。 | 對umask設置不敏感 |
功能成熟時間 | 2001年開始使用 | 2004年開始使用 |
安裝說明
系統環境:CentOS 6.5
安裝方式:yum install (源碼安裝容易產生版本兼容的問題)
安裝軟件:系統自動下載SVN軟件
#檢查是否安裝了低版本的SVN
[root@localhost /]#rpm -qa subversion
#如果存儲舊版本,卸載舊版本SVN
[root@localhost modules]#yum remove subversion
驗證安裝
檢驗已經安裝的SVN版本信息
[root@localhost modules]# svnserve --version
svnserve,版本 1.6.11 (r934486)
編譯於 Jun 23 2012,00:44:03
版權所有 (C) 2000-2009 CollabNet。
Subversion 是開放源代碼軟件,請參閱 http://subversion.tigris.org/ 站點。
此產品包含由 CollabNet(http://www.Collab.Net/) 開發的軟件。
下列版本庫后端(FS) 模塊可用:
* fs_base : 模塊只能操作BDB版本庫。
* fs_fs : 模塊與文本文件(FSFS)版本庫一起工作。
Cyrus SASL 認證可用。
添加環境變量
[root@localhost /]# vim /etc/profile
代碼庫創建
SVN軟件安裝完成后還需要建立SVN庫
[root@localhost modules]#mkdir -p /opt/svn/ #創建SVN根目錄
[root@localhost modules]#svnadmin create /opt/svn/repo #創建repo測試庫
執行上面的命令后,自動建立repo測試庫,查看/opt/svn/repo 文件夾發現包含了conf, db,format,hooks, locks, README.txt等文件,說明一個SVN庫已經建立。
配置代碼庫
進入上面生成的文件夾conf下,進行配置
[root@localhost modules]#cd /opt/svn/repo/conf
用戶密碼passwd配置
[root@localhost password]#cd /opt/svn/repo/conf
[root@admin conf]#vim passwd
內容如下:[users]
# harry = harryssecret
# sally = sallyssecret
hello = 123
這樣我們就建立了hello用戶, 123密碼
權限控制authz配置
[root@admin conf]#vim authz
目的是設置哪些用戶可以訪問哪些目錄,向authz文件追加以下內容:
[groups] #組
admin = hello,www #創建一個admin組,將用戶加入到組
[/] #根目錄權限設置(就是“svn”這個文件夾)
aaa = rw #aaa對svn下的所有版本庫有讀寫權限
[repo:/] #repo:/,表示對repo版本庫下的所有資源設置權限
@admin = rw #admin組的用戶對repo版本庫有讀寫權限
[repo2:/occi], ,表示對版本庫repo2中的occi項目設置權限
[repo2:/occi/aaa], ,表示對版本庫2中的occi項目的aaa目錄設置權限 權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權限可以是w、r、wr和 空,空表示沒有任何權限。
以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
服務svnserve.conf配置
[root@admin conf]#vim svnserve.conf
追加以下內容:
[general]
#匿名訪問的權限,可以是read,write,none,默認為read
anon-access = none
#使授權用戶有寫權限
auth-access = write
#密碼數據庫的路徑
password-db = passwd
#訪問控制文件
authz-db = authz
#認證命名空間,subversion會在認證提示里顯示,並且作為憑證緩存的關鍵字
realm = /opt/svn/repo
以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
配置防火牆端口
[root@admin conf]#vim /etc/rc.d/rc.local
添加 iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
保存后重啟防火牆
[root@localhost conf]#service iptables restart
停止重啟SVN
[root@localhost password]# killall svnserve //停止
[root@localhost password]# svnserve -d -r /opt/svn/repo // 啟動
如果已經有svn在運行,可以換一個端口運行
svnserve -d -r /opt/svn/ --listen-port 3391
實現版本庫與服務器WEB項目同步
利用SVN鈎子實現代碼同步到WEB目錄
思路:找 到SVN Server中的倉庫(Repositories)文件夾的位置,在相應的項目文件夾中找到hooks文件夾。在該文件夾中添加一個post- commit文件;當有commit動作發生時(提交到SVN Server時)就會執行這個post-commit文件,在該文件實現數據的復制。
實例:
[root@localhost /] # cd /opt/svn/repo
[root@localhost repo] # vim post-commit
----------------------------------------------
#!/bin/sh
export LANG=zh_CN.UTF-8
SVN=/usr/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 -R 755 post-commit
使用checkout建立一個工作復本,到網站根目錄下
# svn co svn://127.0.0.1/repo /usr/local/apache2/htdocs/www.example.com/
重啟SVN