前言

最近搭建一个自己的博客,历时一个星期的空余时间。搭建博客的主要目的是想记录自己的技术笔记和心得,方便与人分享和自己查阅。很久以前我就有搭建博客的想法,但是没有实践,一个是懒,一个是没有找到合适的博客系统。后来发现Hexo这个博客系统,感觉不错,但是看了一些教程,感觉搭建起来很麻烦,我就又放弃了,最近在朋友的鼓励下,终于把想法实践了。

在搭建博客之前,我对比了自己知道两个博客系统,WordPressHexo

WordPress:
优点 缺点
容易搭建,上手快 臃肿不轻便
主题多 需要提供服务器和域名
插件多
Hexo:
优点 缺点
轻便:全是静态文件 只能在本地电脑工作
简洁:天然支持MarkDown 维护不便
免费:GitHub

先前搭建过WordPress, 我并不是很喜欢WordPress的主题风格,个人认为不太适合写技术博客,找了些主题后,没有发现自己喜欢的。看到一些技术大佬很多在用Hexo的博客,并且对比了优缺点,最终决定搭建基于Hexo的博客。根据Hexo的缺点,我萌生了一个想法:能不能将Hexo搭建在云服务上?找了相关资料,确实有人这么做。本片博客主要解决了以下几个问题。

  1. 在云服务器上搭建Hexo博客系统
  2. 在线编辑和发布博客
  3. 配置Https

博客搭建

服务器和域名

服务器是在阿里云上买的最低配置的香港服务器,因为香港服务器不需要备案就能直接访问,同时速度也不会太差。同时域名也是在阿里云上购买的。

服务器版本

CentOS 7.4

Hexo搭建

Hexo的搭建过程网上有太多,没必要重复造轮子,没搭建过的朋友可以参考这篇博文

我的博客用的主题是Indigo,其中不少问题都可以在WiKi中找到。

配置Hexo

在搭建完成之后,服务器的运行需要依赖于hexo-serverhexo-admin。如果已经安装,可以跳过此步骤。

cd到博客根目录下,执行:

1
2
npm install hexo-server@0.3.1 --save
npm install hexo-admin@2.3.0 --save

安装完毕之后,执行

1
hexo s

打开浏览器,访问http://yourServerIP:4000, 即可预览,访问http://yourServerIP:4000/admin, 即可进入hexo-admin后台管理界面。

hexo-admin默认是没有密码保护,需要自己手动开启。在进入后台管理页面时,点击Settings--Setup authentification here设置后台管理密码。

Setting
Setting

输入用户名密码之后,将生成的代码复制。

Admin Config Section
Admin Config Section

然后打开博客根目录下的_config.yml,将复制的代码粘贴到末尾。
重启hexo服务器,进入http://yourServerIP:4000/admin, 如果出现登录界面,则设置成功。

后台运行

因为shell关掉或者使用ctrl+c关闭,则会导致服务器结束进程。所以我写了个JS脚本,执行之后,后台会一直运行hexo服务器。
安装pm2

1
npm  install -g pm2

在博客根目录下创建一个hexo_run.js。

1
2
3
4
5
6
7
8
9
const { exec } = require('child_process')
exec('hexo server',(error, stdout, stderr) => {
if(error){
console.log('exec error: ${error}')
return
}
console.log('stdout: ${stdout}');
console.log('stderr: ${stderr}');
})

在根目录下运行

1
pm2 start hexo_run.js

这样hexo服务器就能一直在后台运行不会被杀死。

Hexo部署

每次都用通过指令来部署,那是相当难受的。不过hexo-admin提供了一键部署功能:

Deploy
Deploy

通过点击Deploy按钮就能执行你的部署脚本。在博客根目录下添加配置:

1
2
admin:
deployCommand: './hexo-deploy.sh'

并且在根目录下创建hexo-deploy.sh,并编辑:

1
2
#!/usr/bin/env sh
hexo g

给hexo-deploy.sh授予权限:

1
chmod a+x hexo-deploy.sh

重启服务器之后,编辑博文后点击Deploy按钮就能将文章渲染成html页面访问了。

与Github Page同步

GitHub的配置可以参考前文中所提到的博客搭建文章,里面有详细的配置过程。如果需要与Github page同步,则修改hexo-deploy.sh就可以了。
修改如下:

1
2
#!/usr/bin/env sh
hexo g -d

然后重启服务器,点击Deploy按钮即可,之后的改动都会同步到Github上。

服务器配置

DNS解析配置

进入域名的DNS解析中,按如下配置即可:

DNS解析
DNS解析

然后访问你的域名,查看是否能访问到博客页面。

配置Https

关于Https的配置,可以参考这篇博文
需要在阿里云购买云盾证书,并添加解析。在下载完证书之后需要在nginx.conf中配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

server {
listen 80;
server_name www.itnote.tech;
return 301 https://www.itnote.tech$request_uri;
}

server {
listen 443 ssl;
server_name www.itnote.tech;
ssl on;
ssl_certificate /usr/local/nginx/cert/pem_file.pem; #证书地址
ssl_certificate_key /usr/local/nginx/cert/key_file.key; #证书地址
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

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

保存后重启nginx服务

1
service nginx restart

看上图中有锁状的地址即配置成功。

Https Cert
Https Cert