自从把博客迁移到 Hexo 后,如何方便的把生成的静态博客部署到 Linux 服务器成了摆在眼前的问题。

Hexo 官网介绍了几种部署方式:https://hexo.io/zh-cn/docs/one-command-deployment

1、Rsync 方案(放弃)

本来想试一下 rsync 部署,发现它不支持 windows 系统。

后来灵机一动,Git 能在 windows 系统里用,Git for windows 里还自带 bash.exe,而 Git for windows 又是 msys2 的工具包封装而来。那么先看看 msys2 里有没有 rsync,有的话,复制到 Git 里不就可以在 windows 系统下用 rsync 了么。

打开 MSYS2 Shell,执行以下命令:

1
pacman -S rsync

rsync-001

果然有,于是查看了 rsync 安装位置和依赖包,复制到 Git 里相应位置,运行时发现版本不兼容,无奈作罢。

2、Bash 脚本方案

看了下文档,还可以选择 SFTP 部署方式,我没尝试了,而是想到了更简单的部署方式。

目前我的部署方式是在 windows 系统本地运行 hexo clean && hexo g 生成静态站点,然后 ftp 上传到服务器上。

而这一过程重复多次以后,就觉得很烦了,想着把它简化一下吧。

于是写了个 bash 脚本放在 Hexo 博客根目录,命名为 “deploy.sh”,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash

_date=$(date +"%Y%m%d-%H%M")

# 清理缓存
hexo clean

# 生成网站
hexo generate

_pkg=site-${_date}.tar.gz

# 打包
tar -czf ${_pkg} public

# 远程主机中的网站存放目录
_remote_dir=/var/www/website/

# 主机登录信息
_remote_host=root@xxx.xx.xx.xxx

# 上传
scp ${_pkg} ${_remote_host}:${_remote_dir}

# 远程部署
_tar="tar -xzf ${_pkg}"

ssh ${_remote_host} "cd ${_remote_dir} && rm -rf public && ${_tar}"

echo "Deploy success."

注意,此脚本运行的前提条件是为 Linux 服务器配置好免密登录,可以参考我的另一篇文章:

Linux 服务器配置免密码登录

我在 Nginx 配置的完整目录是 /var/www/website/public

脚本中的 _remote_dir 即为我的网站存放目录,因为网站打包已经包含了 public 目录,所以这里就不需要再填写 public 目录了。

脚本中的 _remote_host 则是配置我的 ubuntu 服务器的地址(username@ip)。

这样每当我写完新的文章以后,就可以在网站根目录打开 “Git Bash”,执行:

1
bash deploy.sh

脚本运行完,就表示我的网站已经部署好啦,怎么样,是不是简单方便。

End–