Hugo
    
使用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目录下面放置文件,然后用相对路径  的方式来引用图片就可以了,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.