基於 CentOS 7 搭建支援 HTTP 協議的 SVN 伺服器

Nix.Huang發表於2015-05-26

前提條件:

請先關閉防火牆或者selinux,當然你也可以進行相應的配置,讓某些埠通過

我比較暴力,採用關閉處理

systemctl disable firewalld
systemctl stop firewalld

disable是讓其不下次開機啟動,stop是結束它。

對於selinux

改/etc/selinux/config檔案的”SELINUX=enforcing”為”SELINUX=disabled”

然後執行”setenforce 0″不用重啟地關閉selinux

一、安裝相應的軟體

#svn伺服器
yum install subversion
#apache伺服器,讓我們的svn 伺服器支援http協議訪問,而不僅是svn://協議
yum install httpd
#apache操作svn模組
yum install mod_dav_svn

二、相應的配置

1、建立倉庫

預設安裝的svn伺服器的根倉庫(root repository)為/var/svn,所以我們在這個目錄建立我們的倉庫

svnadmin create repo1

將建立/var/svn/repo1 目錄,在repo1目錄下有相應的配置檔案

2、倉庫配置

/var/svn/repo1/conf下的三個配置檔案的作用為

svnserve.conf :存放svn伺服器的認證授權策略:比如匿名可讀,認證的使用者可寫,以及指定相應的使用者資訊儲存位置(passwd)和認證規則檔案的位置(authz)

passwd:使用者資訊儲存檔案,以username=password鍵值對的方式儲存

authz:認證規則

注意 鍵值對的等號(=)前後的空格

對於svnserve.conf,取消以下行的註釋即可

anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

對於passwd,新增一個使用者

root = 123456

對於authz,新增如下資訊:

[repo1:/]
root = rw
* = r

表示root具有讀寫許可權,’*’任何人都能讀,如果沒有這個配置,那麼檢視log會報異常。

3、測試

啟動伺服器:

systemctl start svnserve.service

使用tortoiseSVN, svn://ip/repo1 ,如果能正常訪問,那麼配置OK,

三、Http訪問方式的配置

httpd的預設的配置檔案為/etc/httpd/conf/httpd.conf

1、先備份一下,防止改錯:

cp httpd.conf httpd.conf.bak

 

2、修改

找到檔案的’LoadModule’
在該附近載入mod_dav和mod_dav_svn模組的配置:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so

在該檔案的結尾處新增如下配置

<Location /svn>
DAV svn
SVNParentPath  /var/svn
# Authentication: Basic
AuthName "Subversion repository"
AuthType Basic
AuthUserFile /etc/httpd/svn-auth.htpasswd

# Authorization: Authenticated users only
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>

“<Location /svn>”中的”/svn”表示我們的svn的訪問URL為”http://ip/svn”,

“DAV svn”表示使用”mod_dav_svn”模組,dav是一種http 1.1擴充套件協議,mod_dav_svn只是該協議的一種應用。

“SVNParentPath  /var/svn”表示服務”http://ip/svn”請求時,使用”/var/svn”路徑下相應的內容。

AuthName 表示輸入使用者名稱和密碼時的提示資訊

AuthType 認證型別,這裡我們使用基本的認證型別

AuthUserFile 表示認證檔案的位置,我們待會建立它。

LimitExcept節點指示只對寫請求需要使用者認證。

3、建立svn-auth.htpasswd 檔案

htpasswd   -c -m /etc/httpd/svn-auth.htpasswd root

按提示輸入兩次密碼,我們就建立了一個’root’,

4、讓apache使用者對”/var/svn/repo1″目錄擁有寫許可權。

httpd以apache使用者啟動的,所以我們要讓其擁有對”/var/svn/repo1″的寫許可權。由於我的環境的”/var/svn/repo1″的擁有者是”root:root”,所以我將apache加入到root組中,讓回讓root組也擁有許可權來解決的。

#將使用者apache加入root組
usermod -a -G root apache
#讓group對/var/svn/repo1目錄也有寫許可權
chmod -R g+w  /var/svn/repo1
#檢視apache使用者屬於的組
groups apache

5、測試

systemctl start httpd.service

現在就可以通過”http://ip/repo1″來訪問我們的svn 伺服器了

提示:

httpd 的錯誤日誌檔案為/var/log/httpd/error_log,如果出現問題,隨時檢視該檔案獲得提示。

參考文獻:

http://svnbook.red-bean.com/en/1.7/svn.serverconfig.httpd.html

相關文章