0%

Wordpress迁移到hexo(ECS)

从开始写博客至今已经2年有余;最开始选择博客系统的时候,由于wordpress操作比较简单,并且云虚拟机也比较便宜(其实这个才是重点。。。那时还不知道有Github。。。),所以就选择wordPress来搭建我第一个博客~

后来接触的事物多了,逐渐也了解到了多个博客系统,如:

  • Hexo,基于node.js的静态博客生成系统,使用markdown来写作,有多种丰富的插件和主题可供选择,文档完善,可以搭建在Github上(这个是重点,省钱省事。。。)
  • Hugo,基于Go的静态网站生成器,操作上跟Hexo比较类似,也可以搭建在Github上;网页生成速度上比Hexo快上很多(这个是很多人选择Hugo的原因之一)
  • Halo,基于Java的博客系统,这个跟wordpress比较类似,有完善的后台系统,上手管理容易,可搭建在各个服务器上
  • Wordpress,操作简单,插件丰富,主题可选度较高,搭建方便(一般虚拟机都已预安装好),我曾经戏说wordpress的操作就类似小时候的QQ空间。。点点点就好了。。。 由于最近半年来wordpress的虚拟主机不定时的内存爆满导致死机,体验感有点不太好;并且有想法试试静态博客(感觉更加美观点~),所以决定放弃使用wordPress。。。

至于为何要用云服务器,而不用Github呢,则是考虑到:

  • GitHub国内访问速度会相对较慢。。。
  • 网站无法被百度搜索到,因为github禁止百度爬虫抓取数据。。。
  • 可能以后会由于不知名的原因导致Github无法访问(有点扯远了)。。。

接下来就是为期一周的填坑之旅(从Halo => Hugo => Hexo):

  • 首先,在阿里云上买了台ECS服务器,需要注意的是ECS服务器进入/出口的端口都未开放的,需要一一开启;服务器里防火墙端口也一样
  • 接着,前段时间由于生信技能树小伙伴的推荐,我首选Halo博客系统,并且其与wordPress比较相似,也有后台管理系统;但是!我发现其文章跟wordPress一样是存在数据库(比如mysql)中的,后期如果迁移到其他博客系统的话会比较麻烦,需要看开发者来开发一些插件才行(而我希望能将文章md直接存在服务器的目录中);唯一收获是学了Nginx和Caddy两个反向代理的方法,后者可以自动认证免费的SSL证书
  • 接着觉得Hugo也不错,搭建完后发现可选主题有点少,插件也相对较少(其实主要还是主题的原因。。。),而且网上关于如何把Hugo搭建到服务器上的教程也较少,那时一头雾水(现在看来,其实方法跟Hexo一模一样,用Nginx即可)
  • 最后由于无意间看到一款比较合心的Hexo主题(Yelee),因此转用hexo来搭建博客,下面也就是在ECS服务器上搭建Hexo过程的记录

Hexo相关配置

安装hexo和nodejs

系统配置:

  • 主机:阿里云的ECS服务器
  • 系统:ubuntu 16.04

nodejs安装:

参考:https://github.com/nodesource/distributions

# Using Ubuntu
# Node.js v11.x:
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs

安装hexo:

apt-get install nodejs-legacy
npm install hexo-cli hexo-server hexo-deployer-git -g

建站,初始化Hexo:

hexo init myblog
cd myblog
npm install 

Hexo文件夹:

root@aliyun:~/Hexo/myblog# tree -L 1
.
├── _config.yml             # 最主要的配置文件
├── db.json
├── debug.log
├── node_modules
├── package.json            # 应用程序的信息(可移除)
├── package-lock.json       
├── public
├── scaffolds               # 新建文章的模板文件
├── source                  # 资源文件夹是存放用户资源的地方,我们将Markdown或者HTML的文件放到该目录下的_posts目录,即可自动解析
└── themes                  # 主题文件

启动命令(-p 端口):

hexo server -p 4000 --debug

理论上正常应该通过公网IP+端口即可访问Hexo主页,但由于的ECS服务器的原因,需要先在ECS系统管理中开始出/入端口(比如4000),并且在ubuntu系统中开启对应的防火墙端口

firewall-cmd --permanent --zone=public --add-port=4000/tcp
firewall-cmd --reload

wordpress迁移到hexo

这个迁移工作hexo有专门的插件,先安装hexo-migrator-wordpress插件

npm install hexo-migrator-wordpress --save

切换到blog目录下执行,wordpress.2019-11-02.xml是我从wordpress中导出的文件(包含所有文章的信息)

hexo migrate wordpress wordpress.2019-11-02.xml

