設定檔前兩行便是告訴 Apache 要載入兩個模組:
dav_svn_module - subversion 模組本身
authz_svn_module - subversion 認証模組
譬如說,我們規劃以後所有不同的 repository 都要放在 /var/www/svn 下,以不同的資料夾名稱存放,那我們可以這樣做:
cd /var/www/svn
切換到 /var/www/svn 資料夾下,
svnadmin create stuff
建立一個名為 stuff 的 repository,
chown -R apache.apache stuff
更改 stuff 資料夾及其內所有檔案資料夾的 owner 及 group 為 apache,
所以便可以在 /var/www/svn/ 內看到一個名為 stuff 的 repository(資料夾)
再來,要讓使用者能夠從網頁上看到剛才做的 stuff,
在 /etc/httpd/conf.d/subversion.conf 內加入如下設定:
這行告訴 Apache 有一個網頁資料夾 repos,在網頁根目錄下。
DAV svn
其實 svn(subversion) 必須依附在 DAV(mod_dav) 模組下,說是模組的模組,或模組的外掛都可以,這行參數便是告訴 Apache 這裡要用 dav 模組 svn 協議。
就是用 DAV 分享檔案,用 svn 控管。
SVNParentPath /var/www/svn
設定 SNV 的父目錄是在 /var/www/svn
設到這裡,我們便可以從瀏覽器中看到 stuff 這個 repository 了。
在瀏覽器的網址列中輸入 http://your_server_ip/repos/stuff 可看到如下畫面:
看到這畫面,表示已設定好可以使用了。
它沒有使用者認證,所有人都可以使用它,如果要控管使用者只能讀取,有權限的使用者才能上傳,可從 Apache 下手設定。
再回頭看看 /etc/httpd/conf.d/subversion.conf 設定檔,這次我們在 Location 標籤中間加上一些參數:
有沒有發現,這些參數其實在設定檔內原本就有範例了,它們被 LimitExcept 標籤包起來,其中
<LimitExcept GET PROPFIND OPTIONS PREPORT>
AuthType Basic
認證類型 基本型
AuthName "Authorization Realm"
給它個名字,它會出現在使用者登入時的提示視窗。
AuthUserFile /path/to/passwdfile
認證使用者的密碼檔。
Require valid-user
要求必須是有效用戶。
執行 service httpd restart 以重新啟動 Apache,然後輸入下列指令來新增使用者:
htpasswd -cm /etc/httpd/svn_user_passwd william
htpasswd 是 Apache 的使用者認證檔指令,第一次新增檔案要給參數 -c ,參數 m 是要它支援 md5 的編碼方式,後面接檔案要放的位置及檔名,這裡必須要跟剛才的 /etc/httpd/conf.d/subversion.conf 設定檔一樣才可以,最後是使用者名稱。它會要求輸入兩次密碼,如下圖:
若要再增加一位使用者 may 的話,請輸入下列指令新增:
htpasswd -m /etc/httpd/svn_user_passwd may
這裡的參數就不須要加 -c 了,因為檔案已存在。
/etc/httpd/svn_user_passwd 的檔案內容如下圖所示:
好了,設到這裡,我們建了一個名稱為 stuff 的 repository,大家都可以看得到內容,但只有使用者 william 及 may 可以更新它。
如果說,我們的 repository 只讓有權限的人看,其他任何人完全不能看到呢?
這時我們只要改 /etc/httpd/conf.d/subversion.conf 檔案內容,把<LimitExcept>標籤用 # 字號標註起來即可,如下圖:
把 LimitExcept 標籤用 # 字號擋住讓它變成說明行以後,重新啟動 Apache,就變成只有認證通過的使用者才能多看到及使用 repository。
如果有多個 repository 要如何設定?
只要在 /var/www/svn 內,再建立即可,指令如下:
cd /var/www/svn
svnadmin create abc
chown -R apache.apache abc
如果另有一個 repository 要放另一個路徑下,另外管理,要如何設定?
在規劃好的路徑下新增 repository,譬如 /home/william/svn,指令如下:
cd /home/william/svn
svnadmin create doc
chown -R apache.apache abc
另外在 /etc/httpd/conf.d/subversion.conf 檔內也要加入如下設定:
上面圖片中分成兩段,上半部是先前的範例設定,下半部反白的部份就是為了目前的範例而增加的。
幾乎與上半部一模模一樣樣,只有兩個地方稍有不同,其中:
<Location /doc>
這行告訴 Apache 有一個網頁資料夾 doc,在網頁根目錄下。
SVNPath /home/william/svn/doc
要注意的是,這個 SVNPath 與 SVNParentPath 是不同的用法,
SVNPath 是指定 repository 的位置,像本例在 /home/william/svn/ 下建了一個 repository,名稱是 doc,所以 SVNPath 後面要跟著 /home/william/svn/doc。
SVNParentPath 是指定 repository 的父目錄位置,如先前範例,在 /var/www/svn 下面建立了 stuff 及 abc 兩個 repository,所以 SVNParentPath 後面要跟著 /var/www/svn。
最後重新啟動 Apache 即可,指令如下:
service httpd restart
如果有多位使用者,但大家的權限不同,要如何設定?
/etc/httpd/conf.d/subversion.conf 的一開始就先載入了兩個模組,這裡就是會用到其中一個模組:mod_authz_svn.so
有了這個模組,我們就可以放一個設定檔,專門來設定使用者進入 repository 時,分別是什麼權限。
首先在 /etc/httpd/conf.d/subversion.conf 內加入一行如下:
反白那行便是這次加進去的。
AuthzSVNAccessFile /etc/httpd/svn_authz
這個參數便是告訴 Apache 有一個使用者權限控制檔,檔名可自取。
檔案內容範例如下:
[group] 設定使用者群組。
admin = william admin 這個群組的組員是 william。
manager = may manager 這個群組的組員有 may。
rd = user1,user2 rd 這個群組的組員有 user1 及 user2。
[/] 設定 repository 的根目錄的權限。
@admin = rw admin 這個群組的權限是可讀(r)可寫(w)。
* = 其餘所有人都沒有權限。
[stuff:/] 設定 stuff 這個 repository 的權限。
@admin = rw admin 這個群組的權限是可讀(r)可寫(w)。
@manager = rw manager 這個群組的權限是可讀(r)可寫(w)。
@rd = r rd 這個群組的權限是只能讀(r)不能寫入。
* = 其他所有人都沒有權限。
[abc:/] 設定 abc 這個 repository 的權限。
@admin = rw admin 這個群組的權限是可讀(r)可寫(w)。
@rd = rw rd 這個群組的權限是可讀(r)可寫(w)。
* = r 其他所有人都是只有讀(r)的權限。
[doc:/] 設定 doc 這個 repository 的權限。
@admin = rw admin 這個群組的權限是可讀(r)可寫(w)。
* = r 其他所有人都只能讀(r)。
[william_repos:/] 設定 william_repos 這個 repository 的權限。
william = rw william 這個使用者的權限是可讀(r)可寫(w)。
* = 其他人完全沒有權限。
以上便是 Subversion Server 的大致設定。
相關網站,文件:
http://www.iq180.com.tw/2012/06/version-control-with-subversion-1411m.html
http://subversion.apache.org/
http://zh.wikipedia.org/wiki/Subversion
沒有留言:
張貼留言