使用hugo搭建静态markdown博客
文章目录
前言(这一段唠嗑,请自行跳过)
其实想要搞一个博客已经有一段时间了。由于种种原因(其实就是懒),一直没有真的动手。说起原因,我觉得比较重要的就是:现在市面上的博客已经有很多了,我也想不到什么特色功能,也就没有什么动力自己动手写一个博客。
之前有尝试过一些开源的项目,但是均以失败告终了(不是项目不好,是有其他原因的)。下面说说尝试过的一些开源项目:
- wordpress。wordpress是一个基于php的CMS,使用mysql作为数据库,功能十分完备,各种模板,支持后台管理,自定义模块什么的。不过我失败的原因,竟然是,我那1核1G的服务器根本跑不了wordpress啊,无奈只能放弃。
- blog。这个博客系统呢,是小伙伴开发的,目的是为了测试tinygo框架。项目支持分类、文件管理、评论等博客常用的功能,这个博客系统我也用过一段时间,发现他的markdown编辑器有点难用,在加上UI不出众,所以决定找个新的。值得一提的是,得益于golang的性能,tinygo框架以及这个博客系统对系统资源的要求非常低,很好的解决了我在用wordpress时的尴尬。
- jekyll。这个项目是在搞github page的时候发现的,那时候学到了一个新的概念,静态博客生成器。结合自己的需求,突然很喜欢这样的静态博客,总的来说就是简洁、够用。而且jekyll还有一个天生优势,那就是得到了github page的支持,这个优势非常明显,我们可以省下一大笔购买服务器的钱。但是我在用这个的时候呢,又碰壁了,得益于国内的网络环境,我尝试了好几次都不能安装成功(也许是我需要一个linux系统,我记得之前安装失败是报了个msys2的错)。能够成功安装jekyll的同学,我还是很看好这个项目的。
然后就来到了hugo,这个项目简直完美满足我的所有需求啊,而且有很多很漂亮的主题。不过在使用过程中,还是踩了很多坑,下面就说说这整个过程。
安装
得益于golang的特性,编译后,我们就可以得到一个hugo的可执行文件。如果只是想用hugo来写博客,而不是研究他的源码什么的,我建议直接到这里选择适合你操作系统的版本下载,因为只有一个可执行文件,太方便了。不推荐大家使用源码安装还是因为hugo有用到一些托管在golang.org上的package,很难下下来。
拿到hugo的可执行文件之后呢,就跟着官方的quickstart一路下来,基本没有什么大的问题(一开始尝试了一下换主题,不过由于没有很理解hugo的渲染逻辑,果断失败了,下次搞好了再写一篇关于主题的文章)。
如何使用hugo
一开始用 hugo new site your_site_path 创建一个hugo项目之后,我就懵了,可能是我没有乖乖按照quickstart的流程走,所以产生了这么多问题。
- 我是谁?
- 我在哪?
- 我要干什么?
- 我怎么设置分类?
- 我怎么写文章?
- 我怎么在首页显示列表?
经过一段时间的摸索之后,我发现hugo帮我们做了很多事情。下面就简要说说我用到的一些基础功能吧(以下内容以默认的ananke主题为主,没有试过别的主题,不知道是否一样)。
创建新文章
创建新文章用到了hugo的一个命令,hugo new path/file.md,这个命令会在content目录下根据你的参数来创建文章,并会在文件中加入一些配置信息(类似于模板一样的东西,模板文件为archetypes目录下的default.md)。
首页
首页是位于content目录下的_index.md文件。
分类
在content目录下创建子目录,hugo会将这些子目录识别为分类。每一个子目录下面都可以放一个_index.md文件,作为该分类的主页内容,这些内容会被渲染在分类列表页。
文章
在content目录或其子目录下创建md文件,hugo会将这些文件识别为文章,并根据目录归到相应的分类中去。
图片
放一张测试图片
 我们在编写博文的时候,自然是需要用到图片的。我们可以在content目录或者static目录下面放置文件,然后用相对路径
我们在编写博文的时候,自然是需要用到图片的。我们可以在content目录或者static目录下面放置文件,然后用相对路径  的方式来引用图片就可以了,hugo会自动识别图片所在的位置并把图片放到相应的位置。
部署方案
刚开始上手hugo的时候,我想了两种部署方案。介于我在服务器上用了docker,所以想说一下第一种方案。
构建hugo的docker镜像,将hugo项目挂载到container里(deprecated)
这种方案并不好用,简单说一下,就是利用docker构建hugo的镜像(拉取hugo的源码,编译)跑一个容器,将hugo项目(就是我们的博客)clone到服务器的目录,通过volumes将该目录挂载到前面的容器。这个方案是打算用hugo当静态文件服务器使用的,但是后来看到了官方文档关于hugo_server的描述,加上尝试这种方案时遇到的一些问题(js,css引用链接不对),果断放弃了。官方原文如下:
While hugo server is high performance, it is a webserver with limited options. Many run it in production, but the standard behavior is for people to use it in development and use a more full featured server such as Nginx or Caddy.
根据官方建议,我们采取下面那种方案。
本地编译hugo项目,部署hugo生成的静态文件到服务器
官方文档提到,hugo server设计的目的是为了方便用户在编写文章时的调试。于是乎,我们就按着官方的思路来,在本地创建一个hugo项目,然后跑起hugo server写文章,写好之后利用hugo命令生成静态文件(默认好像是public目录)。将public目录的文件发布到服务端,跑一个静态的http server就可以拉,官方推荐nginx或者caddy,我也感觉这两个很ok拉。
后续
- 本文会继续更新一些hugo相关的内容。
- 关于如何使用caddy或nginx来部署静态web服务,则不在本文的论述范围内了。请有兴趣的小伙伴自行查阅相关资料。
文章作者 NaRro
上次更新 2018-01-26