環境: A機器192.168.1.10 做爲SVN的服務端 (環境 apache svn ssh) php
環境: B機器 192.168.1.20 (環境 nginx php ssh svn 做爲客戶端) nginx
目的:開發人員上傳代碼到A機器時, 會自動更新到B機器上nginx代理服務器的web目錄, 以便開發人員直接訪問. web
環境搭建: shell
A機器apache+svn環境的配置. http://my.oschina.net/denglz/blog/89183 apache
配置好之後svn的基礎功能(檢出/更新 等)已經能夠實現了! vim
主要的配置文件有 安全
httpd.conf: apache的配置文件須要添加svn模塊. bash
authz.conf: 版本庫的權限控制文件! 服務器
passwd.conf: svn用戶的密碼文件! ssh
B機器nginx + php 環境的配置.
php能夠用yum安裝能解析就行, nginx安裝很簡單.
--------------------------------------------------------------------------------
下面是A機器環境的具體介紹!
A機器apache配置文件httpd.conf中svn模塊的內容
<Location /svn>
DAV svn
#SVNListParentPath on
SVNParentPath /data/svn/
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /data/svn/passwd.conf #在這裏已經指出了svn用戶密碼文件的位置
AuthzSVNAccessFile /data/svn/authz.conf #在這裏已經指出限制版本庫權限文件的位置
Require valid-user
</Location>
注意!!! 運行apache的用戶是www.
A機器上版本庫的位置
[root@A /]# ls /data/svn/ #/data/svn 是版本庫的主目錄
admin authz.conf passwd.conf
#admin是一個版本庫權限是777這樣是不安全的可是方便因此..! authz.conf 和 passwd.conf 也在 /data/svn目錄裏面!
A機器用戶的添加
/usr/local/apache2/bin/htpasswd -m /data/svn/passwd.conf deng用戶名
[root@A /]# cat /data/svn/passwd.conf
www:$apr1$1g7Hhl1.....加密...... #添加後的用戶名和密碼在passwd.conf文件裏.
A機器版本庫的權限設置
[root@ProjectServer /]# cat /data/svn/authz.conf
[admin:/]
deng = rw
環境介紹完畢如今先實現svn在本機上的自動更新吧!
scp /data/svn/admin/hooks/post-commit.tmpl /data/svn/admin/hooks/post-commit 複製一份post-commit (每當有提交請求的時候都有執行post-commit)
修改vim /data/svn/admin/hooks/post-commit 註銷原有的內容!添加以下內容
export LANG=en_US.UTF-8
SVN=/usr/bin/svn #必須寫絕對路徑
STATIC_DIR=/web/root/wwwdeng #注意權限問題
$SVN update $STATIC_DIR --username deng --password 123456 --no-auth-cache #必須加上--no-auth-cache否則會報錯!!
還有就是/data/svn/admin/hooks/post-commit 默認使用的shell類型是sh,最好改爲bash
這樣就實現了自動更新到本地的 /web/root/wwwdeng目錄了, 看網上好多文章還修改了/data/svn/admin/conf目錄下的三個文件,這是由於咱們用的是apache+ svn 用戶密碼文件和定義庫權限的文件在apache配置文件裏的svn模塊中已經指定了,因此這三個文件我就不須要在修改了, 他們須要修改是由於她們只安裝了svn,沒有和apache整合在一塊兒!! (apache和svn整合在一塊兒的用戶名密碼文件中的密碼是通過加密的!)
注意系統用戶www對post-commit文件要有可執行權限,而且對/web/root/wwwdeng目錄要有寫的權限!! 注意!!! 運行apache的用戶是www,svn經過apache實現檢出和提交.
svn更新到遠程機器的web目錄下. (實現遠程更新主要用的是ssh無密碼登錄)
首先實現 A機器經過ssh無密碼登錄B機器,
參考http://blog.csdn.net/lin_fs/article/details/7309714 寫的很詳細! #
實現ssh無密碼訪問後,修改A機器的post-commit文件
vim /data/svn/admin/hooks/post-commit #註釋掉全部內容,只添加下面一行內容!
/usr/bin/ssh -l root 192.168.127.183 "/bin/bash /home/www/svnup.sh" #svnup.sh
#post-commit 文件裏面不單單能夠寫svn的更新腳本,寫其它的也行!(開始我還覺得只能寫svn的更新命令呢!! 唉.....),
而後在B機器的/home/www/目錄建立svnup.sh可執行文件
vim /home/www/svnup.sh
/usr/bin/svn update /web/root/code #就這一行內容!
#總體來講是,若是admin版本庫有提交請求的時候自動會執行post-commit,post-commit可執行文件經過ssh來讓遠程機器自動更新svn.
主要注意! post-commit 的權限,和 svnup.sh的權限!!!!