总体如下图
152404854.jpg
svn服务器也是程序的开发测试服务器,文件分发服务器从svn服务器上拿到文件然后分发到线上各个web服务器(具体视公司服务器架构而定)。
##svn服务器的搭建##
在这里模拟开发测试环境(依据实际情况不同),测试后需要分发的文件都提交的svn服务器上,由文件分发服务器来取然后分发到各个在线服务器。
yum -y install xinetd 
yum -y install subversion 
cd    /etc/xinetd.d 
vim subversion ,添加如下内容
service svn 

        disable = no 
        port = 3690 
        socket_type = stream 
        protocol = tcp 
        wait = no 
        user = svn 
        server = /usr/bin/svnserve 
        server_args = -i -r /opt/svnroot 
}

建立svn仓库
mkdir -p /opt/svnroot 
svnadmin create /opt/svnroot/www.gaby.com 
cd /opt/svnroot/www.gaby.com/conf
vim  svnserve.conf ,修改如下内容
anon-access = none 
auth-access = write 
password-db = passwd 
#authz-db = authz 
realm = My First Repository
ps:#authz-db = authz这项不要开,不然会报认证失败错误
vim passwd ,修改如下内容
[users] 
# harry = harryssecret 
# sally = sallyssecret 
gaby = redhat
然后执行下面两条命令
chmod 400 passwd 
service xinetd restart
###同步分发服务器设置###
yum -y install xinetd 
yum -y install rsync 
yum -y install subversion 
cd    /etc/xinetd.d
vim  rsync,修改内容如下
service rsync 

                disable = no 
                flags                     = IPv6 
                socket_type         = stream 
                wait                        = no 
                user                        = root 
                server                    = /usr/bin/rsync 
                server_args         = --daemon 
                log_on_failure    += USERID 
}

设置rsync密码文件
vim  /etc/rsyncd.pwd,添加
redhat
注意,rsync服务器端只需要一个密码文件,并且密码文件里不能有用户账户如果写成gaby:redhat会报如下错误(@ERROR: auth failed on module gabyhtml
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
),权限是600
service xinetd restart
分发同步脚本(可以根据实际情况,进行不同修改)
wwwdir=/data0/htdocs/www/www.gaby.com 
website="192.168.2.100" 
[ $1 = gaby ] || exit 10 
[ $2 = html ] || exit 11 
if [[ $3 = -r ]];then 
                                                #回滚功能 
                svn up $3 $4 $svndir --username gaby --password redhat 
                svn export --force $svndir $wwwdir 
                chown -R www:www $wwwdir 
                chmod -R 700 $wwwdir 
                find /data0/htdocs/www/*gaby.com -name "Thumbs.db" -exec rm -rf {} \; 
else 
                svn up $svndir --username gaby --password redhat 
                svn export --force $svndir $wwwdir 
                chown -R www:www $wwwdir 
                chmod -R 700 $wwwdir 
                find /data0/htdocs/www/*gaby.com -name "Thumbs.db" -exec rm -rf {} \; 
fi 
for I in $website;do 
                rsynchtml=gaby@$website::gabylinuxhtml 
                rsync -avz --delete --password-file=/etc/rsyncd.pwd $svndir/ $rsynchtml 
                echo "the sever $website is rsynced." 
done
注意为了使这个分发脚本正常运行,需要做下面工作website="192.168.2.65" ,有多台服务器只需要把ip添加到这里website="192.168.2.100,192.168.2.101" 
把svn的内容拿的本地来/data0/htdocs/svn.www
mkdir -p /data0/htdocs/svn.www 
mkdir -p /data0/htdocs/www/www.gaby.com 
svn co svn://192.168.2.65/www.gaby.com    --username gaby --password redhat
脚本使用方法如下:
更新
./upload.sh gaby html
回滚
 ./upload.sh gaby html  -r n
(n表示版本号)
###web上rsync客户端配置###
yum -y install xinetd 
yum -y install rsync 
vim  rsync,修改内容如下
service rsync 

                disable = no 
                flags                     = IPv6 
                socket_type         = stream 
                wait                        = no 
                user                        = root 
                server                    = /usr/bin/rsync 
                server_args         = --daemon 
                log_on_failure    += USERID 
}

设置rsync配置文件和密码文件
vim /etc/rsyncd.conf 添加如下内容
uid=root 
gid=root 
max connections=4 
use chroot=no 
log file=/var/log/rsyncd.log 
pid file=/var/run/rsyncd.pid 
lock file=/var/run/rsyncd.lock 
#auth users=root 
secrets file=/etc/rsyncd.pwd 

[gabyhtml] 
path=/www/www.gaby.com 
#comment = 
ignore errors 
read only = no 
list = no 
auth users = gaby
vim /etc/rsyncd.pwd添加如下内容
gaby:redhat
chmod 400  /etc/rsyncd.pwd
到此一个完整的同步分发加版本控制应用实现。