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

优采云 发布时间: 2022-02-04 01:03

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

  颠覆概述

  概述

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

  网站更新拓扑

  

  安装网络服务器(Nginx)

  轻微地

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

  安装颠覆服务器

  yuminstall subversion �Cy

  创建存储库

  mkdir -pv/work/svndatasvnadmin  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> EOFcat >/work/svndata/web/conf/authz  admin = rw> EOFcat >/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/svnWEB_PATH=/data/wwwroot/htdocsUSER_NAME=adminUSER_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 �Cysvn checkout  svn://172.16.100.106/website

  

  本地测试服务器---->外网测试服务器

  配置无密码登录以从本地到外部网络测试服务器

  ssh-keygen  -t rsassh-copy-id  -i ~/.ssh/id_rsa.pub  root@172.16.100.105ssh172.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=rootREMOTE_IP=172.16.100.105rsync  -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.gztar zxvfrsync-3.1.0.tar.gzcd rsync-3.1.0./configure--prefix=/usr/make &&make install

  创建配置文件

  mkdir -p/etc/rsyncdcd /etc/rsyncd/touch  rsyncd.conftouch  rsyncd.secretstouch  rsyncd.motdchmod  600 rsyncd.secretsvim rsyncd.confuid=nobodygid=nobodyuse chroot=nomax connections=10strict modes=yespid file=/var/run/rsyncd.pidlockfile=/var/run/rsyncd.locklogfile=/var/log/rsyncd.log[data1]path=/data/wwwroot/htdocsignore errorsread only=nowrite only=nohostsallow=172.16.100.0/24host deny=*list=nouid=rootgid=rootauth users=rootsecrets file=/etc/rsyncd/rsyncd.secretsecho"root:1q2w3e4r5t6y" > rsyncd.secretschown  root:root rsyncd.secretschmod  600 rsyncd.secretscat rsyncd.motd +++++++++++++++++++++++++++++++++++++++++++++++++++########  WelCome To The Leerw.com SerVice! #######+++++++++++++++++++++++++++++++++++++++++++++++++++

  启动 rsync 服务

  /usr/bin/rsync--daemon --config=/etc/rsyncd/rsyncd.conf

  WEB2

  安装通过WEB1,唯一不同的是:

  uid=nobodygid=nobodyuse chroot=nomax connections=10strict modes=yespidfile=/var/run/rsyncd.pidlock file=/var/run/rsyncd.locklogfile=/var/log/rsyncd.log[data2]path=/data/wwwroot/htdocs/ignore errorsread only=nowrite only=nohostsallow=172.16.100.0/24host deny=*list=nouid=rootgid=rootauth users=rootsecretsfile=/etc/rsyncd/rsyncd.secrets

  外网测试服务器(rsync + inotify 客户端)

  安装 rsync

  wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.0.tar.gztar zxvfrsync-3.1.0.tar.gzcd rsync-3.1.0./configure--prefix=/usr/make &&make installmkdir -p/etc/rsyncdcd /etc/rsyncd/touch  rsyncd.passwordecho"1q2w3e4r5t6y" > rsyncd.passwordchmod  600 rsyncd.passwordmkdir -pv/data/wwwroot/htdocs

  安装 inotify-tools

  rpm -ivh http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpmyum makecacheyum installinotify-tools inotify-tools-devel �Cy

  自动同步脚本在后台运行【保证更新到测试服务器的代码的正确性】

  vim /root/rsync_auto.sh#!/bin/bash# Author by:Tommy.Gandolf#HOST1=172.16.100.100HOST2=172.16.100.105SRC=/data/wwwroot/htdocs/DST1=data1DST2=data2USER=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>&1done# 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.100HOST2=172.16.100.105SRC=/data/wwwroot/htdocs/DST1=data1DST2=data2USER=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_eventsfs.inotify.max_queued_events = 16384# sysctl -a |  grep max_user_watchesfs.inotify.max_user_watches = 8192fs.epoll.max_user_watches= 148131# sysctl  -a | grep max_user_instancesfs.inotify.max_user_instances = 128修改:vim /etc/sysctl.conffs.inotify.max_queued_events = 99999999fs.inotify.max_user_watches = 99999999fs.inotify.max_user_instances = 65535# sysctl  -p

  常问问题

  Rsync的常见用法

  1.同步本地机器上的两个目录

  rsync -zvr /data/wwwroot/htdocs/ /tmp/

  参数:-z 启用压缩,-v 详细输出。Cr 表示递归。Ca 保留时间戳

  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.传输所有文件

  无论文件是否已更改,重新传输所有文件。连续波参数

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

  结尾

  本文来自“大叔城管实习生”博客,请保留此出处

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线