实现 Hexo 一键部署至个人服务器


本文写于 2022-05-27 18:06:46


TL; DR:

> npm install hexo-deployer-shell --save

追加以下内容到 _config.yml:
deploy:
  type: shell
  command: 'scp -i /path/to/your/id_rsa -r /path/to/your/hexo/public username@servername:/path/to/your/webroot'

> hexo d

完成!

正文

有了个人服务器之后,我就不太想把博客托管在 Github 上了。自己控制的东西更酷,不是么?

我之前一直使用 hexo g 一键部署到 Github ,但是如何一键部署到个人服务器上呢?谷歌了一圈,发现了以下几种方案:

  • 在服务器上安装 git 服务端,利用git上传

  • 做一个脚本,自动生成并上传

  • 手动上传

但是这三种都不尽人意。怎么才能继续用 hexo g 部署呢?

谷歌了一番,我找到了 Hexo 的插件页面。往下翻一翻,虽然没有找到 scp 的,但是找到了 hexo-deployer-shell 。既然是 shell ,那执行 scp 应该也不在话下。

根据文档安装好之后(其实就一行 npm install hexo-deployer-shell --save ),在 _config.yml 中追加写入以下内容:(如果之前配置过的需要删除)(由于无法指定密码,假设已经配置好了密钥登陆)

deploy:
  type: shell
  command: 'scp -i /path/to/your/id_rsa -r /path/to/your/hexo/public username@servername:/path/to/your/webroot'

注:如果服务器不想用 public 做目录名,那么在 scp 前加上 xcopy ,在 scp 后加上 rmdir ,临时改一下名即可。

然后敲进去 hexo d ,搞定!从此就用自己的服务器放博客了!

只是其中有几个小坑:

  • 第一次登陆服务器时需要手动在命令行里登陆,以便输入 yes 来确认远程服务器指纹;
  • 私钥文件需要设置好权限,不然 scp 会抱怨文件权限太开放:对于 Windows ,取消其他人的权限(包括 SYSTEM 和 Administrators 的),仅保留自己的完全控制即可;
  • 由于 scp 是一个一个地拷贝文件,不会增量更新,所以上传会很慢,尤其是对于比较大的博客。 Hexo 插件中有一个通过 rsync 来上传的,应该会快很多,到时如果需要换成它的话会再发一篇博文。