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。最后导入项目如下。