前言 链接到标题
Hugo 是用 Go 语言写的静态网站生成器(Static Site Generator)。可以把 Markdown 文件转化成 HTML 文件,因此有很多人利用 Hugo 来搭建自己的博客网站。
安装 Hugo 链接到标题
Mac 上,执行 brew install hugo,Win 上执行 scoop install hugo 即可。使用 hugo new site test-coder 即可创建博客,该命令会在当前目录创建一个名为 test-coder 的子目录,该目录就是创建的博客的源文件仓库。其中,test-coder 可以自行修改为你希望的名称。该目录中的内容如下:
test-coder on main [+?]
❯ ls
archetypes assets content data hugo.toml i18n layouts public resources static themes
archetypes:存放 front matter 模板,hugo命令创建.md文件时会根据该模板来创建;content:存放博客内容;layouts:存放定义为网站的样式,写在layouts目录下的样式文件会覆盖安装的主题中的layouts目录下的同名样式文件;static:存放静态文件,static目录中的内容会在编译时会被移动到public目录,而本地的public目录对应着网站的根目录;public:存放 hugo 生成的静态网页;themes:存放主题文件;config.toml:网站配置文件,也可能是hugo.toml。
安装 Hugo 主题 链接到标题
这里我选择的是简洁纯粹的 hugo-coder 主题。
在 test-coder 目录下执行 git submodule add https://github.com/luizdepra/hugo-coder.git themes/coder 即可安装主题。
安装好主题之后,则需要根据自己的需求修改 hugo.toml,可以参考 hugo-coder 作者给出的 示例,注意 baseURL 处要修改成自己的博客网址。
baseURL = "http://blog.zwyyy456.tech" # 改为自己的博客域名
title = "zwyyy456's blog"
theme = "coder" # 注意你选择的主题名
languageCode = "en"
defaultContentLanguage = "en"
paginate = 6
enableEmoji = true
[services]
[services.disqus]
[markup.highlight]
noClasses = false
[params]
author = "zwyyy456"
# license = '<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA-4.0</a>'
description = "笔记与杂谈"
keywords = "tech, blog, life"
info = ["IT", "Running"]
avatarURL = "img/Quirrel.jpg"
#gravatar = "john.doe@example.com"
dateFormat = "January 2, 2006"
since = 2022
# Git Commit in Footer, uncomment the line below to enable it
commit = "https://github.com/luizdepra/hugo-coder/tree/"
# Right To Left, shift content direction for languages such as Arabic
rtl = false
colorScheme = "auto"
# Hide the toggle button, along with the associated vertical divider
hideColorSchemeToggle = false
# Series see also post count
maxSeeAlsoItems = 5
# Custom CSS
customCSS = []
# Custom SCSS, file path is relative to Hugo's asset folder (default: {your project root}/assets)
customSCSS = []
# Custom JS
customJS = []
# Custom remote JS files
customRemoteJS = []
[taxonomies]
category = "categories"
series = "series"
tag = "tags"
author = "authors"
[[params.social]]
name = "Github"
icon = "fa-brands fa-github fa-2x"
weight = 1
url = "https://github.com/zwyyy456/"
[[params.social]]
name = "Twitter"
icon = "fa-brands fa-x-twitter fa-2x"
weight = 3
url = "https://twitter.com/zwyyy456/"
[[params.social]]
name = "LinkedIn"
icon = "fa-brands fa-linkedin fa-2x"
weight = 4
url = "https://www.linkedin.com/in/zwyyy456/"
[[params.social]]
name = "RSS"
icon = "fa-solid fa-rss fa-2x"
weight = 6
url = "https://myhugosite.com/index.xml"
rel = "alternate"
type = "application/rss+xml"
[languages.en]
languageName = ":us:"
[[languages.en.menu.main]]
name = "Search"
weight = 1
url = "search/"
[[languages.en.menu.main]]
name = "About"
weight = 2
url = "about/"
[[languages.en.menu.main]]
name = "Blog"
weight = 3
url = "posts/"
[[languages.en.menu.main]]
name = "Tech"
weight = 4
url = "posts/tech"
[[languages.en.menu.main]]
name = "Fun"
weight = 5
url = "posts/blog"
[languages.zh]
languageName = ":cn:"
title = "翼仔的博客"
[languages.zh.params]
author = "翼仔"
info = "何以解忧"
description = "唯有杜康"
keywords = "tech, blog, life"
[[languages.zh.menu.main]]
name = "搜索"
weight = 1
url = "search/"
[[languages.zh.menu.main]]
name = "关于"
weight = 2
url = "about/"
[[languages.zh.menu.main]]
name = "文章"
weight = 3
url = "posts/blog"
[[languages.zh.menu.main]]
name = "技术"
weight = 4
url = "posts/tech"
[[languages.zh.menu.main]]
name = "折腾"
weight = 5
url = "posts/blog"
通过 hugo new posts/tech/xxx.md 会在 content/posts/tech 目录下根据 archetypes 中的 front matter 模板生成 xxx.md 文件,默认语言是 en,该博客对应的网址是 https://blog.zwyyy456.tech/posts/tech/xxx/,如果执行 hugo new posts/tech/xxx.zh.md,则会生成 zh-cn 版的博客,对应网址为 https://blog.zwyyy456.tech/zh/posts/tech/xxx,点击如下图的旗帜图标,可以切换博客的语言版本(假如有的话)。

