Hexo作为一个轻量级的博客系统,受到了很多人的青睐。本文总结了从服务器购买到博客搭建的整个流程,并将其中某些细节进行了梳理。

部署思路

Hexo是静态博客系统,也没有后台系统,因此不能像Wordpress那样直接在网站上写东西。我们需要先在本地计算机搭建好Hexo系统和Git,在本地写好文章之后由Hexo渲染成静态网页,再使用Git同步到你的远程服务器。基本流程如下:

即:本地Hexo将source目录下的*.md文件渲染成静态html文件,然后用户通过Git同步至远程服务器的Git仓库,同步完成之后会自动调用Git Hook将其同步到服务器的网站根目录下,访客通过Nginx服务器访问网站。

准备服务器以及域名

主机购买

如果想把博客放在国内就选两大云(阿里和腾讯),不过需要备案。国外的话选择就多了,从国内访问速度来看,机房位置优先选择香港、其次是新加坡和日本,有些CN2线路的美国机房也还可以。如果只是建博客的话,老牌的Digital Ocean、Linode、Vultr都是不错的选择,价格也很便宜。当然最佳选择毫无疑问是阿里云国际香港机房,只是购买不太方便,如果确实需要的话可以去cat.net,SB Cloud方案里面带Hong Kong的就是阿里云香港。

域名购买及设置

还是优先选择一些老牌的域名商,国内的依然是两大云,国外可选择GoDaddy、namecheap、Name.com、Bluehost、Dreamhost这几家,不过GoDaddy以前有大规模账号泄露事件,而且现在价格也没有什么优势了。

一般来说还可以看情况选购一些增值服务,比如Whois隐私保护之类的,想用SSL证书的话,免费的Let’s Encrypt就可以满足一般需要。

买完之后需要将域名绑定到主机的IP地址上,按照域名商的帮助文档操作即可。如果你想同时使用www.moonshinefly.commoonshinefly.com这样的域名,需要做一个A NAME记录和一个CNAME记录,如图:

远程服务器的基本环境搭建

以下过程均使用root权限进行。

安装Web服务器

Apache和nginx是目前两大主流Web服务器,建议选择后者,性能更能为出色。nginx可以直接用LNMP一键包搭建。登录到远程服务器后用以下命令安装:

1
2
$ screen -S lnmp #避免由于网络问题SSH中断而导致安装失败
$ wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh

Hexo不需要数据库就可以运行,因此MySQL看你自己的选择,但是以后要再有需要的话就得自己手工编译安装,所以最好一块装上。

搭建好LNMP之后在/home/wwwroot建立博客存放的目录,例如/home/wwwroot/moonshinefly.com

1
$ mkdir /home/wwwroot/moonshinefly.com

当然你也可以不用做这一步而使用已有的/home/wwwroot/default,但为了便于管理还是建议用这样的目录结构。

接下来编辑nginx的配置文件,将域名指向该目录:

1
$ nano /usr/local/nginx/conf/nginx.conf

找到server段中root /home/wwwroot/default这一行,修改为:

1
root /home/wwwroot/moonshinefly.com #将moonshinefly.com换为你自己的目录名

保存并退出,使用lnmp reload命令重新加载nginx配置文件,然后在浏览器中输入你的域名。如果能看到LNMP的欢迎页面,说明Web服务器搭建成功。

更多关于LNMP的设置请参考官方网站:https://lnmp.org

SSL证书相关设置

一般选择免费的Let’s Encrypt证书就行,用官方的Certbot或者第三方的acme.sh脚本安装都可以。我选择的是后者,相对更简单,具体方法可以参考作者Wiki:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

安装完成之后还需要将所有HTTP连接强制跳转至HTTPS上,具体方法可以参考我的另一篇博文:如何在LNMP环境下正确设置HTTPS强制跳转

在远程服务器上建立Git仓库

现在开始部署Hexo静态文件的远程Git仓库。许多教程都采用GitHub作为中转平台,但这只会让整个流程变得更加复杂,而且现在你已经有了自己的服务器,因此没有必要再使用这种方法。

创建私有Git仓库

新建一个/var/repo/目录并修改相应的权限:

1
2
3
$ mkdir /var/repo
$ chown -R $USER:$USER /var/repo/
$ chmod -R 755 /var/repo

然后执行以下命令创建一个名为hexo的裸仓库:

1
2
$ cd /var/repo
$ git init --bare hexo.git

此时私有Git仓库就已经建立并初始化完毕,以后所有在本地计算机上渲染好的静态页面都会同步至此处。

如果系统提示没有git命令可使用apt-get install git-core(Ubuntu系统),或yum install git-core(CentOS系统)安装。

创建Git Hook

