Hexo是一个非常方便好用的markdown博客框架平台,提供简洁高效的个人文章发布方式和方法,经过一定的起始配置后可以非常便捷快速地发布文章至个人博客网站,平时无需管理服务器。

文中使用amazon ec2的虚拟机作为网站服务器,在本地通过ssh和sftp工具访问和操作服务器。

一、安装软件

sudo apt install nodejs npm git supervisor nginx

二、使用 Hexo 建立 blog

安装 Hexo

npm install -g hexo

初始化 Hexo

mkdir hexo && cd hexo
hexo init blog
cd blog
npm install

配置 Hexo

Hexo 有两份主要的配置文件(_config.yml),一份位于站点根目录下,另一份位于主题目录下。为了描述方便,在以下说明中,将前者称为 站点配置文件,后者称为 主题配置文件

站点信息

编辑 站点配置文件

title: blog  
subtitle: my blog  
description:  
author: X.Long Kong  
language: en
timezone: Asia/Shanghai  

文章链接

文章的链接格式形如 /yyyy/mm/title.html。以文章 blog/2015/2015-08-30-hello.md 为例,它对应的链接是 /2015/08/hello.html

为了到达上述效果,需要编辑 站点配置文件 如下:

root: /  
permalink: :year/:month/:title.html  
new_post_name: blog/:year/:year-:month-:day-:title.md  

配置主题

我个人喜欢简洁优雅的风格,因此选择了 tranquilpeak 主题。

1. 下载 tranquilpeak 主题

cd blog
git clone https://github.com/iissnan/hexo-theme-next themes/next

2. 启用 tranquilpeak 主题

编辑 站点配置文件

theme: tranquilpeak  

如果想使用类似 cover image, thumbnail image, 和 image gallery 等特性, 需要在站点配置文件中将 post_asset_folder 设为 true ,会在_post目录下生成*.md同名的目录作为资源目录,用来保存图像或数据文件。

修改下列几项pages的名称为主题默认的名称

tag_dir: all-tags
archive_dir: all-archives
category_dir: all-categories
配置 RSS
  1. 在blog目录运行

    npm install hexo-generator-feed –save

  2. 站点配置文件中增加下列内容:

    feed:
        type: atom
        path: atom.xml
        limit: 20
    

3. 设置主题参数

编辑 主题配置文件

配置语言为en或zh-cn, 具体字符查看主题languages目录下的*.yml文件

增加all-categories页面:

在blog目录下运行

hexo new page “all-categories”

在blog/source目录下会生成新目录all-categories
更改 source/all-categories/index.md文件内容为:

---
title: "all-categories"
layout: "all-categories"
comments: false
---

类似的增加all-tagsall-archives页面。

4. 侧边栏

根据需要修改sidebar显示的内容。

5. 评论系统

  1. 注册 Disqus 的账号并登录
  2. 依次点击 “GET STARTED”、“I want to install Disqus on my site”
  3. 按提示填写站点信息(注意 “Website Name” 的内容就是 shortname,稍后会用到,比如 kongxl
  4. 按提示 “1. Select Plan”(没钱就选择 Basic)、“2. Install Disqus”(NexT 主题的可以忽略)、“3. Configure Disqus”(填写 “Website URL” 后,点击 “Complete Setup” 即可)
  5. 编辑 主题配置文件,启用 Disqus:

    disqus_shortname:  kongxl
    

三、正式部署

1. 使用 Supervisor 管理 Hexo 服务

使用 hexo server 启动的 Hexo 服务是非 Daemon 模式的。为了便于管理,这里使用Supervisor管理hexo server

创建 Supervisor 配置文件:

sudo vi /etc/supervisor/conf.d/blog.conf

[program:blog]
command=hexo server
directory=/home/ubuntu/blog
autostart=true
autorestart=true
startsecs=5
stopsignal=HUP
stopasgroup=true
stopwaitsecs=5
stdout_logfile_maxbytes=20MB
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile_maxbytes=20MB
stderr_logfile=/var/log/supervisor/%(program_name)s.log

sudo supervisord

查看 blog 程序(即 Hexo 服务)的状态:

supervisorctl status
blog RUNNING pid 28974, uptime 0:00:32

如果supervisord启动失败,提示socket error,可使用下面命令解决。

sudo unlink /run/supervisor.sock

可以看出,blog 程序已经处于运行状态,监听端口为 hexo server 命令的默认端口 4000。在浏览器中访问 http://localhost:4000 可以看到博客的运行效果。

2. 配置 Nginx 代理

作为一个对外公开的网站,使用 4000 端口显然是不合适的。可以直接改成 80 端口,但是这样直接把 Hexo 服务暴露给用户,并不恰当。更好的办法是使用 Nginx 做代理。

创建 Nginx 配置文件:

sudo vi /etc/nginx/conf.d/blog.conf

server {  
    listen 80;  
    server_name kongxl.net;  

    location / {  
        proxy_pass http://localhost:4000;  
    }  

    access_log  /var/log/nginx/blog.access.log;  
    error_log /var/log/nginx/blog.error.log;  
}  

重启 Nginx:

sudo nginx -t
sudo nginx -s reload

此时,在浏览器中访问 http://kongxl.net,就可以体验到高效、稳定的博客网站。