在 CentOS上部署 Hexo 博客

现在阿里云、腾讯云等各种云的服务器都比较便宜,以前搭建在github、coding.net等git pages上的站点,就想搭建在自己的服务器上了。

在腾讯云社区里找到一篇文章,在我的腾讯云的服务器上搭建成功。

我做了一些修改,输出到这里。

一,导语

除了闷头专研技术之外,程序员还需要不断地写作进行技术积累,写博客是其中最重要的方式之一。商业博客平台不少,但是更符合程序员背景的方案,是自己开发一个博客平台或者使用开源的博客平台。

开源的博客平台多如牛毛,而且不乏优秀之作,如 Hexo、Octopress、Jekyll、Wordpress。本系列文章将分享如何利用各种博客引擎在云端搭建属于自己的个人博客。今天是第一篇,介绍如何在 CentOS 上部署 Hexo 博客。

Hexo 是用 Node.js 开发的一个静态站点生成器(Static Site Generator),支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。阅读不少技术社区分享的文章时,看到国内不少同学都有在用这个引擎,看来「市场占有率」不低。

本文将介绍如何在一台 CentOS 的 云服务器上快速部署 Hexo 博客站点,如何快速发布一篇博文并通过云服务器上的私有 Git 仓库部署到 Web 服务器目录下。

二,本机配置

可以参见 Hexo和GitHub

如果你用的是Mac,建议安装HomeBrew,参考Homebrew安装

如果需要在terminal里翻墙,建议安装ProxyChains:Proxychains-ng

安装

brew install proxychains-ng

编辑:

vi /usr/local/etc/proxychains.conf

将最后一行修改为:

socks5 	127.0.0.1 1086 //这里替换你的端口

使用:

proxychains4 git init

三,服务器配置

服务器需要安装GitNginx

1
2
sudo yum update
sudo yum install git nginx

3.1 云端服务器配置

完成本地端的操作之后,暂时回到服务器的配置。在下面的操作之前,请确保已经购买了一台云服务器,并且能够以正常登陆。

在这部分,要完成以下件事情:

  1. 配置 Nginx 托管博客文件目录。
  2. 配置远程仓库自动更新到博客文件目录的钩子。

3.1.1 创建私有 Git 仓库

/var/repo/ 下,创建一个名为 hexo_static 的裸仓库(bare repo)。

如果没有 /var/repo 目录,需要先创建;然后修改目录的所有权和用户权限,之后 服务器 用户都具备 /var/repo 目录下所有新生成的目录和文件的权限。

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

然后,执行如下命令:

1
2
cd /var/repo/
git init --bare hexo_static.git

3.1.2 配置 Nginx 托管文件目录

接下来,创建 /var/www/hexo 目录,用于 Nginx 托管。

1
sudo mkdir -p /var/www/hexo

和上一步类似,这里也需要修改目录的所有权和权限。

1
2
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

然后,修改 Nginx 的 配置文件:

1
sudo vim /etc/nginx/nginx.conf

将其中的 root 指令指向 /var/www/hexo 目录。

1
2
3
4
5
6
7
8
9
10
...

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /var/www/hexo; # 需要修改的部分
index index.html index.htm;
...

如果你的服务器上有apache,你还需要将上面的80端口修改一下。

修改完成之后,保存并退出文件。
如果以后购买并备案域名之后,可以再将配置中的 default_server 修改为你的域名。

最后,重启 Nginx 服务,使得改动生效。

1
sudo service nginx restart

做完这一步之后,你去访问服务器的 IP 时,应该还是会报错的,因为 /var/www/hexo 目录是空的。

3.1.3 创建 Git 钩子

接下来,在服务器上的裸仓库 hexo_static 创建一个钩子,在满足特定条件时将静态 HTML 文件传送到 Web 服务器的目录下,即 /var/www/hexo

在自动生成的 hooks 目录下创建一个新的钩子文件:

1
vim /var/repo/hexo_static.git/hooks/post-receive

在该文件中添加两行代码,指定 Git 的工作树(源代码)和 Git 目录(配置文件等)。

1
2
3
#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f

保存并退出文件,并让该文件变为可执行文件。

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

至此,服务端的配置基本结束。

3.2. 完成本地 Hexo 配置

在第三部分的操作中,我们将完成以下任务:

  1. 修改 Hexo 配置中的 URL 和默认文章版式
  2. 新建博客草稿并发布
  3. 配置自动部署到服务器端的 hexo_static 裸仓库

3.2.1 修改 Hexo 部分默认配置

进入 hexo_blog 目录后,主要有以下文件。

1
2
3
4
5
6
7
8
-rw-r--r-- 1 benjisong 1049089 1619 Feb 24 14:45 _config.yml
-rw-r--r-- 1 benjisong 1049089 174 Feb 24 13:51 db.json
drwxr-xr-x 1 benjisong 1049089 0 Feb 24 12:16 node_modules
-rw-r--r-- 1 benjisong 1049089 484 Feb 24 12:16 package.json
drwxr-xr-x 1 benjisong 1049089 0 Feb 24 13:50 public
drwxr-xr-x 1 benjisong 1049089 0 Feb 24 12:08 scaffolds
drwxr-xr-x 1 benjisong 1049089 0 Feb 24 12:13 source
drwxr-xr-x 1 benjisong 1049089 0 Feb 24 12:08 themes

其中,_config.yml 为 Hexo 的主配置文件。我们首先修改博客的 URL 地址。

1
2
3
4
5
6
7
8
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'

url: http://server-ip # 没有绑定域名时填写服务器的实际 IP 地址。
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:

3.2.3 通过 Git 部署

到了这一步,可以说万事俱备,只欠东风了。这个东风,就是通过 Git 将 Hexo 生成的静态内容推送到服务器。

继续编辑 _config.yml 文件,找到 Deployment 部分,按照如下情况修改:

1
2
3
4
deploy:
type: git
repo: root@服务器的IP:/var/repo/hexo_static
branch: master

保存并退出文件。

可以测试部署:

1
hexo generate && hexo deploy

现在,我们就可以在浏览器中输入你的服务器IP,即可看到自己的博客网站了。

四,总结

本文较为完整地介绍了 Hexo 博客的安装及初始化,服务端如何配置通过 Git 部署等。与其他教程不同,我们没有使用公开的 Github 等第三方服务,而是直接在服务器上创建了私有仓库。然后,通过 Git 钩子,将 Hexo 生成的博客静态文件,快速地推送到 Web 服务的托管目录。