这里有几个问题:

  • 这个插件好似无法识别中文,所以导出的每篇md格式的文章名称都无法正常显示(不确定是否是我的问题。。。),所以后续要一一修改
  • 如果在wordpress中,你的每篇文章是有多级分类的,那么导出的md文章的Front-matter中只会保留最底层的那个分类,如果以后还需要保留多级分类,则需要每篇再补上对应的上级分类信息。。。
  • 如果想保持文章迁移前后的URL保持不变,需要在hexo配置文件中设置下永久链接,因此Wordpress的文章URL都是带有archives字段的,这点和Halo博客也一样。。。

服务器配置

配置 Nginx 网站目录

和本地一样,网站也要有一个放东西的文件夹,由于nginx默认的目录是'var/www/html',所以我建议你使用'var/www/blog',当然,你用别的也可以,就请自己记住目录,下文也替换成你自定义的目录便是

网站存放文件的目录,用于Nginx托管

sudo mkdir -p /var/www/hexo

修改目录的权限,让所有用户都能访问

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

修改 Nginx设置,打开/etc/nginx/sites-available/default文件,修改:将root设置为上述目录

root /var/www/hexo

配置图片/文件路径

以上为常规操作,但如果还想设置一个专门放文件/图片(的目录(也就是说在服务上建个“图床”,方便在文章中链接;文件也类似,方便下载),还需要接着配置nginx

比如我由于是从wordpress服务器上转到阿里云的ECS服务器,之前文章的图片链接都是跟着域名走的,因此我需要在现在服务器上专门再建个相同路径的文件夹来存在文件和图片

具体教程在网上搜:nginx访问静态文件,或者参考:Nginx 入门教程

大致步骤如下:

创建文件夹目录,分别是存放文件和图片的路径,可供网站访问

mkdir -p /var/www/html/data
mkdir -p /var/www/html/data/photo

修改Nginx配置文件,加上下面一段:

location /data/photo/ {
    root /var/www/html/;
    autoindex on;
}
location /data/ {
    root /var/www/html/;
    autoindex on;
}

创建私有Git仓库

创建Git仓库,搭配后续的Git钩子使用;创建目录并修改权限

sudo mkdir /var/repo/
sudo chown -R $USER:$USER /var/repo/
sudo chmod -R 755 /var/repo/
cd /var/repo/

并用Git命令初始化仓库

git init --bare hexo_static.git

配置Git钩子

什么是Git钩子:Git能在特定的重要动作发生时触发自定义脚本,即我们可以通过Github远程仓库自动更新文章到我们服务器的目录下

创建钩子文件

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

并在文件中添加命令(主要用checkout切换分支,所以如果仓库目录跟上面写的不一样,记得同样修改下述代码中的路径)

#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f

将上述钩子文件赋予执行权限

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

配置本地部署

即修改hexo配置文件_config.yml,修改Deployment;其中root是用户,然后IP,最后是Git仓库路径

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: root@47.103.90.109:/var/repo/hexo_static
  branch: master

最后其实单独设置个Git用户并设置SSH登陆,并给与其权限比较方便;不然就会每次发布时都要输入root密码咯

生成文件

上述配置完后,先把wordpress导出的md文件放置到source/_posts目录下,然后生成静态文件并部署

hexo generate --deploy

Summary

Hexo主题选择:https://hexo.io/themes/

Hexo配置官网文档:https://hexo.io/zh-cn/docs/

我选择的主题是Yelee,有很详细的文档:http://moxfive.coding.me/yelee/

建议开启:谷歌分析服务,具体方法可看各个主题是否已配置好相关脚本,或者直接按照谷歌分析的文档来操作

还可以用不蒜子统计访问量,并在页面中展示

Hexo Admin插件,可以生成一个类似于后台的管理页面,方便文章的修改等等

npm install --save hexo-admin
hexo server -d -p 4000
# 浏览器打开IP:4000/admin/

如果为了后续写作方便,可以在scaffolds/post.md修改默认生成的Front-matter,比如参考:自建博客系列(八)再次具体实践下怎么撰文和发表,我简单的设置了几个(`来分割摘要):

---
title: {{ title }}
date: {{ date }}
tags:
id:
comments: false
categories:
---

<!-- more -->

参考文章

hexo文档
优化hexo访问速度-将hexo部署到云主机VPS
阿里云搭建Hexo博客
从 0 开始搭建 hexo 博客
博客搭建可行性方案( jekyll , hexo , Wordpress )
在 Ubuntu 14.04 服务器上部署 Hexo 博客
Hexo 个人博客部署到 CentOS 个人服务器

本文出自于http://www.bioinfo-scrounger.com转载请注明出处