Gist & Cookbook ...

小目标:每天能够提交一行代码 ...

使用hexo快速构建博客

吴亮's Avatar 2018-02-03

  1. 1. 系统搭建
  2. 2. 使用各种插件来完善
  3. 3. 编写一个hexo的启动脚本
  4. 4. 使用PM2来管理hexo进程
  5. 5. 使用nginx来托管

对于一名码农,个人博客还是挺有必要的,可以很好地对一段时间所积累的知识进行总结。对于博客系统,我也用过好多,也二次开发过几个,最近发现了hexo,试用下来感觉不错的,打算后续一段时间就它了。

系统搭建

hexo搭建一个博客非常简单,无非是装一个Node,然后npm或者yarn安装一下即可,照着官方文档来就可以,没啥好说的。

使用各种插件来完善

之所以觉得hexo不错,其中一方面原因也在于它的插件做得还是不错的。正因为有了这些插件,才感觉功能一下子就丰富起来:

编写一个hexo的启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/env bash
#set -x
function show_help() {
cat << EOF
Usage: $0 {options}

Options:
--help
Display this help screen

--stop
停止服务

--start
启动服务

--restart
重启服务

--port
指定监听的端口

EOF
}

self_name=$(readlink -f $0)
root_path=$(readlink -f $(dirname ${self_name}))

port=4000
executeCommand=""
hexo="/home/wul/hexo/bin/hexo"

while [[ "$1" != "" ]];do
val=`expr "$1" : '--\(.*\)'`
val2=`expr "$1" : '--port=\(.*\)'`
if [[ "$val" == "stop" || "$val" == "start" || "$val" == "restart" ]];then
executeCommand=$val
fi
if [[ "$val2" != "" ]];then
port=$val2
fi
if [[ "$1" == "--help" ]];then
show_help
exit 1
fi

shift
done

function start() {
lsof -ti:${port} > /dev/null 2>&1 < /dev/null
if [[ $? -eq 0 ]];then
echo "端口已被占用!"
exit 3
fi
${hexo} clean --cwd ${root_path} --config _config.yml
${hexo} generate --cwd ${root_path} --config _config.yml
${hexo} deploy --cwd ${root_path} --config _config.yml
nohup ${hexo} server --cwd ${root_path} --ip 0.0.0.0 --port ${port} --config _config.yml > /dev/null 2>&1 < /dev/null &
sleep 5
lsof -ti:${port} > /dev/null 2>&1 < /dev/null
if [[ $? -eq 0 ]];then
echo "启动成功"
else
echo "启动失败!"
exit 4
fi
}

function stop() {
lsof -ti:${port} > /dev/null 2>&1 < /dev/null
if [[ $? -ne 0 ]];then
exit 0
fi
pid=$(lsof -ti:${port})
kill -9 ${pid} > /dev/null 2>&1 < /dev/null
}

if [[ ${executeCommand} == "start" ]];then
start
elif [[ ${executeCommand} == "stop" ]];then
stop
elif [[ ${executeCommand} == "restart" ]];then
stop
sleep 3
start
else
show_help
exit 2
fi

使用PM2来管理hexo进程

创建PM2的控制脚本:ecosystem.config.js,大致内容可以如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module.exports = {
apps : [{
name: 'blog',
script: '/home/wuliang/.yarn/bin/hexo',
args: 'server --ip 0.0.0.0 --port 9000',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};

然后用如下命令启动即可

1
pm2 start ecosystem.config.js

使用nginx来托管

因为hexo本身其实把markdown文件全部编译成了静态HTML文件,因此我们用nginx其实就可以托管,类似:

1
2
3
4
5
6
server {
listen 80;
server_name www.wuliang.me;

root /home/wuliang/blog/public;
}

本文作者 : 吴亮
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.wuliang.me/build-blog-by-hexo/

本文最后更新于 天前,文中所描述的信息可能已发生改变