前言

我在 Windows 11 专业工作站版 23H2 环境下使用 nodejs v22.4.0npm v10.8.1 安装了 Hexo,并打算将 Hexo 部署至服务器(系统镜像:Ubuntu 22.04,Rsync 版本:3.2.7)上,利用 hexo-deployer-rsync 插件,部署方式为 Rsync

首先要在本地和服务器上安装 Rsync ,服务器上一般默认已经安装好了,而 Windows 下安装 Rsync 有两种方式:

  • 一是通过 Cygwin 安装

  • 二是安装 cwRsync(Windows 下的 Rsync 程序)

然而我的本地 Windows 通过上述两种方式安装 Rsync 与 Linux 同步会出现如下报错:

rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(228) [Receiver=3.2.7]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.3.0]

一开始我以为是本地与服务器的 Rsync 版本不一致导致的问题,于是我在服务器上重新编译安装了最新版本的 Rsync(Version 3.3.0),依然存在如上报错。

后来,我通过本地 CentOS 7 虚拟机进行测试两台 Linux 服务器之间的 Rsync 部署,能够成功部署 Hexo。所以,我打算在 WSL 上安装 Hexo,通过 WSL 上的 Rsync 程序向服务器部署 Hexo。

基于 WSL 的特性,我能够通过 Windows 文件资源管理器直接访问 WSL 内部文件,方便我管理和编辑 Markdown 文档。以下是详细的步骤,这里只介绍利用 WSL 通过 Rsync 向服务器部署 Hexo,其余部分我会在其他文章中介绍。

第一步 在 WSL 中安装 Hexo 及部署插件

我选用的 WSL 发行版为 Debian,其他 Linux 发行版均可参考此文。打开 WSL 终端,进入到用户的家目录下,通过下方命令安装 Hexo。

$

在家目录中创建 hexo 文件夹(可自定义文件夹名称),绝对路径为 /home/caisre/hexo ,进入该目录下,运行下方命令,Hexo 将会该文件夹中新建所需要的文件,完成初始化工作,具体内容可参考 Setup | Hexo 文档。

$

然后在此目录下,通过终端,运行下方命令,安装 hexo-deployer-rsync 部署插件。

$

第二步 修改 _config.yml 配置文件

/home/caisre/hexo 目录下找到 _config.yml 文件并修改配置,参考如下。

deploy:
type: rsync
host: <主机名>
user: <用户>
root: <站点目录>
port: 22 # Default is 22
delete: true # Default is true
progress: true # Default is true
key: [SSH 私钥路径] # eg. ~/.ssh/id_rsa
verbose: true # Default is true
ignore_errors: true # Default is false
create_before_update: false # Default is false
Rsync 是一种快速且通用的文件复制工具

它可以在本地复制,通过 SSH 复制或拉取远程资源,或通过指定 Rsync 用户复制资源到远程主机或通过 Rsync 守护进程从远程主机拉取资源。我们这里是通过 SSH 复制或拉取,一般分为口令(密码)或公钥(无密码)传输方式。

主机名一般为服务器 IP 地址或其所绑定的域名。站点目录即为 Rsync 将生成的 Hexo 静态文件传输存放的地方,并要确保站点目录的所属者为该用户。用户即服务器登录账户,不建议使用 root 账户,安全性不高。

例如我在服务器上创建了 hexo 用户,指定登录 Shell 为 /bin/bash ,并在用户家目录下的 .ssh 文件中上传 SSH 公钥文件并将公钥文件内容添加至 authorized_keys 文件中。

在权限方面,要确保 .ssh 文件夹的权限为 0700,authorized_keys 文件的权限为 0600,两者所属者为 hexo,否则在 Rsync 部署时会提示权限过高而报错。

而在 WSL 本地用户家目录 /home/caisre/.ssh 中要放置私钥文件和 config 配置文件,否则部署时仍会要求输入用户密码。配置文件内容如下。

/home/caisre/.ssh/config
Host 主机别名,可为绑定的域名
user 用户名
hostname 主机 IP
port 端口号
identityfile 本地私钥地址

以上免密认证登录配置完成后,可以使用 ssh [user]@[hostname] 测试,根据提示首次连接需保存验证指纹信息,之后便能成功登录,无需输入密码。

第三步 部署 Hexo 至服务器

在本地 WSL 终端中,运行下方命令,即可将 Hexo 部署至服务器对应的站点目录中。

$

或者运行简写的命令 hexo g && hexo d