Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。

1、Linux服务器端安装rsync服务

yum -y install rsync
#启动rsync服务
systemctl start rsyncd.service
systemctl enable rsyncd.service
#检查是否已经成功启动
netstat -lnp|grep 873

2、rsync服务器的配置文件rsyncd.conf (/etc/rsyncd.conf),除此之外还有新增两个文件:rsyncd.passwd和rsyncd.motd文件。

rsyncd.conf(主配置文件)

rsyncd.passwd(密码文件)

rsyncd.motd(rysnc服务器信息)

touch rsyncd.passwd
chmod 600 rsyncd.pwsswd        #为了密码的安全性,我们把权限设为600
配置rsyncd.passwd文件:
rsyncd.passwd的内容格式为 用户名:密码
lei:123456
#创建
touch rsyncd.motd
#编辑
+++++++++++++++++++++++++++++++++++++++++++++++++++
welcome
+++++++++++++++++++++++++++++++++++++++++++++++++++

注意:将rsyncd.passwd这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功! 出于安全目的,文件的属性必需是只有属主可读。

3、配置rsyncd.conf文件:

# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
 exclude = lost+found/
 transfer logging = yes
 timeout = 900
 ignore nonreadable = yes
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
#        path = /home/ftp
#        comment = ftp export area
#
#上面是默认的,下面是配置信息
#81中的配置/etc/rsyncd.conf 
#设置服务器信息提示文件名称,在该文件中编写提示信息 
motd file = /etc/rsyncd.motd 
#开启Rsync数据传输日志功能 
transfer logging = yes
#设置日志文件名称,可以通过log format参数设置日志格式 
log file =/var/log/rsyncd.log 
#设置Rsync进程号保存文件名称 
#pid file =/var/run/rsyncd.pid 
#设置锁文件名称 
lock file =/var/run/rsync.lock 
#设置服务器监听的端口号,默认为873 
port = 8081 
#设置服务器所监听网卡接口的IP地址,这里服务器IP地址为192.168.0.254 
#address = 192.168.1.81
#设置进行数据`传输时所使用的账户名称或ID号,默认使用nobody 
uid = root 
#设置进行数据传输时所使用的组名称或GID号,默认使用nobody 
gid = root 
#设置user chroot为yes后,rsync会首先进行chroot设置,将根映射到path参数路径下,对客户 
#端而言,系统的根就是path参数所指定的路径。但这样做需要root权限,并且在同步符号 
#连接资料时仅会同步名称,而内容将不会同步。 
use chroot = no 
#是否允许客户端上传数据,这里设置为只读。 
read only = false
#设置并发连接数,0代表无限制。超出并发数后,如果依然有客户端连接请求,则将会收 
#到稍后重试的提示消息 
max connections = 10 
#模块,Rsync通过模块定义同步的目录,模块以[name]的形式定义,这与Samba定义共 
#享目录是一样的效果。在Rsync中也可以定义多个模块 
incoming chmod = Du=rwx,Dog=rx,Fu=rwx,Fgo=rx

[common] 
#comment定义注释说明字串 
#comment = Web content 
#同步目录的真实路径通过path指定 
path = /data/www
#忽略一些IO错误 
#ignore errors 
#exclude可以指定例外的目录,即将common目录下的某个目录设置为不同步数据 
#exclude = test/ 
#设置允许连接服务器的账户,账户可以是系统中不存在的用户 
auth users = lei
#设置密码验证文件名称,注意该文件的权限要求为只读,建议权限为600,仅在设置auth users 
#参数后有效 
secrets file = /etc/rsyncd.passwd 
#设置允许哪些主机可以同步数据,可以是单个IP,也可以是网段,多个IP与网段之间使用空 
#格分隔 
#hosts allow= *
#设置拒绝所有(除hosts allow定义的主机外) 
#hosts deny=* 
##客户端请求显示模块列表时,本模块名称是否显示,默认为true 
list= false

4、重新rsync

systemctl restart rsyncd.service

5、客户端配置cwRsync,这里我用解压版的,bin目录配置下环境变量即可使用。

雷小天博客

6、配置推送脚本

首先分支publish脚本到你项目的根目录,然后再配置脚本。publish文件夹中一个sh脚本文件,一个pwd密码文件

#文件dev81ToMall.sh

#!/bin/bash
echo '*************发布81测试环境******************'
echo '*                                         *'
echo '*         地址: 113.108.94.191             *'
echo '*         密码: 123456                       *'
echo '*                                         *'
echo '*******************************************'
echo '                                           '
echo '*              starting...                *'
echo '                                           '
rsync --port=8081 -ap --progress --password-file=./PwdDev81ToMal.pwd  \
    --exclude="publish" \
	../* lei@113.108.94.191::common/laravel-app
echo '                                           '
echo '                                           '
echo '******************END**********************'
echo '                                           '

#文件PwdDev81ToMal.pwd
123456

需要注意的是sh脚本中,默认端口是873,如果更改了端口需要--port=8081这种方式添加,还是这边模块common一定要跟配置文件对应起来,用户和密码也要跟rsyncd.passwd对应起来。从配置那么项目导入到Linux服务器中的实际路径就是path+模块后面的文件夹,也就是/data/www/laravel-app。最后导入项目如下。

雷小天博客