网站内容自动更新(()更新代码到外网测试服(组图))

优采云 发布时间: 2022-03-10 11:14

  网站内容自动更新(()更新代码到外网测试服(组图))

  颠覆概述

  概述

  Subversion,简称SVN,是一个开源的版本控制系统。与RCS和CVS相比,它采用了分支管理系统。

  网站更新拓扑

  

  安装网络服务器(Nginx)

  轻微地

  安装 svn 独立服务器 -----> 本地测试服务器

  安装颠覆服务器

  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  admin =Leerw2015

> EOF

cat >/work/svndata/web/conf/authz  admin = rw

> EOF

cat >/work/svndata/web/conf/svnserve.conf  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客户端

  下载链接:

  

  

  

  

  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  root@172.16.100.105

ssh172.16.100.105 'date'

  如果能正常显示日志,证明配置OK

  rsync 同步目录

  假设本地测试OK,由于本地是内网环境,没有固定IP,目前需要同步到外网服务器,使用rsync远程同步目录

  # rsync  -avz /data/wwwroot/htdocs/ root@172.16.100.105:/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 $LOCAL_FILE$USER@$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 $USER@$HOST1::$DST1 --exclude='.svn/' --exclude='.settings/'--exclude='.project'

        /usr/bin/rsync   -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$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 $USER@$HOST1::$DST1 --exclude='.svn/' --exclude='.settings/'--exclude='.project'

        /usr/bin/rsync   -vzrtopg --delete --progress--password-file=/etc/rsyncd/rsyncd.secrets $SRC $USER@$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

  常问问题

  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/ root@172.16.100.105:/data/wwwroot/htdocs_test/

  4.同步远程到本地

   rsync -avz root@172.16.100.105:/root/cpu.sh/root/

  5.同步是指定远程shell

  rsync  -avz -e ssh root@172.16.100.105:/tmp/root/push.sh

  6.不要覆盖修改后的目标文件

  rsync -avzu -e  sshroot@172.16.100.105:/root/cpu.sh  /tmp/

  7.只同步目录(不是文件)

  rsync  -v -d /tmp/ root@172.16.100.105:/tmp/

  8.查看文件传输进度

   rsync -v --progress  -d /tmp/  root@172.16.100.105:/tmp/

  9.删除目标文件夹中创建的文件

  rsync  -avz --delete /tmp/ root@172.16.100.105:/tmp/

  10.查看源文件和目标文件之间的变化

  -参数:-i

  rsync -avzi  /tmp/ root@172.16.100.105:/tmp/

  11.查看源和目标之间的变化

  rsync -avzi  /tmp/ root@172.16.100.105:/tmp/

  f 表示这是一个文件

  d 表示这是一个目录

  s 表示大小改变

  t 时间戳更改

  o 用户已更改

  g 用户组已更改

  12.在传输中启用数据包收录和排除模式

  rsync -avz --exclude='.svn/'/tmp/  root@172.16.100.105:/tmp/

  13.不要传输大文件

  rsync -avz --max-size='100K' /tmp/  root@172.16.100.105:/tmp/

  14.传输所有文件

  不管文件有没有变化,再次传输所有文件 -W 参数

  rsync -avzW--max-size='100K' /tmp/ root@172.16.100.105:/tmp/

  结尾

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线