前言

hexo本身提供了好多种一键部署的方式,在博客创建快一年的时候,我尝试了一下各种简便一键部署方式,但是最后,我还是放弃了。

如果你的博客部署在github pages抑或是linux服务器上,你可能根本无法遇到这些烦恼,因为你可以通过hexo-deployer-git一键部署到github,或者是在linux服务器上部署一个git仓库。而我当初偏偏选择了使用windows server,才导致了昨天+今天的痛苦。

FTP一键部署

FTP应该算是最久远的一种文件传输协议了,hexo文档的一键部署中提供了这种方式。按照文档,你首先需要安装hexo-deployer-ftpsync

npm install hexo-deployer-ftpsync --save

然后在hexo的配置文件中添加对应的配置:

deploy:
type: ftpsync
host: <host>
user: <user>
pass: <password>
remote: [remote]
port: [port]
ignore: [ignore]
connections: [connections]
verbose: [true|false]

我使用宝塔面板为目录开启了ftp,然后兴致冲冲地准备尝试一键deploy,您猜怎么着,直接报错了。看样子并非是配置内容的问题,也并非服务器ftp功能的问题(在filezilla可以正常上传)。从另一个角度来说,即便这种方式可行,也不是很推荐。因为FTP的安全性并不高,其次,上传大量文件有较大的机率失败。

SFTP一键部署

SFTP是FTP的后辈,但是在安全性上有所改进。传言它比FTP多了一个加密解密的环节所以上传速度较慢,但实际体验上来看速度并没有明显的区别。要使用SFTP一键部署,首先需要安装hexo-deployer-sftp插件。

$ npm install hexo-deployer-sftp --save

然后在hexo的配置文件中添加对应配置:

deploy:
type: sftp
host: <host>
user: <user>
pass: <password>
remotePath: [remote path]
port: [port]
privateKey: [path/to/privateKey]
passphrase: [passphrase]
agent: [path/to/agent/socket]

如果你不用私钥而是使用密码和没有其它需求的话,后面三项配置可以直接删掉。Filezilla server不支持开启SFTP,所以你需要额外的SFTP服务端来完成。我测试了好几个服务端的软件,比如最多人推荐的freesshd,也包括coreFTPserver和它的mini版。

在配置好以后我尝试了hexo deploy,嗯,快速且完整地上传了所有内容,很棒!但是第二次第三次第N次尝试的时候,发现SFTP插件一键部署的方式也存在问题。它确实可以正常地删除应当删除的文件,也可以上传本地新增的文件。但是我hexo有一个目录是tags,tags文件夹下有非常多的文件夹,再下一层才是html页面,不知道是否是这个原因,它在服务器目录存在文件的时候,可能出现无法删除需要删除的文件的情况,在tags目录下问题尤其严重。

简而言之,SFTP也非常不可靠!

Rsync一键部署

在查了无数网页,看了无数的issue之后,我发现有一个issue里有人提到了rsync这种方式,比SFTP更快,更方便。

于是我在服务器安装了cwRsync server,按照网上的文档配置好之后,在本地telnet ip+端口,返回的内容表示我已成功在服务器上启动了cwRsync。这其中无数次安装卸载安装启动就不说了。最后我安装了 hexo-deployer-rsync插件:

$ npm install hexo-deployer-rsync --save

并在hexo的配置文件里添加了对应的配置内容:

deploy:
type: rsync
host: <host>
user: <user>
root: <root>
port: [port]
delete: [true|false]
verbose: [true|false]
ignore_errors: [true|false]

等等!配置内容里没有密码这一项,那么本地和服务端是如何验证身份并传输数据的呢?我搜了好几篇文章,终于看到有人说是通过.ssh里面的密钥验证,于是我把本地的.ssh文件夹复制到服务器对应的用户文件夹下然后deploy,结果也失败了。

rsync报错

此刻,我只想大声问:

还有谁!

还有一个一键部署的办法就是使用hexo-deployer-git,然而在winserver上部署git仓库还要用到java??罢了罢了。我还是老老实实用复制粘贴的方式来更新吧,虽然步骤要繁琐那么一点点,但是速度又快又稳定。

最后

winserver在十年前可能还是国内最流行的服务器系统,因为windows用户数量庞大,加上界面又可视化,比起linux的入门难度低了不止一个等次。当初我就是考虑到这一点,加上winserver可以挂机一些软件,所以选择了安装这个系统。但是随着时间的发展,linux已经成了众多服务器的首选系统,如今winserver的生态可能远远比不上linux了。

回想起来,如果我安装的是debian或者其它linux衍生系统,那么我是不是早就可以轻松解决这个一件部署的问题了?