现在创建一个Git Hook,作用是将Git仓库中的文件自动同步至nginx的默认网站目录下,即/home/wwwroot/moonshinefly.com,从而实现博客更新的自动部署。

创建Git Hook文件:

1
$ nano /var/repo/hexo.git/hooks/post-receive

直接使用编辑器添加以下代码:

1
2
3
#!/bin/bash
git --work-tree=/home/wwwroot/moonshinefly.com --git-dir=/var/repo/hexo.git checkout -f

注意要将里面的moonshinefly.com换成你自己的网站目录名。

这样就指定了Git的工作树和Git目录。

保存并退出后,使该文件变为可执行:

1
chmod +x /var/repo/hexo.git/hooks/post-receive

现在,远程服务器端已经配置完成,接下来就是本地环境的搭建。

本地环境搭建

这部分内容都基于Windows系统进行说明。

安装Git和Node.js

  • Git

    用来将本地文件提交到已建立好的远程Git仓库。

  • Node.js

    Hexo运行所需环境。

官网上的安装包现在都会自动帮你配置好环境变量。

需要注意的是,Git安装完毕后,/Git文件夹就是你以后的工作目录,所有操作包括生成的文件都会在这个目录下面进行。

安装Hexo

运行Git文件夹中的git-bash.exe,建立Hexo的安装目录:

1
$ mkdir /usr/hexo

开始安装Hexo:

1
$ npm install -g hexo-cli

初始化Hexo:

1
2
3
$ hexo init /usr/hexo
$ cd /usr/hexo
$ npm install

然后在本地运行Hexo服务器:

1
$ hexo server

在浏览器中输入http://localhost:4000如果能看到下图这样的页面,说明Hexo已经安装完毕:

以后都可以按这种方法来预览博客。按Ctrl+C终止本地服务器运行。

本地Hexo系统与远程Git仓库的关联

打开/Git/usr/hexo目录下面的_config.yml文件,在deploy字段下面做如下修改:

1
2
3
4
deploy:
type: git
repo: root@127.0.0.1:/var/repo/hexo #将此处的127.0.0.1换为你的服务器IP地址
branch: master

这样本地Hexo系统就与之前建好的远程Git仓库进行了关联。

Hexo的基本设置

所有设置参数都可以在Hexo官方中文文档中找到,这里就不多说了。

开始撰写博客

创建文章

运行本地计算机上的git-bash.exe,在窗口中使用以下命令创建一篇新的空白文章:

1
$ hexo new your-article-name

your-article-name换成你想要的名字。

然后在/Git/usr/hexo/source/_posts文件夹中找到your-article-name.md,使用任意文本编辑器打开就可以开始撰写文章。

Markdown书写工具的选择

由于Hexo需要将原始博文的.md文件渲染为静态文件,因此你的写作只能使用Markdown语法,并将文章保存为*.md文件,也就是上面的your-article-name.md

什么是Markdown语法?

Markdown 是一种轻量级标记语言,所有的文本样式都可以通过在正文内直接插入符号得到,因此可以让写作者专注于写作,而不需要在键盘和鼠标之间来回切换调整版面。

所以你的写作只要按照Markdown语法进行即可,记事本、Notepad++、Word,随便什么都可以。但为了方便,选择专门的书写工具当然是更好的选择。Windows下比较流行的有Markdown Pad和GitHub自己出的Atom,在线编辑器也有不少,我选择的是Typora,界面简洁清爽,所见即得,用起来不错。

Markdown语法的使用不再赘述,网上资料已经非常详细了。

发布博客

撰写完毕之后,使用以下命令生成静态网页:

1
$ hexo g

然后运行一下hexo server,打开https://localhost:4000看一下效果,没有问题的话即可开始同步到远程Git仓库:

1
$ hexo d

中途会要求输入远程主机的登陆密码(本文为root密码),随后会在bash中显示INFO Deploy done: git,此时你的博客就已经更新完毕,Git Hook会将其自动更新到网站目录下。输入你的域名即可进行访问。

其他杂项

安装新的主题

Hexo提供了相当多的第三方主题,可以在https://hexo.io/themes/自行选择。某些主题可能需要其他渲染器(比如本博客使用的Maupassant),建议将npm源换成淘宝的,不然可能因为某些原因导致连接不上从而安装失败:

1
2
$ npm config set registry https://registry.npm.taobao.org
$ npm info underscore

favicon

如果你对博客的favicon没有太多要求,比如只是简单地使用一两个字母,那么可以使用这个网站在线生成一个。

将得到的favicon.ico放在/Git/usr/hexo/source下,部署一次博客即可。

结语

好多年没碰博客,在搭建过程中也是走了不少弯路,网上很多资料都没有把整个流程说清楚。希望这篇文章对你有所帮助,有问题的话可以留言。