CentOS系统下svn+rsync实时发布程序
时间:2014-03-04 00:05 来源:linux.it.net.cn 作者:IT网
思路:svn服务器钩子触发rsync同步脚本,同步web服务器上的rsync定义的模块。
==========================WEB服务器(RSYNC)========================
第一步:安装
rsync
yum -y
install
rsync
第二步:配置
#默认无该文件
#vim /etc/rsyncd.conf
uid=root
gid=root
use chroot=no
max connections=200
timeout=600
pid
file
=
/var/run/rsyncd
.pid
lock
file
=
/var/run/rsync
.lock
log
file
=
/var/log/rsyncd
.log
[a.
test
.cn]
path=
/data/web/a
.
test
.cn/
#exclude=conf/*.php
comment = this ia a.
test
.cn
ignore errors
read
only=
false
list=
false
hosts allow=172.31.0.12
hosts deny=*
auth
users
=
test
secrets
file
=
/shell/rsync-passwd/rsync
.
passwd
注:use chroot=no 时,同步后DES的文件主或组如果有,则显示名,即使ID不一样;
use chroot=
yes
时,如果两台机器同名的ID不同,则服务端只会显示SRC的ID,造成权限问题。
编辑
rsync
的用户认证配置文件
# cat /shell/rsync-passwd/rsync.passwd
test
:test123
#chmod 600 /shell/rsync-passwd/rsync.passwd
第三步:启动
rsync
服务
/usr/bin/rsync
--daemon
echo
"/usr/bin/rsync --daemon"
>>
/etc/rc
.
local
第四步:客户端测试(172.31.0.12上)
# cat /shell/rsync-passwd/rsync.passwd
test
:test123
#chmod 600 /shell/rsync-passwd/rsync.passwd
rsync
-vzrtopgl --progress --delete --exclude=.svn
/data/web/a
.
test
.cn/
test
@172.31.0.15::a.
test
.cn --password-
file
=
/shell/rsync-passwd/rsync
.
passwd
或
RSYNC_PASSWORD=test123
rsync
-vzrtopgl --progress --delete --exclude=.svn
/data/web/a
.
test
.cn/
test
@172.31.0.15::a.
test
.cn
(完成)
注:修改配置文件和用户密码不需要重启服务
===========================SVN服务器==============================
第一步:安装subversion
tar
zxvf subversion-1.7.4.
tar
.gz
cd
subversion-1.7.4
#下载apr,并执行buildconf生成需要的文件
svn co http:
//svn
.apache.org
/repos/asf/apr/apr/branches/1
.3.x apr
.
/apr/buildconf
#下载apr-util,并执行buildconf生成需要的文件
svn co http:
//svn
.apache.org
/repos/asf/apr/apr-util/branches/1
.3.x apr-util
.
/apr-util/buildconf
#下载sqlite3.c,解压后放到subversion解压的源码目录中,只确保有sqlite3.c即可。
# ll sqlite-amalgamation/
total 5004
-rw-r--r-- 1 root root 5121966 Dec 17 11:34 sqlite3.c
.
/configure
--prefix=
/usr/local/svn
make
&&
make
install
第二步:创建svn库、配置好权限
1、创建库
mkdir
/data/svndata
/usr/local/svn/bin/svnadmin
create
/data/svndata/a
.
test
.cn
/usr/local/svn/bin/svnadmin
create
/data/svndata/b
.
test
.cn
/usr/local/svn/bin/svnadmin
create
/data/svndata/c
.
test
.cn
2、配置密码和权限文件
mkdir
/data/svnpasswd
#cat /data/svnpasswd/passwd
[
users
]
aaa=aaapwd
bbb=bbbpwd
ccc=cccpwd
xxx=xxxpwd
yyy=yyypwd
zzz=zzzpwd
#cat /data/svnpasswd/authz
[
groups
]
a.
test
.cn = aaa
b.
test
.cn = bbb
c.
test
.cn = ccc
other = xxx,yyy,zzz
[a.
test
.cn:/]
@a.
test
.cn=r w
xxx=r
*=
[b.
test
.cn:/]
@b.
test
.cn=rw
yyy=r
*=
[c.
test
.cn:/]
@c.
test
.cn=rw
@other=r
*=
3、配置所有svn库使用上面的用户和权限来集中管理权限。
修改所有库中的conf
/svnserve
.conf为以下内容
[general]
anon-access = none
auth-access = write
password-db =
/data/svnpasswd/passwd
authz-db =
/data/svnpasswd/authz
# realm = My First Repository
# force-username-case = none
[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256
4、启动服务
/usr/local/svn/bin/svnserve
-d --listen-port 4399 -r
/data/svndata
echo
"/usr/local/svn/bin/svnserve -d --listen-port 4399 -r /data/svndata"
>>
/etc/rc
.
local
5、配置钩子文件(第个库根据需要单独的配置)原理:每次commit,触发post-commit脚本。确保有执行权限。
拷贝模板文件为post-commit
chmod
700 post-commit
[root@centos-6 ~]
# cat /data/svndata/ a.test.cn/hooks/post-commit
#!/bin/sh
#下面这个变量实际上是svn库的绝对路径,未使用。
#REPOS="$1"
#下面这个变量实际上是每次commit后的版本,未使用。
#REV="$2"
export
LANG=en_US.UTF-8
/usr/local/svn/bin/svn
update --username aaa --password
"aaapwd"
/data/web/a
.
test
.cn
if
[ $? -
eq
0 ]
then
chown
-R root.dev
/data/web/atest
.cn
/bin/bash
/shell/rsync-script/a
.
test
.cn.sh >
/dev/null
2>&1
fi
6、配置钩子文件触发的脚本
[root@centos-6 ~]
# cat /shell/rsync-script/a.test.cn.sh
#/bin/bash
IP=
"172.31.0.15"
Auth_module=
"a.test.cn"
Localdir=
"/data/web/a.test.cn/"
Auth_user=
"test"
Passwd_file=
"/shell/rsync-passwd/rsync.passwd"
Exc=
" --exclude=.svn"
rsync
-vzrtopgl --progress --delete ${Exc} ${Localdir} $Auth_user@${IP}::${Auth_module} --password-
file
=${Passwd_file}
访问
rsync
密码文件,权限必须为600,root.root
[root@centos-6 ~]
# cat /shell/rsync-passwd/rsync.passwd
test123
7、测试
客户端在a.
test
.cn库中提交文件,查看是否实时同步到
rsync
服务器定义的web目录中。
(完成)
注:添加库、修改权限、密码等不需要重启服务。
(责任编辑:IT)
思路:svn服务器钩子触发rsync同步脚本,同步web服务器上的rsync定义的模块。
==========================WEB服务器(RSYNC)======================== 第一步:安装 rsync yum -y install rsync 第二步:配置 #默认无该文件 #vim /etc/rsyncd.conf uid=root gid=root use chroot=no max connections=200 timeout=600 pid file = /var/run/rsyncd .pid lock file = /var/run/rsync .lock log file = /var/log/rsyncd .log [a. test .cn] path= /data/web/a . test .cn/ #exclude=conf/*.php comment = this ia a. test .cn ignore errors read only= false list= false hosts allow=172.31.0.12 hosts deny=* auth users = test secrets file = /shell/rsync-passwd/rsync . passwd 注:use chroot=no 时,同步后DES的文件主或组如果有,则显示名,即使ID不一样; use chroot= yes 时,如果两台机器同名的ID不同,则服务端只会显示SRC的ID,造成权限问题。 编辑 rsync 的用户认证配置文件 # cat /shell/rsync-passwd/rsync.passwd test :test123 #chmod 600 /shell/rsync-passwd/rsync.passwd 第三步:启动 rsync 服务 /usr/bin/rsync --daemon echo "/usr/bin/rsync --daemon" >> /etc/rc . local 第四步:客户端测试(172.31.0.12上) # cat /shell/rsync-passwd/rsync.passwd test :test123 #chmod 600 /shell/rsync-passwd/rsync.passwd rsync -vzrtopgl --progress --delete --exclude=.svn /data/web/a . test .cn/ test @172.31.0.15::a. test .cn --password- file = /shell/rsync-passwd/rsync . passwd 或 RSYNC_PASSWORD=test123 rsync -vzrtopgl --progress --delete --exclude=.svn /data/web/a . test .cn/ test @172.31.0.15::a. test .cn (完成) 注:修改配置文件和用户密码不需要重启服务 ===========================SVN服务器============================== 第一步:安装subversion tar zxvf subversion-1.7.4. tar .gz cd subversion-1.7.4 #下载apr,并执行buildconf生成需要的文件 svn co http: //svn .apache.org /repos/asf/apr/apr/branches/1 .3.x apr . /apr/buildconf #下载apr-util,并执行buildconf生成需要的文件 svn co http: //svn .apache.org /repos/asf/apr/apr-util/branches/1 .3.x apr-util . /apr-util/buildconf #下载sqlite3.c,解压后放到subversion解压的源码目录中,只确保有sqlite3.c即可。 # ll sqlite-amalgamation/ total 5004 -rw-r--r-- 1 root root 5121966 Dec 17 11:34 sqlite3.c . /configure --prefix= /usr/local/svn make && make install 第二步:创建svn库、配置好权限 1、创建库 mkdir /data/svndata /usr/local/svn/bin/svnadmin create /data/svndata/a . test .cn /usr/local/svn/bin/svnadmin create /data/svndata/b . test .cn /usr/local/svn/bin/svnadmin create /data/svndata/c . test .cn 2、配置密码和权限文件 mkdir /data/svnpasswd #cat /data/svnpasswd/passwd [ users ] aaa=aaapwd bbb=bbbpwd ccc=cccpwd xxx=xxxpwd yyy=yyypwd zzz=zzzpwd #cat /data/svnpasswd/authz [ groups ] a. test .cn = aaa b. test .cn = bbb c. test .cn = ccc other = xxx,yyy,zzz [a. test .cn:/] @a. test .cn=r w xxx=r *= [b. test .cn:/] @b. test .cn=rw yyy=r *= [c. test .cn:/] @c. test .cn=rw @other=r *= 3、配置所有svn库使用上面的用户和权限来集中管理权限。 修改所有库中的conf /svnserve .conf为以下内容 [general] anon-access = none auth-access = write password-db = /data/svnpasswd/passwd authz-db = /data/svnpasswd/authz # realm = My First Repository # force-username-case = none [sasl] # use-sasl = true # min-encryption = 0 # max-encryption = 256 4、启动服务 /usr/local/svn/bin/svnserve -d --listen-port 4399 -r /data/svndata echo "/usr/local/svn/bin/svnserve -d --listen-port 4399 -r /data/svndata" >> /etc/rc . local 5、配置钩子文件(第个库根据需要单独的配置)原理:每次commit,触发post-commit脚本。确保有执行权限。 拷贝模板文件为post-commit chmod 700 post-commit [root@centos-6 ~] # cat /data/svndata/ a.test.cn/hooks/post-commit #!/bin/sh #下面这个变量实际上是svn库的绝对路径,未使用。 #REPOS="$1" #下面这个变量实际上是每次commit后的版本,未使用。 #REV="$2" export LANG=en_US.UTF-8 /usr/local/svn/bin/svn update --username aaa --password "aaapwd" /data/web/a . test .cn if [ $? - eq 0 ] then chown -R root.dev /data/web/atest .cn /bin/bash /shell/rsync-script/a . test .cn.sh > /dev/null 2>&1 fi 6、配置钩子文件触发的脚本 [root@centos-6 ~] # cat /shell/rsync-script/a.test.cn.sh #/bin/bash IP= "172.31.0.15" Auth_module= "a.test.cn" Localdir= "/data/web/a.test.cn/" Auth_user= "test" Passwd_file= "/shell/rsync-passwd/rsync.passwd" Exc= " --exclude=.svn" rsync -vzrtopgl --progress --delete ${Exc} ${Localdir} $Auth_user@${IP}::${Auth_module} --password- file =${Passwd_file} 访问 rsync 密码文件,权限必须为600,root.root [root@centos-6 ~] # cat /shell/rsync-passwd/rsync.passwd test123 7、测试 客户端在a. test .cn库中提交文件,查看是否实时同步到 rsync 服务器定义的web目录中。 (完成) 注:添加库、修改权限、密码等不需要重启服务。 (责任编辑:IT) |