博客迁移至hugo gitpage

为什么迁移?

6月初的时候,3年前买的阿里云服务器到期了,又买了其他服务器,但是只有1年期,于是进行了一番数据,应用迁移,这么一顿操作下来还是挺累的,尤其是在linux上安装mysql,mongodb,安装后又是连接不上,用了好几天时间才搞定,挺烦的。
再想到一年后又是一顿操作,不由得一个激灵。

经过一番的思量后,决定将自建博客迁移至gitpage上。

自建和gitpage优劣对比

首先列出自己博客具备的功能:

  • 首页 包含最近10篇文章的标题和部分内容,最近发表的5篇,分类,标签,友链
  • 目录 所有文章时间线
  • 留言 自维护留言系统
  • 微博 新浪微博,最近出问题不显示了
  • 速记 简单记录
  • 关于 自我介绍

整体比较简单,没什么复杂功能。而很多静态博客也具备这些功能,而且做的更好,所以基本不会有主要功能的缺失。所以迁移到gitpage上也不会有什么问题。

劣势

静态博客在一些细节功能上面确实会有缺失,比如:

  • 评论功能,数据原来是存在自己服务器上的,gitpage不具备数据存储能力,所以需要对接第三方评论或留言功能。
  • 目录缺失,这点主要由博客主题决定,有些主题是没有目录功能的。
  • PV/UV统计,同样是由于数据存储的缺失,所以gitpage也没有这样的统计功能,但是可以添加谷歌,百度统计之类的。
  • 自定义功能较弱,只能使用主题提供的页面模式,除非不使用静态博客工具,完全自己开发。
  • 不能在线编辑。

优势

  • 免费,没有服务器费用。
  • 可以自定义域名,只需要一丁点儿的域名费用。
  • seo良好。
  • 规范的书写格式,使文章内容更统一美观。
  • 更强大的编辑器,可以选择自己喜欢的markdown编辑器。
  • 便于本地检索。
  • 数据更保险,不易丢失。

整体来说,除了数据存储功能缺失外,其他都是可以实现的。

迁移过程

将mongodb数据中的博客导出为本地markdown文件。

// mongodb数据转markdown
function genMd() {
	return Blog.find({ status: 1 }, null, { sort: { '_id': -1 } })
		.then(data => {
			data.forEach((b) => {
				debug(b)
				let tags = b.tags.split(",")
				let blog = `---
title: "${b.title}"
description: "${b.content.replace(/<[^<>]+>/g, "").replace(/\r\n/g, "").replace(/\n/g, "").substr(0, 80)}"
date: ${b.updatedAt.toISOString()}
draft: true
authorbox: false

categories:
  - "${b.category}"
tags:
  - "${tags[0]}"
  - "${tags[1]}"
  - "${tags[2]}"
  - "${tags[3]}"

---
${b.content}
                    `
				fs.writeFileSync(`f:/workspace/yuedun\.wang/content/blogdetail/${b.id}.md`, blog, { flag: 'a+' })
				// debug(b.createdAt.toISOString())
			})
			return "data";
		});
}

ok!完成。

总结

博客不同于网站,博客主要的作用是文字记录,图片展示,它不需要太多的定制化。所以hugo这类静态博客可以让你从程序修改的繁琐工作中解脱出来。 这和人的成长过程相似,年轻时喜欢折腾,长大后喜欢稳定。