在 CentOS 7.x 中安装和部署 Hexo

使用Hexo在本地构建博客,然后通过Git,将构建好的页面同步到VPS。VPS中利用Git的Hook,自动将Git收到的内容部署到Nginx中配置的根目录。此时访问域名或IP就能看到之前构建好的页面了。

VPS的操作

安装并配置Nginx

此处选用Nginx 主要是考虑资源占用。一般情况下Nginx的比Apache的要低一些。安装Nginx:

1
2
sudo yum install epel-release
sudo yum install nginx

其中epel-release为企业版Linux附加软件包的release版(EPEL for Extra Packages for Enterprise Linux)。
Nginx安装好之后需要一些配置。Nginx的原理大致是监听对服务器某个端口的访问,然后将其重新关联到其他的位置。此处需要配置Nginx监听80端口(HTTP端口),将其定为到访问VPS中的Hexo目录,从而实现访问IP或域名时,展示的是博客页面。
首先在/var/www位置下新增一个目录,用于存放构建好的、访问用的Hexo页面:

1
sudo mkdir /var/www/hexo_blog

然后找到Nginx的配置文件:

1
/etc/nginx/nginx.conf

使用VIM编辑。如果没有VIM可以使用VI。另外记得用sudo或root权限编辑。

1
sudo vim /etc/nginx/nginx.conf

修改其中的server部分,让其监听80端口,然后转发到新建的hexo_blog目录:

1
2
3
4
5
6
7
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; #此处填写域名。如果暂时不配置也可以保留"_"不编辑
root /var/www/hexo_blog; #此处填写刚才新建的 hexo_blog 的位置
……
}

Nginx配置好后,就可以启动了:

1
sudo nginx

到此Nginx已经配置好(够用)。如果想要测试话,可以在/var/www/hexo_blog目录中新增一个index.html文件,然后访问IP或域名测试一下。

安装并配置Git

Hexo提供了很多种方式来部署博客,因为比较熟悉Git故使用Git来操作。
首先需要安装Git:

1
sudo yum install git

安装好后需要新建一个目录,用于接收远程提交过来的页面。此处选择在当前用户(非root)的Home目录新建。有些教程中会要求新建一个Git用户,不过该步骤非必须。
安装好Git后需要新增一个Git目录,作为Hexo部署时的Git Repository:

1
2
3
cd ~ 
# 此次选择在当前用户的 Home 目录中新建该 Git 目录
git init --bare hexo_blog.git

接下来配置Git的Hook,使用其中的post-receive方式,使得Git在收到远程的推送、接收文件后,自动执行post-receive 中定义的操作。此处我们配置,使其自动将文件同步到/var/www/hexo_blog。
首先找到post-receive的位置:

1
~/hexo_blog.git/post-receive

如果没有可以新增一个。不过以下的流程也会自动创建(通过VIM)。
使用VIM编辑其中的配置:

1
2
3
4
vim ~/hexo_blog.git/post-receive
修改内容:
#!/bin/bash
git --work-tree=/var/www/hexo_blog --git-dir=/home/xubihang/hexo checkout -f

此处有一个小坑。如果当前这样配置的话,届时post-receive会用登录时的用户(非root)来执行。而此前我们在/var/www/目录中创建hexo_blog时使用了sudo,hexo_blog的owner是root:root。这种情况下用户(非root)调用post-receive会失败。故需要修改/var/www/hexo_blog的owner为当前用户:

1
sudo chown {$USER}:{$USER} /var/www/hexo_blog

至此Git的安装配置也已经完成。

本地的操作

以下使用macOS环境。
首先安装Node.js。macOS环境下可以使用Homebrew来安装。

安装Homebrew

在终端中操作:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用Homebrew安装Node.js

在终端中操作:

1
brew install node

安装Hexo

在终端中操作:

1
npm install hexo-cli -g

此处已经完成了Hexo的安装,接下来就是相关的配置了。
首先新建一个Hexo的目录结构。在选定的目录下执行:

1
hexo init hexo_blog

目录建好之后,编辑其中的配置,使用其中的Deploy(部署)配置来将生成的博客页面推到之前配置好的VPS中:

1
2
3
4
5
6
7
vim hexo_blog/_config.yml
# 此处只编辑其中的 Deploy 部分。其他的配置依据各自的情况自行配置
deploy:
type: git
repo: #此处填写远程的 Git Repository 的地址
branch: [branch] #此处只需要填写 master
message: [message] #此处填写每次更新的备注,例如「博客更新」等。该行可以删除,Hexo 会默认配置

此处有三个坑:

  1. 如果直接这样配置,然后终端中执行hexo d,会报错。原因是没有安装Hexo执行Git部署的工具hexo-deployer-git。在终端中执行以下命令即可:

    1
    npm install hexo-deployer-git --save
  2. 如果你的VPS的SSH端口为非22的端口,那么在配置repo的Git Repository信息时,可以使用ssh的方式来设置端口号:

    1
    repo: ssh://用户名@VPS的IP地址:端口号/~/hexo_blog.git
  3. 如果当前这样配置,每次执行部署时,需要输入VPS SSH登录的密码。想要不在每次都输密码,解决方式是使用证书登录。本地生成公钥放到VPS中,此后访问VPS时会自动判断远端的公钥和本地的私钥是否匹配,如果匹配就不需要密码直接登录了。这种方式的前提是本地得有私钥,安全问题可以放心(实际上比密码方式可能更安全一些)。接下来就是终端操作了:

    1
    2
    ssh-keygen -t rsa -c "此处输入注释,用于区分多个证书的情况"
    # -t 是指定证书的类型,此处使用的是 RSA

    执行完后在终端中查看~/.ssh目录,可以看到一组私钥和公钥id_rsa和id_rsa.pud,其中id_rsa.pud即是公钥。
    接下来需要将该公钥上传到VPS中。此处有一个简单的命令可以执行这个动作:

    1
    ssh-copy-id  ~/.ssh/id_ras.pub 用户名@VPS地址 -P VPS的SSH端口

完成!

以上完成后,所有的安装、部署配置就已经完成了。接下来就可以测试一下了。
进入本地的Hexo目录后,执行以下命令:

1
hexo d

此时Hexo会自动执行hexo g(enerate),生成网页,并通过配置好的deploy配置,推送到远端的VPS中。如果之前已经生成过,可以先执行hexo clean,然后再操作一次。

Enjoy~