使用 rsync 同步 Hexo 博客到云服务器的一些尝试
前面已经把 Hexo 博客部署到 Github Pages 上,但是国内访问 Github 速度不稳定,所以就想着能不能有个工具能够把本地的 hexo 文件直接同步到云服务器呢。
一、电脑运行 rsync 指令
查看官方文档找到 rsync 插件,先实验一下按照文档是否可以部署。
注意此时运行命令都是在
Hexo
的安装文件夹下,后面的一些报错也是跟此有关。
1、安装 hexo-deployer-rsync
1 | npm install hexo-deployer-rsync --save |
- 修改配置
1 | deploy: |
在 Hexo 中使用 rsync 必须客户端和服务器都装有 rsync。
2、服务器安装 rsync
参考文章:Hexo 中 rsync 的使用
- 更新系统
1 | apt update |
- 安装 rsync
1 | apt install rsync |
3、尝试 Hexo 指令部署尝试
1 | hexo clean |
此时系统会报错,因为
windows
系统并没有类似于rsync
的命令,需要配置。
4、windows 配置 rsync
参考文章:将 Hexo 博客自动部署到服务器
由于 Windows 自身并没有类似于 rsync 的命令,你需要下载和安装 Cygwin,这是一个在 Windows 下提供类 UNIX 环境支持的软件,其中包含了大量 GNU 和开源工具,包括 rsync。
4.1、下载并安装 Cygwin
访问 Cygwin 的官方网站并下载安装程序。
运行下载的 setup-x86.exe(32 位系统)或 setup-x86_64.exe(64 位系统)文件。
在 Cygwin Setup 的包选择界面,输入 rsync 在搜索框中,然后在搜索结果中找到对应的 rsync 包,在 SpinBox 中将 Skip 更改为对应的版本,点击下一步完成安装。
参考文章有时效性,如果此时按文档方法只安装
rsync
没有安装ssh
后面运行同步命令的时候还是会报错。
4.2、设置 Path 环境变量
右击电脑上的 “此电脑” 图标或者 “My Computer”,选择 “属性” 或者 “Properties”。
在弹出界面中,选择 “高级系统设置” 或者 “Advanced System Settings”。
在 “系统属性” 或者 “System Properties” 窗口中,点击 “环境变量” 或者 “Environment Variables”。
在 “环境变量” 窗口中,系统变量栏找到 Path,点击编辑或者 “Edit”,在变量值的末尾添加
;C:\cygwin64\bin
(64 位系统,32 位系统则添加;C:\cygwin\bin
),点击 “确定” 或者 “OK”。
参考文章里的方法是比较老的系统了,但是思路是这样的。
4.3、测试 rsync 是否安装成功
打开命令提示符(CMD)或者 Powershell,输入 rsync –version 并按回车。
如果显示 rsync 的版本信息,那么 rsync 已经安装成功。
注意:安装 Cygwin 时可能需要管理员权限。同时也请注意保证 Cygwin 软件包的完整性和安全性,以免引入恶意软件。
需要重启系统,再运行命令才会成功。
5、再次部署
1 | hexo clean |
- 报错如下
1 | rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] |
- 查询报错信息解决方法
参考文章:为什么这个 rsync 连接在 Windows 上意外关闭?
使用rsync部署Hexo博客-使用远程shell临时启动rsync daemon
因为是使用远程 shell 临时启动 rsync daemon,使用时要求 options 部分必须明确指定
–rsh
选项或其短选项-e
。此时使用 hexo d 指令部署就不行了,需要使用 rsync 指令。
6、rsync 部署
6.1、指令了解
- 使用 rsync 认证协议进行传输
网上大多数的 rsync 使用教程都是在描述使用 rsync 认证协议进行传输。在传输没有建立之前,这种形式有 server 和 client 的概念,server 端需要启动一个 rsync 守护进程(daemon/service),等待接受 client 发起的连接。一旦连接建立,Client(客户端)/Server(服务器)的这两个角色的差别,就被 Sender(发送者)/Receiver(接收者)所取代。
对于移植到 windows 的 rsync 软件来说,你可能会发现有 server 版本和 client 版本,但是 server 和 client 都是可以主动进行”推送“的。这个概念对于初次接触 rsync 的人员来说比较容易混淆。
使用的命令格式如下
1 | rsync [options] [user]@[host]::[src] [dest] # 拉取远程文件 |
- 使用远程 shell 进行操作
rsync 也支持本地主机借助 ssh 和 rcp 等工具使用远程 shell 和远程主机进行通信。使用这种形式进行传输则不需要任何一方开启守护进程,另外要注意 rsync 本身的配置文件 rsync.conf 并不会在这种形式下起作用。
使用的命令格式如下
1 | rsync [options] [user]@[host]:[src] [dest] # 拉取远程文件 |
注意区别在于两个
::
还是一个:
- 使用远程 shell 临时启动 rsync daemon
通过远程 shell 也能临时启动一个 rsync daemon,这不同于使用 rsync 协议,它不要求远程主机上事先启动 rsync 服务,而是临时派生出 rsync daemon,它是单用途的一次性 daemon,仅用于临时读取 daemon 的配置文件,当此次 rsync 同步完成,远程 shell 启动的rsync daemon 进程也会自动消逝。使用时要求 options 部分必须明确指定 –rsh
选项或其短选项 -e
。
- rsync 常用参数
1 | -v, --verbose 详细模式输出 |
最常用的选项组合是
avz
,即压缩和显示部分信息,并以归档模式传输。另外从windows
传输到linux
系统时,控制文件权限的--chmod
也是非常有用的。
6.2、rsync 指令部署
参考文章:使用 Rsync 从 Windows 同步数据到 Linux
- 执行命令
1 | rsync -e 'C:\cygwin64\bin\ssh.exe -v' -avPz --port 22 cygdrive/C/Users/xxxx/OneDrive/文档/Hexo-Blog/public root@1.1.1.1:root/data/hexo |
还是报错
1 | rsync: [sender] change_dir "/cygdrive/c/Users/xxxx/OneDrive/文档/Hexo-Blog/Users/xxxx/OneDrive/文档/Hexo-Blog" failed: No such file or directory (2) |
由上面报错可以看到是路径重复了,文章开头说过,所有指令都是在
Hexo
目录下进行操作,就不需要指定前面的根路径了。
- 修改指令
1 | rsync -e 'C:\cygwin64\bin\ssh.exe -v' -avPz --port 22 public root@1.1.1.1:data/hexo |
最终测试成功,可以进行远程同步,不过这种方法太过麻烦,装了
WSL
,可以更方便。
二、WSL 使用 rsync 同步电脑数据到云服务器
2.1、如何使用 WSL 在 Windows 上安装 Debian
以管理员身份运行 CMD
输入以下命令
1 | wsl --install -d Debian |
- 重启电脑
2.2、安装 rsync ssh
- 更新系统
1 | sudo apt update && sudo apt upgrade -y |
- 安装 rsync
1 | sudo apt install rsync |
- 安装 ssh
1 | sudo apt install openssh-server |
rsync 默认使用 SSH 进行远程登录和数据传输。 由于早期 rsync 不使用 SSH 协议,需要用 -e 参数指定协议,后来才改的。 所以,-e ssh 可以省略。
2.3、同步指令
在 wsl 运行上面的指令是不能成功的,因为在 wsl 的路径下操作的是 Linux 的文件,并不能访问 windows 的文件,可以使用 /mnt/{Windows盘符} 进入对应盘中进行操作。
- 进入 C 盘
1 | cd /mnt/c |
1 | rsync -avPz --port 22 Users/xxxx/文档/Hexo/public root@1.1.1.1:data/hexo |
命令运行成功,大功告成。