# Windows 环境多服务文件同步
多服务器文件同步的目标是将 SSCMS 系统生成的站点文件以及图片、附件等站点资源文件同步至独立服务器并对外提供访问,以避免直接将 SSCMS 系统暴露在外网。
我们推荐使用免费开源的 rsync
软件进行跨服务器文件同步,除了 rsync
软件之外,您也可以使用其他第三方软件进行文件同步。
通常,为了避免将管理后台暴露在外的风险,我们不会同步管理后台 ss-admin
文件夹,如果站点为纯静态页面,不包含登录、搜索、点击量统计等互动功能,我们可以只同步站点文件夹,如果包含互动功能,可以同步除 ss-admin
文件夹以外的所有文件,以保证 API 能够正常访问。
rsync
软件在 Windows
操作系统下的名称为 cwRsync
,使用 cwRsync
来同步文件时,当源服务器文件修改后,目标服务器将自动同步文件,包括文件的更新、删除、重命名等均将同步至目标服务器。
# 1、下载安装文件:
cwRsync
包含服务器端(需要在源服务器中安装)安装包以及客户端(需要在目标服务器中安装)安装包,下载地址:
服务端下载:cwRsyncServer_4.1.0_Installer.exe (opens new window)
客户端下载:cwRsync_4.1.0_Installer.exe (opens new window)
# 2、服务端安装:
服务端服务器即源服务器,通常为 SSCMS 系统所在的服务器。
下载后双击运行文件 cwRsyncServer_4.1.0_Installer.exe
,点击下一步,安装过程中会在当前系统下生成 SvcCWRSYNC
账户(可自定义),用来启动 RsyncServer
服务,该账户的密码是随机生成的,建议修改。如果安装完成系统中未出现这个账户,可能是操作被拦截,可以手动建立。
# 3、服务端配置
打开安装目录(默认为:C:\Program Files (x86)\ICW),编辑文件 rsyncd.conf
:
use chroot = false #不使用chroot
strict modes = false #静态模式
log file = rsyncd.log #log文件名,可以指定路径
pid file = rsyncd.pid #pid文件名,可以指定路径
port = 873 #默认端口873
uid = 0 #不指定uid,不加这一行将无法使用任何账户
gid = 0 #不指定gid
max connections = 10 #最大连接数10
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygdrive/c/work
# 和linux不同的是windows的备份目录前面都要加/cygdrive
[SVN] #同步模块名称(可用方便好记的名称)
path = /cygdrive/d/Repositories #需要备份的路径(服务端D盘Repositories目录)
read only = false #只读
transfer logging = yes #记录传输日志
ignore errors #忽略无关的IO错误
list = no #不列文件表
hosts allow = 192.168.1.0/255.255.255.0 #允许访问的IP多个用英文逗号,分割
hosts deny = * #不允许hosts allow以外的任何IP访问
include from = etc/rsyncd.ncac.include #需要同步的目录或者文件 (可设置可不设置)
exclude from = etc/rsyncd.ncac.exclude #不同步的目录或者文件
auth users = SvcCWRSYNC #认证用户名
secrets file = rsync.secrets #认证用户的用户名和密码存储位置
以上代码需要注意的是文件目录的写法,比如 C:\Program Files (x86)\ICW
需要表示为 /cygdrive/c/Program Files (x86)/ICW
。
在 cwRsyncServer
的安装目录下,使用记事本程序建立一个 rsync.secrets
的文件,在里面添加用户名和密码等信息,例如 SvcCWRSYNC:J1yv3SIZe3m56f
。
注:用户名是可以重新指定的,但是要在该用户名和密码建立的前提下才可以。
在 Windows 管理工具中打开服务,或者在运行中输入 services.msc
打开服务,启动 RsyncServer
服务,为了使用方便,你可以将 RsyncServer
服务的属性修改为自动启动,然后在使用 netstat –an
命令看 8173
端口是否被监听。
提示
如果 RsyncServer
服务重启之后报错,则需要删除安装目录下 .pid
文件,此文件会跟着服务启动以后重新创建。
# 4、客户端安装
客户端服务器即终端服务器,通常为发布后的静态网站所在的服务器。
下载后双击运行 cwRsync_4.1.0_Installer.exe
文件,按照向导安装,客户端无需编辑配置文档,直接安装下一步即可。
系统变量中,将客户端的程序目录添加进 PATH
变量,注意,不是安装目录的根目录,而是程序的目录,即 bin
目录。
前文系统变量输入之后,该命令就可以直接运行,如果未成功,可以 CD 跳转到 BIN 目录,再运行命令。
打开命令行窗口,由于必须要在 rsync.exe
所在目录下运行命令,所以先 cd 到 cwRsync 的 bin 目录下,然后在执行命令:
cd 'C:\Program Files (x86)\cwRsync\bin'
rsync.exe -avzP --progress --delete --password-file=/cygdrive/c/SvcwRsync.ps<p.txt
rsync.exe
命令可选参数:
参数 | 说明 |
---|---|
-a | 全部,相当于-rlptgoD |
-r | 递归 |
-l | 链接文件,意思是拷贝链接文件 |
-p | 表示保持文件原有权限 |
-t | 保持文件原有时间 |
-g | 保持文件原有用户组 |
-o | 保持文件原有属主 |
-g | 保持文件原有用户组 |
-D | 相当于块设备文件 |
-v | 详细模式输出 |
-z | 传输时压缩 |
-P | 显示传输进度 |
--progress | 显示备份同步过程 |
--delete | 删除 Client 中有 Server 没有的文件 |
--password-file | 账户@ip::模块名 表示 Rsync 服务器,如果服务端没有配置用户名并允许匿名,则可以不加账户 |
最后传递的参数 /cygdrive/d/wwwroot
表示同步到本地目录 D:\wwwroot
下。
运行成功屏幕显示password,此时输入账户对应的密码即可开始同步。
# 5、设置计划任务
为了避免人工定时操作,可以将命令编辑为 bat
文档,再添加到任务计划中。
创建一个批量处理脚本 rsync.bat
,放到客户端安装目录的 bin
文件夹下,内容如下:
@echo off
set RSYNC_HOME= C:\Program Files\cwRsync\bin
cd %RSYNC_HOME%
rsync.exe -avzP --progress --delete --password-file=/cygdrive/c/rsync.password<p.txt administrator@192.168.1.10::SVN /cygdrive/e/SvnBackupData
接下来,在 Windows 管理工具
下打开 计划任务程序
,执行以下操作:
至此,计划任务配置完成。