wordpress迁移到hexo icarus

Wordpress有点臃肿,反应速度一般,于是花下班时间把整个博客迁移到了Hexo上。更加轻量,更加简洁,速度更快。

一、Hexo简介

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

二、Hexo和Wordpress区别

  • Hexo跟Wordpress不一样
    • Hexo是一个node.js构建的博客工具,一篇文章就是一个markdown文章,然后Hexo可以把文章渲染成html代码,也就是静态页面,更加轻量
    • Wordpress是用php写出来的博客系统,有后台管理系统,有资源管理系统,更加的全,同时也更加的臃肿

我之前一直没有备案,所以之前用的境外服务器并不稳定。如果想要进行博客的迁移会非常麻烦。我需要

  • 安装Mysql
  • 安装Apache2
  • 安装PHP
  • 配置PHP和 Mysql
  • 下载Wordpress程序
  • 安装phpadmin数据库管理
  • 配置博客系统

非常麻烦,每一次大概需要十来分钟的样子,系统也会占用很多的资源,需要启动Mysql、PHP和Apache2。

而且Wordpress备份很麻烦,需要备份源码和数据库。

但是Hexo只有两部分,本地写文章,用一个git仓库保存源码,然后一个git仓库保存生成的静态文件。没有数据库什么的,两个git仓库或者一个git仓库两个分支就OK。方便、快捷。

对于开发环境来说,有git,安装Node.js,然后把仓库拉下来就可以写作了,写完了push到仓库,没有任何备份成本。

对于博客的服务器来说,更简单了。安装Nginx,反向代理一个文件夹。然后把生成的静态文件仓库拉下来就好了。

三、Hexo搭建

Github地址 https://github.com/hexojs/hexo

官方文档 https://hexo.io/zh-cn/

搭建的教程比较简单,文档中也有详细的说明,这里就不赘述了。

四、仓库管理

  • 我的开发环境是本机,安装了Hexo,源码对应了一个github源码仓库。
  • 我的线上环境是腾讯云的服务器,只安装了git和Nginx反向代理,对应的github静态文件仓库。

具体步骤如下:

1、修改配置文件

在hexo/_config.yml中配置静态文件仓库地址即可,或者一个博客仓库两个分支也可以,我为了便于管理用了两个仓库。

1
2
3
4
deploy:
type: git
repository: 静态文件仓库地址
branch: master

2、安装依赖

1
npm install hexo-deployer-git --save

3、配置源码仓库

把hexo这个文件夹绑定到github源码仓库,这样文章编写完成后,在hexo文件夹下保存markdown到源码仓库。然后执行命令hexo g -d 自动将编译后的文件传到静态文件仓库。

五、全自动构建

但是这样腾讯云服务器不会自动更新最新的静态文件仓库,于是配置github勾子,简单的理解就是github在收到你push请求的时候会发送一个请求到指定地址,然后腾讯云那边收到请求执行一下git pull更新代码即可。

1、配置勾子

  • 打开github仓库->Settings->Webhooks
  • Add webhook

我的配置如下

  • Payload URL 是你的IP地址:请求名称
  • Content type 选application/json
  • Secert 密钥
  • Which events would you like to trigger this webhook? 选Just the push event. 因为我们只需要在本地push后服务器pull一下即可

2、服务器配置

2.1 新建webhooks.js

在服务器nginx代理的静态文件夹下新建文件

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
var http = require('http');
var spawn = require('child_process').spawn;
var createHandler = require('github-webhook-handler');

// secret 保持和 GitHub 后台设置的一致
var handler = createHandler({ path: '/webhooks_push', secret: '' });

http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location');
})
}).listen(16666);

handler.on('error', function (err) {
console.error('Error:', err.message)
});

// 监听到push事件的时候执行我们的自动化脚本
handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref);

runCommand('sh', ['./deploy.sh'], function( txt ){
console.log(txt);
});
});

function runCommand( cmd, args, callback ){
var child = spawn( cmd, args );
var resp = '';
child.stdout.on('data', function( buffer ){ resp += buffer.toString(); });
child.stdout.on('end', function(){ callback( resp ) });
}

2.2 新建deploy.sh

1
2
git reset --hard
git pull origin master

2.3 安装node.js和npm

上方的脚本是基于node.js的,所以我们在服务器也需要安装node.js 和npm

我的服务器系统是ubuntu 安装命令如下,centos和debian请麻烦查一下安装命令

1
2
sudo apt-get install nodejs
sudo apt-get install npm

2.4 安装forever

forever是一个forever是一个nodejs守护进程,完全由命令行操控。forever会监控nodejs服务,并在服务挂掉后进行重启。

安装命令如下

1
npm install -g forever

启动文件

1
forever start webhooks.js

2.5 回顾

简单点说就是GitHub在收到push请求的时候,给服务器发送一个请求,服务器收到的时候执行deploy.sh这个文件,我们让他git pull,这样就能实现全自动构建。

六、博客修改

博客的自动构建OK了,那么下来就需要对博客进行配置了,其中觉得不够精致的地址或者看着不舒服的地方进行修改。详见下篇博客。


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×