在Linux系統下Apache完美集成SVN(Yum安裝版)

svn(subversion)是目前最流行的開源版本控制工具。使用apache集成svn比svn服務獨立運行好處多多,最大的優勢是使svn使用http80端口檢出,防火牆能夠少開放一個端口,減小服務器安全風險和下降維護成本。下面在CentOS6.0系統下經過yum安裝的方式,介紹在linux下apache完美集成svn。php

1、規劃目錄:
網站地址 http://www.aiezu.com
網站根目錄 /storage/web/aiezu
SVN地址 http://www.aiezu.com/svn/aiezu
SVN數據倉庫目錄 /storage/svn/aiezu
2、安裝apache:

安裝apache包:mysql

yum -y install httpd #必須
yum -y install mysql mysql-server php php-mbstring php-gd #可選安裝

建立站點根目錄:linux

mkdir -p /storage/web/aiezu

創建基於域名的虛擬主機,vim /etc/httpd/conf.d/www.aiezu.com.conf添加如下內容:web

NameVirtualHost *:80
<Directory 「/storage/web/aiezu」>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin admin@aiezu.com
DocumentRoot /storage/web/aiezu
ServerName www.aiezu.com
ErrorLog logs/www.aiezu.com-error_log
CustomLog logs/www.aiezu.com-access_log common
</VirtualHost>

啓動apache和mysql服務:sql

service mysqld start
service httpd start
3、安裝和配置apache SVN模塊:

安裝apache服務SVN模塊mod_dav_svn:apache

yum -y install mod_dav_svn
#會自動安裝mod_dav_svn及其依賴包:mod_dav_svn-1.6.11-9,neon-0.29.3-2,pakchois-0.4-3.2,subversion-1.6.11-9

創建svn數據倉庫:vim

mkdir -p /storage/svn/aiezu
svnadmin create /storage/svn/aiezu

創建svn賬號並設置密碼:安全

htpasswd -c /storage/svn/aiezu/conf/passwd svnuser

分配svn賬號權限:bash

[aiezu:/]
svnuser = rw #設置aiezu數據倉庫svnuser用戶有讀寫權限

配置svn數據倉庫文件系統權限:服務器

chown -R apache.apache /storage/svn/aiezu
chcon -R -t httpd_sys_content_t /storage/svn/aiezu #selinux權限

配置svn數據倉庫checkout地址:
vim /etc/httpd/conf.d/subversion.conf,添加以下內容:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath /storage/svn
AuthType Basic
AuthName 「Authorization」
AuthUserFile /storage/svn/aiezu/conf/passwd
AuthzSVNAccessFile /storage/svn/aiezu/conf/authz
Require valid-user
</Location>

從新加載apache配置:

service httpd reload
4、配置svn post-commit鉤子:

當咱們但願在像svn數據倉庫提交新版本時,自動將更新同步到咱們的網站,這時咱們可使用svn鉤子,svn鉤子必須放在svn數據倉庫的hooks目錄下,這裏咱們要添加是svn commit(svn提交)鉤子post-commit:
vim /storage/svn/aiezu/hooks/post-commit,添加以下內容:

#!/bin/bash
export LANG=」zh_CN.UTF-8″
export LANG=」zh_CN.UTF-8″
export LC_CTYPE=」zh_CN.UTF-8″
svn update /storage/web/aiezu/ –username=svnuser –password=svnpass –non-interactive

授予可執行權限:

chmod a+x /storage/svn/aiezu/hooks/post-commit

檢出版本庫:

svn checkout http://www.aiezu.com/svn/aiezu /storage/web/aiezu/
5、常見錯誤及其解答:

一、svn checkout(svn檢出)時錯誤一:

The URI does not contain the name of a repository. [403, #190001]

解答:這是因爲subversion.conf文件中SVNParentPath路徑設置不正確引發的,SVNParentPath路徑必須爲svnadmin create生成數據倉庫路勁的父目錄,如上面創建數據倉庫的命令爲svnadmin create /storage/svn/aiezu,則SVNParentPath爲/storage/svn。
二、svn checkout時錯誤二:

Unable to connect to a repository at URL ‘http://www.aiezu.com/svn’
Access to ‘http://www.aiezu.com/svn’ forbidden

解答:svn數據倉庫的SVN URL地址不正確,當subversion.conf中設置SVNListParentPath on時,SVN URL地址爲SVNParentPath下的具體數據倉庫,而不是SVNParentPath指定的目錄。
三、svn checkout時錯誤三:

Unable to connect to a repository at URL http://www.aiezu.com/svn/test’
Could not open the requested SVN filesystem

解答:svn數據倉庫的SVN URL地址不正確,在SVNParentPath下找不到SVN URL指定的數據倉庫。
四、svn提交(svn commit)時出現以下錯誤:

post-commit hook failed (exit code 1) with output:
svn: Can’t open file ‘/storage/web/aiezu/.svn/lock’: Permission denied

解答:這是svn提交調用的post-commit鉤子沒有權限寫/storage/web/aiezu/.svn目錄引發的。apache集成的svn是使用apache用戶調用post-commit鉤子的,因此必須保證apache用戶對.svn有寫權限, 執行chown -R apache.apache /storage/web/aiezu就能夠了。

相關文章
相關標籤/搜索