使用Subversion实现网站自动更新

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

时间: 2024-11-07 19:16:05

使用Subversion实现网站自动更新的相关文章

VisualSVN&#160;钩子脚本实现网站自动更新

一.环境 说明: (1)服务器端除了装VisualSVN Server服务器端外,另外再装TortoiseSVN (2)服务器端和客户端都checkout 下目录 (3)注意:自动发布的钩子脚本,不支持https 一.配置 找到需要同步的代码库编辑Post-commit hook脚本: 编辑内如:(替换其中的用户名及密码,D:\wwwroot为网站根目录) "C:\Program Files\VisualSVN Server\bin\svn.exe" update "D:\w

[经验分享]如何让你的网站每天自动更新

相信很多刚刚做网站的站长朋友都有这样的感慨,每天更新网站真的是太累人了.想要提高自己网站的权重就得做到网站每天有更新,又不能一下子就把好几天的文章都给更新了,因为这在搜索引擎看来还是当天发布的,对网站的权重没有任何的作用,有没有什么办法可以让网站做到自动更新呢? 大家知道经常更新对于网站的重要性,搜索引擎喜欢新鲜的内容,如果你的站长期不更新,轻则排名下降,重则被k.好了,闲话少说,下面介绍下网站自动更新思路. 一,老站 这里说的老站不仅是指建站时间长的网站,这样的站不仅有了一定权重,网站也有一定

自动更新svn的内容到网站

每次编写网站代码,都是手工复制到服务器然后看效果,现在可以通过svn自动更新网站的代码,方法如下: 1.编写批处理 "C:\Program Files\Subversion\bin\svn.exe" export --force --no-auth-cache --quiet svn://xxxxxx [path] --username [username] --password [password] 相关参数说明: 1.C:\Program Files\Subversion\bin\

PHP自动更新网站

目前软件开发主流越来越倾向于B/S模式,不同于C/S模式的软件,B/S模式下的WEB程序自动更新是个麻烦问题. 本人利用PHP下载远程文件和ZIP类,写了一个简单的自动更新DEMO,供大家参考. 服务端 目录结构 |data |--20140918.zip |--index.php 其中 data 文件夹用来存放补丁包,index.php 文件用来响应版本数据给客户端. index.php <?php sleep(3); header('Content-Type:application/json

svn自动更新

对于做互联网开发的人来说,如果公司大一点,可能需要用到svn,这样好几个人就可以一起开发一个网站来提高效率,下面是如何安装svn和本地更新后如何服务器也即是更新. 第一首选是下载文件下载服务器端的Subversion和TortoiseSVN(这个客户端也需要安装)你可以通过我已经封装好的下载第二安装文件并经行调试由于安装过程太多我就复制网上的并且我已经下载了svn软件就是有点太大40M多 点击下载里面有安装教程和安装包按循序安装下来就可以了. 下面在讲一下就是本地上传后服务器却不更新的问题,还得

Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创建版本库 svnadmin create /home/myrepos    //这里的文件目录自己随便设置 3,配置svnserve 上述版本库/home/myrepos建立后在文件夹下会生成conf文件夹,进入/home/myrepos/conf下面会有下面3个文件 authz passwd 

windows下svn自动更新

配置hooks下post-commit.bat文件,文件内容如下 @echo offSET REPOS=%1SET REV=%2SET DIR=%REPOS%/hooksSET PATH=%PATH%;SET WORKING=E:/EnvirOnment/WWW @网站根目录svn update %WORKING% --username eves_china --password test2015 注意: 1.svn服务器的程序bin目录需要加入path路径. 2.进入计算机服务-->>Vis

Android应用自动更新功能的代码实现

由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu

Android 应用自动更新功能的代码

由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu