Subversion概述
概述
Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统。
网站更新拓扑结构
安装WEB服务器(Nginx)
略
安装svn独立服务器----->本地测试服
安装subversion Server
yuminstall subversion –y
创建版本库
mkdir -pv/work/svndata svnadmin create /work/svndata/web
将网站目录导入版本库
export LANG="zh_CN.UTF-8" svn import/data/wwwroot/htdocs/ file:///work/svndata/web -m "import"
创建用户密码
cat >/work/svndata/web/conf/passwd << EOF > [users] > admin =Leerw2015 > EOF cat >/work/svndata/web/conf/authz <<EOF > [/] > admin = rw > EOF cat >/work/svndata/web/conf/svnserve.conf <<EOF > [general] > anon-access =none > auth-access =write > password-db =/work/svndata/web/conf/passwd > authz-db =/work/svndata/web/conf/authz > EOF
启动svn服务器
svnserve -d -r /work/svndata/
添加开启启动
echo"svnserve -d -r/work/svndata/" >> /etc/rc.local
配置钩子脚本,实现自动同步
vim/work/svndata/web/hooks/post-commit #!/bin/bash # Author by:Tommy.Gandolf # exportLANG="zh_CN.UTF-8" SVN_PATH=/usr/bin/svn WEB_PATH=/data/wwwroot/htdocs USER_NAME=admin USER_PASSWD=Leerw2015 $SVN_PATH checkout--username $USER_NAME --password$USER_PASSWD svn://127.0.0.1/web $WEB_PATH
添加执行权限
chmod +x /work/svndata/web/hooks/post-commit
设置SVN客户端自动更细Nginx网站目录
Windows下svn客户端使用
下载地址:
http://tortoisesvn.net/downloads.html
Linux下svn客户端的使用
yuminstall subversion –y svn checkout svn://172.16.100.106/website
本地测试服务器---->外网测试服务器
配置本地到外网测试服务器无密码登录
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] ssh172.16.100.105 ‘date‘
能正常显示日志就,就证明配置OK
Rsync同步目录
假设本地测试已经OK,由于本地是内网环境无固定IP,因此目前需要同步到外网服务器,使用rsync远程同步目录
# rsync -avz /data/wwwroot/htdocs/ [email protected]:/data/wwwroot/htdocs_test/--exclude=‘.svn/‘ --exclude=‘.settings/‘ --exclude=‘.project‘
# vim push.sh
脚本内容如下:
#!/bin/bash # Author by:Tommy.Gandolf # This script willpush local file to remote Server LOCAL_FILE=/data/wwwroot/htdocs/ REMOTE_FILE=/data/wwwroot/htdocs_test/ USER=root REMOTE_IP=172.16.100.105 rsync -avz [email protected]$REMOTE_IP:$REMOTE_FILE --exclude=‘.svn/‘ --exclude=‘.settings/‘ --exclude=‘.project‘
每次更新OK,只需要执行:sh push.sh 即可更新代码到外网测试服
实现外网测试服务器---->正式服务器的更新
WEB1
外网正式服务器(Rsync服务器端)
安装rsync
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.0.tar.gz tar zxvfrsync-3.1.0.tar.gz cd rsync-3.1.0 ./configure--prefix=/usr/ make &&make install
创建配置文件
mkdir -p/etc/rsyncd cd /etc/rsyncd/ touch rsyncd.conf touch rsyncd.secrets touch rsyncd.motd chmod 600 rsyncd.secrets vim rsyncd.conf uid=nobody gid=nobody use chroot=no max connections=10 strict modes=yes pid file=/var/run/rsyncd.pid lockfile=/var/run/rsyncd.lock logfile=/var/log/rsyncd.log [data1] path=/data/wwwroot/htdocs ignore errors read only=no write only=no hostsallow=172.16.100.0/24 host deny=* list=no uid=root gid=root auth users=root secrets file=/etc/rsyncd/rsyncd.secrets echo"root:1q2w3e4r5t6y" > rsyncd.secrets chown root:root rsyncd.secrets chmod 600 rsyncd.secrets cat rsyncd.motd +++++++++++++++++++++++++++++++++++++++++++++++++++ ######## WelCome To The Leerw.com SerVice! ####### +++++++++++++++++++++++++++++++++++++++++++++++++++
启动rsync服务
/usr/bin/rsync--daemon --config=/etc/rsyncd/rsyncd.conf
WEB2
安装通过WEB1,唯一不同的内容如下:
uid=nobody gid=nobody use chroot=no max connections=10 strict modes=yes pidfile=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock logfile=/var/log/rsyncd.log [data2] path=/data/wwwroot/htdocs/ ignore errors read only=no write only=no hostsallow=172.16.100.0/24 host deny=* list=no uid=root gid=root auth users=root secretsfile=/etc/rsyncd/rsyncd.secrets
外网测试服(rsync + inotify 客户端)
安装rsync
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.0.tar.gz tar zxvfrsync-3.1.0.tar.gz cd rsync-3.1.0 ./configure--prefix=/usr/ make &&make install mkdir -p/etc/rsyncd cd /etc/rsyncd/ touch rsyncd.password echo"1q2w3e4r5t6y" > rsyncd.password chmod 600 rsyncd.password mkdir -pv/data/wwwroot/htdocs
安装inotify-tools
rpm -ivh http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm yum makecache yum installinotify-tools inotify-tools-devel –y
自动同步脚本后台运行【保证更新到测试服上的代码正确性】
vim /root/rsync_auto.sh #!/bin/bash # Author by:Tommy.Gandolf # HOST1=172.16.100.100 HOST2=172.16.100.105 SRC=/data/wwwroot/htdocs/ DST1=data1 DST2=data2 USER=root /usr/bin/inotifywait-mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -emodify,delete,create,attrib $SRC | whileread read date time dir files; do /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC [email protected]$HOST1::$DST1 --exclude=‘.svn/‘ --exclude=‘.settings/‘--exclude=‘.project‘ /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC [email protected]$HOST2::$DST2 --exclude=‘.svn/‘ --exclude=‘.settings/‘--exclude=‘.project‘ echo "${files} was rsynced">>/tmp/rsync.log 2>&1 done # chmod +x rsync_auto.sh # nohup sh rsync_auto.sh & > /dev/null
备注:如果同步的目录有内同,不能触发同步,请先在同步目录创建一个文件,尝试触发同步文件。
手动同步脚本【推荐此方案】
说明:测试OK,手动推送到正式服务器
# vim rsync.sh #!/bin/bash # Author by:Tommy.Gandolf # HOST1=172.16.100.100 HOST2=172.16.100.105 SRC=/data/wwwroot/htdocs/ DST1=data1 DST2=data2 USER=root /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC [email protected]$HOST1::$DST1 --exclude=‘.svn/‘ --exclude=‘.settings/‘--exclude=‘.project‘ /usr/bin/rsync -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC [email protected]$HOST2::$DST2 --exclude=‘.svn/‘ --exclude=‘.settings/‘--exclude=‘.project‘ echo "${files} was rsynced">>/tmp/rsync.log 2>&1
配置内核参数
Inotify默认内核参数值太小
默认参数:
# sysctl -a | grep max_queued_events fs.inotify.max_queued_events = 16384 # sysctl -a | grep max_user_watches fs.inotify.max_user_watches = 8192 fs.epoll.max_user_watches= 148131 # sysctl -a | grep max_user_instances fs.inotify.max_user_instances = 128 修改:vim /etc/sysctl.conf fs.inotify.max_queued_events = 99999999 fs.inotify.max_user_watches = 99999999 fs.inotify.max_user_instances = 65535 # sysctl -p
FAQ
Rsync 常用用法
1.在本地机器上对两个目录进行同步
rsync -zvr /data/wwwroot/htdocs/ /tmp/
参数:-z 开启压缩,-v 详细输出 –r 表示递归 –a 保留时间标记
2.仅同步一个文件
rsync -azvr /data/wwwroot/htdocs/test.txt /tmp/
3.从本地同步到远程
rsync -avz /data/wwwroot/htdocs/ [email protected]:/data/wwwroot/htdocs_test/
4.同步远程到本地
rsync -avz [email protected]:/root/cpu.sh/root/
5.同步是指定远程shell
rsync -avz -e ssh [email protected]:/tmp/root/push.sh
6.不要覆盖被修改过的目的文件
rsync -avzu -e [email protected]:/root/cpu.sh /tmp/
7.仅仅同步目录(不同步文件)
rsync -v -d /tmp/ [email protected]:/tmp/
8.查看文件的传输进程
rsync -v --progress -d /tmp/ [email protected]:/tmp/
9.删除在目的文件夹中创建文件
rsync -avz --delete /tmp/ [email protected]:/tmp/
10.查看源和目的文件之间的改变情况
-参数:-i
rsync -avzi /tmp/ [email protected]:/tmp/
11.查看源和目的之间的变化
rsync -avzi /tmp/ [email protected]:/tmp/
f 表示这是一个文件
d 表示这是一个目录
s 表示尺寸被更改
t 时间标记有变化
o 用户被更改
g 用户组被更改
12.在传输时启用包包含和排除模式
rsync -avz --exclude=‘.svn/‘/tmp/ [email protected]:/tmp/
13.不要传输大文件
rsync -avz --max-size=‘100K‘ /tmp/ [email protected]:/tmp/
14.传输所有文件
不管文件是否有变化,再次把所有文件都传输一遍 –W参数
rsync -avzW--max-size=‘100K‘ /tmp/ [email protected]:/tmp/
END