距离上一次搭建blog已经超过两年了,这两年并不是懒得写东西,而是实在是懒得折腾hexo了。 在看了好几种方案之后,最终还是选择了hugo。

why hugo?

比较流行的静态blog生成方案包括:

  • jekyll 需要ruby支持,也是gihhub上支持最好的方案。
  • Octopress 基于jekyll的增强方案。
  • hexo 基于nodejs,也是我之前一直在折腾的方案。
  • pelican 基于python。
  • hugo 基于Go语言的静态网站生成工具。

选择hexo之前,我一直在用wordpress写blog,wp是一个非常笨重的系统(虽然也很强大)。

需要自己经常去看一下主机的情况,而且修改主题复杂的要命。

hexo解决了哪些问题呢?

  • 不需要主机的经费支出
  • 基于nodejs,技术栈相对友好,易于二次开发

但在后面的实际使用中,我发现hexo带来了更多的问题。

首先是版本更新,每次hexo发个大版本,更新的时候99.5%都会报错,然后无法渲染页面,这时候就需要到google上去找解决方案,为了这个问题我都把主题重构过好几遍了。

其次是渲染问题,因为静态blog需要本地渲染,所以所有要写作的设备上都需要装一遍hexo(以及npm还有一大堆的包),然后你还得 祈祷 这些hexo的版本是一致的,这样渲染出来的页面才不会报错。

这两个问题实在是太痛苦了!

以至于这两年的文字写作都转移到了简书和微信公众号上。


直到我看到了hugo,不由得眼前一亮!

hugo超级轻量,平台随意安装,没有包管理的问题(就是说你呢,npm

hugo没有任何主题依赖,安装好之后里面真的 什么都没有

你会发现这几个文件夹里几乎全是空的。

hugo速度超快,目前为止这个blog中大概有十几篇文章,每次生成全站的速度都不超过10ms,也能做到实时预览,真是爽快!

hugo 第一步

首先,找到安装包,点这个链接找到你需要的版本,只有 6MB 大,真是感动的要哭了……

当然作为mac用户你也可以选择输入 brew install hugo 来快速安装。什么,你不知道brew,哪你不妨先搜索一下brew吧。

找到对应的文件路径,输入

hugo new site yoursitename

就创建好了文件夹,里面包括了以下的文件结构:

  • content 用来放文本和页面内容的地方
  • archetypes 用来放 .md 文件的模板
  • data 用来放特殊定义的数据(json yaml之类的)
  • layouts 用来放页面模板,也是我们后面会魔改的地方
  • static 用来放静态文件
  • themes 主题
  • public 用来存放渲染出来的静态文件

此时输入

hugo server 

会在本地启动一个服务器,可以访问 http://localhost:1313 看一眼。

当然这个链接里面完全是空的,什么都没有,毕竟文件夹里全部都是空的,没有内容也没有主题。

添加主题

添加主题其实很方便,首先到hugo的主题官网看一下,挑选一个心意的主题,或者到github上搜一个star数高的也行。

我为了魔改方便,选了一个非常非常轻量的主题 hugo-paper,作为blog的主题。

cd yoursitename/
git submodule add https://github.com/nanxiaobei/hugo-paper.git themes/hugo-paper;

然后修改根目录下的 config.toml ,这是blog中的基本设置,其中有几个比较重要:

baseURL = ""
# 主机名称,后面会提到
title = ""
# blog的标题
theme = "hugo-paper"
# 使用的主题,对应 /themes/你的主题名称

其他还有很多有用的参数,想要了解可以看这里

有了主题之后,就差添加第一篇文章了!

第一篇文章

直接输入

hugo new post/fisrt-post.md

就会在 content/post 下新建一个md文件,只需要编辑里面的内容,比如加一句 hello world ,马上就能在浏览器中看到渲染出来的文章了,速度非常快。

如果想要添加其他的文章,只需要继续新增文章即可。至于怎么新增其他类型的文章,或者应用文章模板,我们后续再说。

github page 够用吗?

之前用hexo的时候一直在使用github page,算是比较稳定的免费服务,但是体验上比较差的地方在于github page 的页面渲染需要在本地完成然后发 commit 上去。

然而hexo的编译经常出问题,三天两头报错,因此我看了其他的方案。

首先是用 Travis-CI 的方式,通过自动化追踪的方式来部署页面,大概需要这么做:

  1. 生成github token
  2. 用 travis ci的命令行工具加密token,然后把这个配置到配置文件中。
  3. 用 travis ci 向 page 页面的 gh-pages 提交渲染后的静态文件

能配置倒是能配置,就是太麻烦了。

Netlify 闪亮登场!

通过朋友的介绍,我找到了 netlify 这个服务。

它对自己的定义是:

An all-in-one workflow that combines global deployment, continuous integration, and automatic HTTPS. And that’s just the beginning. 一个包含全球部署,持续化集成以及自动 HTTPS 的全能工作流。

使用它很简单,包括三步:

  1. 连接 git repo:支持 github gitlab 以及 bitbucket。
  2. 添加编译设定:比如设定分支,编译命令,以及输出的文件。
  3. 等待自动部署好。

对于免费用户来说,流量和部署速度都没有打折,还是非常贴心的。

Netlify 使用指南

想要和 hugo 联动也是非常的简单。

首先连接 github 账号,在 repo 列表中找到对应的 repo。

netlify 会读取出来这个 repo 的类型,如果是 hugo 就会自动填写上 bulid command 和 publich directory。

我们不用管这个,直接点最下面的 Deploy site

稍等一下,页面就会自动部署完,你可以在 Deploys 的页面中看到每一次部署的结果,如果后面有一个 Failed 标志,说明部署失败了。

如果一切正常,那么你之后的每一次 git 提交,都会触发 netlify 重新编译部署一次页面,很快blog 就展示全新的内容了,这种感觉非常爽!

设置自定义域名和 HTTPS

在 netlify 中当然也可以设置自定义域名,点击 Settings,找到 Domain management,就可以添加自定义域名了。

netlify 本身也会给你生成一个默认的二级域名,也是可以用的。

添加域名的过程其实就是在 DNS 服务中增加一个 A 记录的转发,我使用的是 DNSPOD,在设置中直接新增一条,将根域名 wocai.de 转发到 netlify 提供的 ip 地址上就好了。

netlify 还提供了免费的 https 证书服务,证书由 Let’s Encrypt 提供,一键点击即可,非常之方便。

后记

在告别了 wordpress 和 hexo 之后,我最终选择了非常轻量的静态生成器 hugo 和优秀的部署服务 netlify,经过合理的组合,终于不用再每次编译提交了。

但超级轻量的 hugo 带来了另外一个问题,太简单了,什么都没有,这意味着所有的功能都需要自己研究然后改造模板。这部分内容留着下次说罢。