Hexo自动部署

生命,在于不停的折腾

开篇废话

前言

一直想重构自己大一写的博客,恰巧这段时间看到了实验室挺多小伙伴都在用 Hexo 搭建自己的博客,一方面懒得再去看之前的代码了,一方面 Hexo 确实有很多不错的主题…

于是乎,就这么开始了 Hexo 的搭建之旅。

思路

一开始的想法是直接在 VPS 上搭 Hexo 环境,由 Hexo 服务解析成静态页,然后通过 Hexo Server 对外服务。这样的确搭建起来十分快速,可是需要本地编写 MarkDown 文档并手动传至服务器,显得很傻。

那么,换个思路——在本地搭 Hexo 环境,解析成静态页后提交到服务器,通过 Git Hooks 自动更新站点目录文件,然后由 VPSNginx 对外服务,这样 VPS 上只需有 GitNginx 的环境即可。

搭建过程

搭建Git服务器 (CentOs7)

第一步

安装 Gityum 源的 git 版本不太新,我是编译安装的。

1
$ yum -y install git

以下是编译安装过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//下载编译工具
$ yum -y groupinstall "Development Tools"

//下载依赖包
$ yum -y install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-devel

//下载 Git 最新版本的源代码
$ wget https://www.kernel.org/pub/software/scm/git/git-2.18.0.tar.gz

//解压
$ tar -zxvf git-2.11.0.tar.gz

//编译安装
$ cd git-2.13.3
$ ./configure --prefix=/usr/local/git
$ make && make install

//配置全局路径
$ export PATH="/usr/local/git/bin:$PATH"
$ source /etc/profile

第二步

创建 git 用户,用来运行 git 服务。

1
$ sudo adduser git

第三步

创建证书登录,刚创建的git用户它是它是没有 ~/.ssh/~/.ssh/authorized_keys 文件的 ,因此这里需要手动创建,这里为了避免权限的问题 ,这里的文件创建全部使用 git 用户处理。

1
2
3
4
5
6
7
//切换用户
$ su - git

$ mkdir .ssh
$ chmod 700 .ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys

若本地没有 SSH 公钥可以用 ssh-keygen 指令生成公钥。这里也不多说了。

要注意的是,公钥复制到 ~/.ssh/authorized_keys 时,不能直接粘贴复制,要用 cat 指令。

1
$ cat [公钥] > ~/.ssh/authorized_keys

第四步

初始化 git 仓库,先选定一个目录作为 Git 仓库。

1
2
$ mkdir blog.git
$ git init --bare blog.git

Git 就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 Git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的 Git 仓库通常都以 .git 结尾。然后,把 owner 改为 git .

1
$ sudo chown -R git:git sample.git

第五步

禁用 shell 登录,出于安全考虑,第二步创建的 git 用户不允许登录 shell ,这可以通过编辑 /etc/passwd 文件完成。

1
git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

1
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样, git 用户可以正常通过 ssh 使用 git ,但无法登录 shell ,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。
到这一步, git 服务器就搭建完成了。

配置Git Hooks

这个 Git Hooks 的作用就是当仓库收到 git push 后,能触发一段 shell 脚本。脚本将静态文件复制到网站目录,通过 nginx 服务器就可以正常访问博客了。

1
2
3
4
$ su - git
$ cd ~/blog.git/hooks
$ touch post-receive # 新建脚本文件
$ vim post-receive

输入以下代码后保存退出

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/blog.git # git仓库
TMP_GIT_CLONE=/tmp/hexo # 临时目录
PUBLIC_WWW=/var/www/blog # 网站目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

赋予脚本执行权

1
chmod +x post-receive

本地配置

hexo

首先肯定得安装 Hexo 及相关环境,在这里就不多说了,请看官方文档:Hexo

配置

修改 Hexo 的配置文件 _config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
deploy:
type: git
repo:
#同步到GitHub
github: https://github.com/GitHubusername/example.github.io.git
#同步到自己的VPS
vps: ssh://git@example.com:22/home/git/blog.git
branch: master
message: Hexo Blog updated - {{ now('YYYY-MM-DD HH:mm:ss') }}
```

### 自动部署

接下来的事情就很简单了,在本地写好博客,然后输入以下两条指令。

``` bash
$ hexo g //编译成静态文件
$ hexo d //提交到git服务器

全文到这里就完成了 Hexo 博客的自动部署,希望对你有帮助。