网站内容自动更新(()更新代码到外网测试服(组图))
优采云 发布时间: 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/
结尾