对 PaperMod 主题,是由 archetypes 中的 default.md 作为 font matter 模板,然而 hugo-coder 主题是 posts.md。模板内容如下:
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
lastmod: {{ .Date }} #更新时间
authors: ["zwyyy456"] #作者
categories: [""]
tags: [""]
description: "" #描述
weight: # 输入 1 可以顶置文章,用来给文章展示排序,不填就默认按时间排序
slug: ""
draft: false # 是否为草稿
comments: false #是否展示评论
showToc: true # 显示目录
TocOpen: true # 自动展开目录
hidemeta: false # 是否隐藏文章的元信息,如发布日期、作者等
disableShare: true # 底部不显示分享栏
showbreadcrumbs: false #顶部显示当前路径
---
注意这里
comments暂时不能设置为true,否则会编译失败,留待后续解决,毕竟我也不需要评论系统。
目录设置 链接到标题
在 content/posts 目录下,我创建了 tech、blog、read 这四个目录,对于 papermod 主题,以 tech 目录为例,我们需要在对应目录下创建 _index.md 和 _index.zh.md,才能访问到 https://blog.zwyyy456.tech/zh/posts/tech 和 https://blog.zwyyy456.tech/posts/tech,否则对应地址会显示为 404。index.zh.md 的内容如下:
---
title: "技术"
description: "种一棵树最好的时间是十年前,其次是现在"
hidemeta: true
---
而 hugo-coder 主题则不需要创建 _index.md。
部署博客到 vercel 链接到标题
购买域名 链接到标题
我的域名 zwyyy456.tech 是在阿里云处购买的,同时也是托管在阿里云上的,价格为 10 年 188 元,根据自己的需求购买即可。我的域名解析也是在阿里云上的。
Netlify 部署博客 链接到标题
将整个项目,如 test-coder 这个文件夹,作为一个 git 仓库上传到 GitHub,然后 Netlify 点击 Add new site -> Import an existing project,选择 Deploy with GitHub,就能将对应的仓库导入到 Netlify,部署的时候设置一下站点名,其他默认即可。

项目部署好之后,添加自己的域名,以 test-blog.zwyyy456.tech 为例,添加为 subdomain,然后点击 External DNS,根据给出的 CNAME 信息去阿里云添加域名解析,如下图所示:


解析生效之后就能通过 test-blog.zwyyy456.tech 域名访问博客了,之后,每次 git push 到 GitHub,Netlify 都会重新部署网站以使内容保持最新。
添加图床以及网站备案 链接到标题
我使用的图床是白嫖的又拍云,而使用又拍云国内图床,需要一个备案过的域名,因此就需要对前面申请的域名进行备案。考虑到域名是通过阿里云购买的,因此也通过阿里云进行备案,于是,我们需要一个阿里云的备案服务号,而备案服务号则需要你有阿里云的服务器(至少一年),当然,闲鱼似乎也有卖备案服务号。
由于之前备案的时候没有做记录,这里就不再演示,跟着阿里云的备案流程走即可,注意备案时网站名称不要出现博客或者论坛等字样,建议“项目笔记”。
又拍云图床的使用教程参见 将博客的图床从 SM.MS 迁移到又拍云 。
由于免费使用又拍云图床以及备案,都需要在网站底部显示对应内容,因此在 layouts/partials 目录下创建 footer.html,内容如下:
<footer class="footer">
<section class="container">
©
{{ if (and .Site.Params.since (lt .Site.Params.since now.Year)) }}
{{ .Site.Params.since }} -
{{ end }}
{{ now.Year }}
{{ with .Site.Params.author }} {{ . }} {{ end }}
·
{{ if (and .Site.Params.license) }}
{{ i18n "licensed_under" }} {{ .Site.Params.license | safeHTML }}
·
{{ end }}
{{ i18n "powered_by" }} <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> & <a
href="https://github.com/luizdepra/hugo-coder/" target="_blank" rel="noopener">Coder</a> & <a
href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral">
<img src='/img/upyun.svg' alt="又拍云" width="53" height="18"
style="fill: currentColor; position: relative; top: +3.5px;">
</a>.
{{ if (and .Site.Params.commit .GitInfo) }}
[<a href="{{ .Site.Params.commit }}/{{ .GitInfo.Hash }}" target="_blank" rel="noopener">{{
.GitInfo.AbbreviatedHash }}</a>]
{{ end }}
<br>
<a href="https://beian.miit.gov.cn/" target="_blank">湘 ICP 备 2023038416 号</a>
</section>
</footer>
最后显示效果如下:

为博客添加内容搜索功能参见 使博客被搜索引擎收录。