關於SVN實時同步到遠程服務器的方案
公司裏有2臺測試服務器,一 臺裏面是開發的庫文件,另一臺是用來測試的。現在開發的提交了文件之後,每次需要手動的更新到另一臺服務器上,很麻煩,所以有了這個方案,不過還沒測試過 大量文件的時候會不會有什麼問題。估計svn大量文件的時候會卡死,本文只是做一個測試,講的是一個思路,哪位童鞋有更好的思路聯繫我哦。
思路:首先在SVN庫服務器上建立一個目錄,利用svn自帶的post-commit來把提交的文件同步到該目錄,然後利用sersrnc實時同步到遠程的服務器。
環境:SVN服務器:192.168.2.199
Web測試服務器:192.168.2.117
首先在199上面安裝svn,安裝過程不再描述,在/var/svn/test建立一個test庫,用import把文件上傳到庫裏面,新建一個目錄/data用checkout把該庫遷出到/data目錄
在199上面安裝sersync
解壓sersync2.4_32bit_binary.tar.gz
進入到GNU-Linux-x86目錄
修改confxml.xml
修改這3行文件,
<host hostip="localhost" port="8008">表示本機IP和端口
<localpath watch="/data"> 要監控本機的目錄,
<remote ip="192.168.2.117" name="web"/> 要推送的遠程服務器的IP和模塊的名稱
<auth start="true" users="test" passwordfile="/etc/rsync.pas"/>
啓用密碼驗證,指定驗證用戶名和密碼文件的位置
然後創建/etc/rsync.pas配置文件,裏面寫入test用戶的密碼,然後更改該文件的權限爲600
Chmod 600 /etc/rsync.pas
然後在192.168.2.117裏面安裝rsync
rsync-3.0.9.tar.gz
./configure --prefix=/usr/local/rsync && make && make install
編輯rsync的配置文件,默認位置問/etc/rsyncd.conf
uid=root //rsync運行的用戶
gid=root //rsync運行的組
max connections=36000 //最大連接數
use chroot=no //不啓用chroot
port=873 //端口
log file=/var/log/rsyncd.log //日誌文件
pid file=/var/run/rsyncd.pid //pid文件
lock file=/var/run/rsyncd.lock //鎖文件
[web] //模塊的名稱
path = /www/test //測試服務器網站的路徑
ignore errors = yes //忽略錯誤
read only = no //該目錄可讀可寫
auth users = test //需要的用戶名
secrets file = /etc/rsyncd.secrets //密碼文件存放的位置
然後創建/etc/rsyncd.secrets密碼文件,裏面寫入用戶名和密碼可以寫入多個用戶
Test:test
更改該文件的權限爲600 chmod 600 /etc/rsyncd.secrets
然後啓動守護進程/usr/local/rsync/bin/rsync –daemon
再在192.168.2.199上面啓動sersync
這個時候199上面的/data目錄和117上面的/www/test目錄已經同步了,在199上面更改/data目錄下面的文件就會同步更新到117上面的/www/test目錄裏面了
現在需要做的就是如何讓開發人員在提交的時候更新到測試服務器
首先在199上面把庫文件遷出到/data目錄下
Svn checkout svn://192.168.2.199/test /data
遷出之後,/data目錄已經有文件了,這個時候去查看117上面的/www/test目錄裏面也是有文件的。
在test庫下面有一個hooks文件夾,裏面有svn的鉤子
我們可以藉助這個鉤子來觸發當提交的時候,把文件同步更新到/data目錄下面,然後sersync把該文件同步到遠程服務器上
在hooks目錄下面
Cp pre-commit.tmpl post-commit
post-commit這個文件就是當提交之後會執行的動作,編輯該文件
vim post-commit
export LANG=zh_CN.UTF-8 //指定編碼
WEB=/data/ //定義一個被更新的目錄
SVN=/usr/local/subversion/bin/svn //定義SVN程序的路徑
$SVN update $WEB --username wugang --password 2011110 //執行svn 的update命令,後面是指定用戶和密碼
然後給post-commit可執行權限,然後重啓svn
這個時候當svn提交的時候,會通過該腳本同步到本地服務器的/data目錄,然後sersync服務會把/data目錄同步到遠程測試服務器的/www/test目錄下面。