我的博客搭建历程
前言
搭建过程有些波折,好在总算完成了。目前博客采用hugo的主题。不得不说,hugo使用起来相较于jekyll简单了许多,除了主题生态没有jekyll的丰富,别的没毛病。
起因
上周听Jack大佬的课,翻了某位同学博客 (叶良辰学习笔记),陡然眼前一亮,原来笔记还可以这么玩儿。
其实几年前我就有意搭建个人博客,一直没落实的原因:确实有些忙,偶尔闲下来时又去学习新的知识,自己写博客系统的话,太耗时间、精力(作为一个java程序员,前端能力有限,你懂得。),会的一堆后端技术,这里毫无用武之地。时至今日这个计划已经迟滞了三年多。
很多云笔记也有分享功能,甚至一键发布博客功能。比如有道云笔记、印象笔记、蚂蚁笔记等,都有用过。看了这位同学的笔记(博客)后,回想自己用云笔记的方式,决定还是研究一下博客系统。一个存储私密文档,一个发布公开文档。
百度 - 货比三家
直接写静态页面得不偿失。页面+后端方式实现博客、管理等功能,太重,且前端能力有限。无论如何,最终内容还是要静态页面,除非你不想被搜索引擎扒到。
首先百度搜索静态页面生成器,很多流行的,不晓得先入手研究哪个,对比了许多帖子,决定先看看jekyll。然后在 jekyll主题网站 选择了几个主题。
- 一般主题网站中的主题都有demo,先看demo效果。
- 到github仓库,fork到自己的仓库。
- 根据README.md文档的介绍,将代码拉取到本地,用IDE打开。
(我使用的IDEA,毕竟做后端的…) - 根据使用文档(很多主题其实只有一个文件介绍,不是特别详细,需要自己摸索)修改配置。 尝试了几个主题后,大多功能都正常,个别地方有问题,本地很难调试。(依赖ruby、nodejs等环境,作为java程序员,对这玩意儿认知低的可怜)
尝试了几个主题后,感觉还凑合,将修改好的主题推送到github后,通过gitPages托管。能访问,龟速。
选择 - Hugo
之后翻看网上的博客时,看到有人说使用的hugo,于是点进去搜了一通。选择了几个主题,挨个试。这里说下我使用的感受:
- jekyll优点:主题更丰富,选择性更多。
- jekyll缺点:使用实在太复杂,构建速度着实慢了些。
- hugo优点:使用真的简单,比jekyll简单太多了。构建速度真的快,比jekyll快很多很多倍。(目前没太多内容,构建后大概100多个静态 文件,构建需要500ms左右)
- hugo缺点:主题没jekyll选择性那么多,也还可以。官网上有些主题相对简陋。(注:不是简约,是简陋)
使用jekyll时,看到一个比较喜欢的主题ThemePersephone,只是搞了半天,gitpages托管的代码是可以访问了,本地环境却始终弄不好(ruby的问题,下载了最新版本不行。准备换个版本的安装包,死活下载不了,官网被墙的厉害),只好放弃。之后在HugoThemes下载主题,试用。只需要下载一个二进制文件,不需要其他任何依赖。没有对比就没有伤害,最终选择Hugo
搭建
两款主题 hugo-theme-hello-friend-ng 和 loveit ,最终选择loveit这款主题,原因是,文档超级详细,功能足够丰富。支持搜索引擎(两款)、评论系统、shortcode、emoji等。该有的功能基本都支持,唯一不满的是md text块的背景色、字体颜色有点丑。有空再研究给换个色。
搜索引擎支持两种:
- lunr: 简单, 无需同步 index.json, 没有 contentLength 的限制, 但占用带宽大且性能低 (特别是中文需要一个较大的分词依赖库)
- algolia: 高性能并且占用带宽低, 但需要同步 index.json 且有 contentLength 的限制
暂时选择lunr,原因简单,现在的访问量来看,缺点可以忽略(好吧…两天后-决定将搜索更换为Alogial)。
评论系统略有点麻烦,支持6种评论系统(disqus、gitalk、valine、facebook、telegram comments、commento、utterances),挨个打开,打开valine官网速度较快,最终选择这个,不为别的,官网打开速度的印象分。
评论本身配置相对简单,根据提示来就行。邮件提醒功能略麻烦点,valine从v1.4.0版本后,不再支持邮件提醒功能。只能使用的第三方邮件提醒。关于这个,github上很多开源项目。我选择的 Valine-Admin ,部署到LeanCloud创建的应用中。部署后需要配置一些环境变量,主要是邮件发送的服务器、账号、授权码、自己网站url等。
迁移 - 阿里云
图片资源使用阿里云对象存储OSS,静态页面迁移到阿里云服务器。
GitPages托管方式,访问速度有点慢,还算能接受吧。服务器有、域名有(旧的域名不太喜欢,新域名备案完成还得几天),最终决定迁移到阿里云。部署:服务器安装docker -> docker安装nginx -> 安装git -> 将hugo生成的html文件拉取到nginx路由的目录下,部署完成。
迁移到阿里云后的感受:不卡了,emm…丝滑。嗯,也收费了。
自动部署
使用Github的WebHooks,服务器写一个脚本即可。
好吧,用了一周左右,实在无法忍受这种龟速。整体迁移到了 gitee,gitee 中 自动部署脚本传送门 。
流程大概是这个样子:当push代码到github时,触发回调接口。在服务器上部署一个web项目(我使用的springboot),暴露一个接口供webhooks调用。接口内容是异步方式(一个单线程的线程池)执行shell脚本,完成自动部署。
更轻量的方式,手写代码,使用socket接收请求,执行脚本更加高效。http接口方式写起来比较快,后面如需功能拓展也更方便。
附一张自动部署日志的截图,速度还挺快,部署一次大概400ms左右。
域名备案
wlz922.top是我一直使用的域名,域名备案相对麻烦,思虑再三还是决定再注册一个。
新域名wlizhi.cc审核估计还得几天。
备案流程有点麻烦,周期是比较长的(到域名服务商注册 -> 阿里云初审 -> 通管局审核)。
首先注册域名,注册后是不能直接备案的,要等1-3天。然后申请备案,填一些必须的资料。阿里云关于备案相关资料太多,没看,直接按照流程提示填写资料。之后初审驳回一次(验证资料不规范),按要求重新上传资料,初审通过,等待管局审核。
有一点需要说明,域名备案时,解析的网站首页必须和资料填写的内容一致,页脚必须有备案号链接到 工信部域名备案管理 网站(我上个域名备案时让填的不是这个网址,搞不懂)。
最后
看jekyll、hugo文档、选主题、读主题及主题支持各种插件文档、迁移至阿里云。历时四天,博客主题基本选定(主题选了两天多,换了五六个。强迫症,总想找个更好的)、搭建完成。没事还是要研究一下hugo,折腾已成本能。