Svn 和 rsync 架构的版本控制和自动更新测试服务器
1、服务器搭建结构
12
2、工作流程原理
1)本地开发环境都保持和svn版本控制服务器一致的文本拷贝
2)当本地更新或者新增数据的时候,提交到svn服务器
3)本地WEB测试服务器的目录也通过svn服务器更新最新的文本拷贝,通过使用 svn--hooks脚本 ,当svn服务器有遇到客户端commit更新的时候自动更新本地wen测试服务器的工作目录。
svn--hooks脚本说明:
打开svn的服务器端目录 /home/svnroot/repository/web/hooks
1、准备工作 cp post-commit.tmpl post-commit ; chmod a+x post-commit;确定相应目录的可写权限;
确认svn认证模式等相关信息。
2、首先确定post-commit文件是否被调用,可以在post-commit其中加入 sleep 10 这样的语句,
如果客户端提交之后等了一段时间,几乎可以肯定执行了这个文件,或者用写日志等方法。
3、post-commit能执行后基本问题都是权限问题,环境变量问题。
把需要处理的目录都改成 rw 的,脚本中要写入用户名和密码。
然后就是写shell脚本
#!/bin/sh
cd /www/admin 先进去测试服务器web目录
SVN=/usr/local/bin/svn 定义svn所在路径
WEB=/www/admin 定义变量
export LANG=en_US.UTF-8 输出环境变量
$SVN update $WEB --username xxx --password xxx 相当于在工作目录运行svn up
本例需要输出环境变量en_US.UTF-8,否则如果有中文文件会无法顺利执行。
4)当在本地服务器测试OK后,用rsync上传到远程WEB服务器。
Rsync使用的命令行下运行,为了方便,通过php调用rsync命令,在web端就可以做rsync的上传工作。
3、利用rsync自动更新测试服务器数据到对外应用服务器
Rsync -avzuCP --exclude-from=/www/adm_send.conf /www/admin/ username@xxx.xxx.xxx.xxx::test --progress --password-file=/www/passwd
--exclude-from 表示要排除上传哪些文件或者那些后缀的文件,直接写在/www/adm_send.conf里面,用回车隔开,如下:
admin/doAddProFromcsv/
site_data/
.dat
.log
.txt
.xml
add_admin.php
/www/admin/ 要上传的当前目录
username@xxx.xxx.xxx.xxx::test username表示rsync的用户名,@后面是要上传的服务器IP地址。::后面的test是rsync配置文件里面要上传的rsync目录名称
--progress --password-file=/www/passwd 表示username用户的密码文件放的位置,当需要输入密码的时候直接从密码文件读取。密码文件 /www/passwd 必须只有拥有者可读,设置 chmod 600 /www/passwd
我们的rsync的命令是使用php调用的,而php运行默认只有apache权限,所以前面加一句:
/usr/bin/sudo
完整的更新脚本如下:
/usr/bin/sudo Rsync -avzuCP --exclude-from=/www/adm_send.conf /www/admin/ username@xxx.xxx.xxx.xxx::test --progress --password-file=/www/passwd
4、安全性考虑
1、rsync上传服务端默认是空密码的,必须加上密码。
Rsync密码设置方法:
新建密码文件
vi /etc/rsyncd.passwd
输入用户名密码,用冒号:隔开,如下:
shangdi:shangdi123
修改密码文件的权限
chmod 600 /etc/rsyncd.passwd
修改配置文件,导入密码文件
vi /etc/rsyncd.conf
添加如下一行:
secrets file=/etc/rsyncd.passwd
用svn和Rsync和php做本地开发环境、测试服务器、远程服务器同步和更新
最新推荐文章于 2021-10-27 16:09:52 发布