跳过正文
  1. Notes/

如何用 Hugo 与 Github Pages 建立博客并设置主题

loading · loading · ·
Blog How
目录
使用 Hugo 与 Github Pages 建立博客,并使用 Blowfish 主题

前言
#

建立博客也有接近一个月的时间了,在此过程中,从开始时较为简陋的模板逐渐探索,现在也初见规模了。今天就将这一个月的经验总结一下,希望有所帮助。

Hugo 是由 Go 语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。更多介绍可以查看 官网 ,本文旨在介绍如何使用 hugo 和 github 搭建一个博客,并且部署一个主题。

我们的博客其实可以分为三个部分,一个是我们方便编辑的本地后端(git 库),一个是我们上传到网上的在线后端(github 库),还有一个是我们的博客前端(github pages),下面我们详细介绍一下各部分如何建立和联系。

0.准备工作
#

  1. 安装 go
  2. 安装 git
  3. 安装 hugo
  4. (可选)安装 typora

注:本文所用环境为 Linux,在 Windows 或 Mac 上方法类似。

1.安装 go
#

在 go 的 官网 下载安装包 go1.23.3.linux-amd64.tar.gz,之后输入:

tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz

解压到 /usr/local 目录。然后设置环境变量:

sudo gedit /etc/profile

在末尾加入 export PATH=$PATH:/usr/local/go/bin ,保存即可。

完成后我们在终端输入:

go version

如能出现 go version go1.23.3 linux/amd64 的结果,则证明安装成功。

2.安装 git
#

在终端中输入:

sudo apt install git-all

安装完成后,输入:

git --version

如出现 git version 2.34.1 的结果,则证明安装成功。

3.安装 hugo
#

在终端中输入:

sudo apt install hugo

安装完成后,输入:

hugo version

如出现 hugo v0.139.2-770f548b47b39e6f0fd4da1cc80552024e5829e1+extended linux/amd64 BuildDate=2024-11-23T15:33:51Z VendorInfo=snap:0.139.2 的结果,则证明安装成功。

4.(可选)安装 Typora
#

Typora 是一款 Markdown 编辑器,能够十分方便的编辑 .md 文件并查看效果,这使得在 Linux 上编辑文章也十分方便。

在 Typora 的 官网 ,我们可以在页面底部找到 Linux 的 安装方法

先下载 typora_1.9.3_amd64.deb 文件,然后输入:

sudo dpkg -i typora_1.9.3_amd64.deb

进行安装。(也可以使用 apt-get 方式安装)

安装好后,需要进行激活,这里参考 此文章 进行激活,不再赘述。

5.建立 GitHub 后端库
#

首先拥有一个 GitHub 帐号,登录之后,创建一个新的 repository

Repository name 中填写任意一个名字,作为后端库的名字(如 MyBlog )。在 Private 前面勾选,表示该库是私有的。勾选 Add a README file ,表示添加一个默认的 readme.md 文件,这一步是为了便于后续 git clone

点击右下角 Create repository 后,我们就创建好了我们的后端库,这时后端库中只有一个 readme.md 文件。我们需要到后期配置好主题后,才会将它补充完整。

6.建立 GitHub 前端库(GitHub Pages)
#

再创建一个新的 repository ,这里的 Repository name 要求必须是 你的GitHub用户名.github.io ,如图:

Public 前面勾选,表示该库公开。勾选 Add a README file ,这会设置 main 分支作为默认的主分支,这点在后续推送博客内容时十分重要。(也可以手动设置)

这里讲一下设置两个库的目的,其实后端库不是必要的,把所有内容一股脑放到前端库中也可以构建博客,但此时别人是可以访问到你的源文件的。也就是说,你的各项配置,文档图片,甚至未公开的草稿等都可以被人直接下载。

为了设置一点隐私性,我们在后端库中上传所有文件,将利用 hugo 渲染出的 .html 网页文件同步传输到前端库中。这样别人既能通过前端库看到我们的博客,又不能直接访问我们的源文件。

为了上传后可以自动发布,我们需要设置一下 GitHub Actions 功能。

GitHub 设置 界面找到 Developer settings ,点击 Personal access tokens 中的 Tokens(classic) ,点击右上角的 Generate new token ,选择 Generate new token(classic)

设置一个名字(这里假设为 HUGO ),勾选 repoadmin:repo_hook ,在 Expiration 选项选择 No expiration ,这样就不必频繁更新了。点击 Generate token ,并将显示的 token 复制下来保存好(只显示一次,如果不保存则后续需要重新设置 token)

接下来进入后端库的界面,如图:

找到右侧的 Settings ,点击后找到左侧的 Secrets and variables ,点击 Actions 。点击 New repository secret ,名称自取(这里假设为 HUGO ,与刚才的 token 名称无关),Secret 中填写刚刚复制保存的 token。

至此,我们只需要再设置好配置文件,就可以自动发布了,配置文件将在下一节创建。

7.建立本地 Git 后端库
#

本质上来说,我们只要有后端库和前端库,博客就能生效。但是我们无法直接在 GitHub 上操作,因此需要在本地建立 Git 后端库,再将二者联系起来。

首先在本地建立一个文件夹,在此文件夹中,将在线后端库克隆到本地,此时出现一个 MyBlog 文件夹。

对 git 基础操作不了解的同学可以看这篇文章:

如何快速上手 Git
loading · loading
Linux Git

进入 MyBlog 文件夹,打开终端,输入:( xxx 是网站目录,任取一个名字即可)

hugo new site xxx

可以看到出现了一个文件夹,名称为 xxx,里面有一些文件夹和文件。此时,我们的博客后端已经建成了。

这时我们进入该文件夹,创建一个 .github 文件夹,进入 .github ,创建一个 workflows 的文件夹,在该文件夹下,创建 gh-pages.yml

打开该 .yml 文件,粘贴以下代码(注意: external_repositorypersonal_token 需要修改):

name: github pages

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest	# 这里最好换成 ubuntu-22.04, 避免高版本不兼容
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
          fetch-depth: 0

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.139.4'	#这里一般是 latest,但 0.139.5 暂时有问题
          # extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          # github_token: ${{ secrets.GITHUB_TOKEN }} 该项适用于发布到源码相同repo的情况,不能用于发布到其他repo
          external_repository: DeathGarurumon/DeathGarurumon.github.io	# 改成你自己的地址
          personal_token: ${{ secrets.HUGO }}	# HUGO 改成你的 secret 的名称
          publish_dir: ./public	# 发布public文件夹的内容
          publish_branch: main	# 发布到哪个branch

8.安装和配置主题
#

Hugo 社区 提供了许多主题,每个主题都会有相关的安装文档。这里我们以本博客所用主题 Blowfish 为例,讲解一下安装过程。

Blowfish 比较贴心的一点是有详细的 中文文档 ,按照 安装教程 ,我们进入刚刚的网站目录,输入:

git init
git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish

此时主题文件就下载完毕了。

接下来我们将网站根目录的 hugo.toml 删掉,新建一个文件夹并命名为 config,在 config 中新建一个文件夹并命名为 _default

在网站根目录下,我们进入 /themes/blowfish/config/_default ,将里面的所有 .toml 文件都复制到刚刚我们新建的 /config/_default 中。

1.配置 hugo.toml
#

打开 hugo.toml ,设置以下必要项:(若有注释,取消即可)

theme = "blowfish"
baseURL = "https://DeathGarurumon.github.io/"
defaultContentLanguage = "zh-cn"	# 这里选择你的网站语言(主要和配置选择有关)
pluralizeListTitles = "true"

2.配置 languages.zh-cn.toml
#

这里的文件名后缀要注意,需要与 hugo.toml 中设置的 defaultContentLanguage 保持一致,其它后缀的可以删除。

打开 languages.zh-cn.toml ,设置以下项目(主要是主页相关):

languageCode = "zh-cn"
languageName = "简体中文"
title = "DeathGarurumon"	# 这个是页面左上角的名称
[params]
  logo = "img/author.png"	# 页面左上角的logo,需要在对应目录下放置图片
[params.author]
  name = "DeathGarurumon"	# 主页的中心位置
  image = "img/author.jpg"	# 主页的logo位置
  headline = " All work and no play makes Death a dull boy.
"	# 这是座右铭的位置
  links = [	# 这里可以添加主页上自己的链接
    { twitter = "https://twitter.com/username" }
  ]

3.配置 menus.zh-cn.toml
#

这里的文件名后缀也需要与 hugo.toml 中设置的 defaultContentLanguage 保持一致,其它后缀的可以删除。

打开 menus.zh-cn.toml ,设置以下项目(这里是右上角和左下角的目录相关):

[[main]]	# main是指右上角
  name = "文章"	# 这里是目录名称
  pageRef = "docs"	# 这是目录对应的路径,位于 /content/docs
  weight = 10	# 这里是位次的相对权重,weight小的会排在前面

[[main]]
  name = "娱乐"
  pageRef = "play"
  weight = 15

[[main]]
  identifier = "email"
  pre = "email"
  weight = 300
  url = "mailto:deathgarurumon@gmail.com"

[[main]]
  identifier = "github"		# 这里是站外链接
  pre = "github"
  url = "https://github.com/DeathGarurumon"
  weight = 400
  
[[footer]]	# footer表示左下角
   name = "标签"
   pageRef = "tags"	# 这里是自动建立,无需手动设置目录
   weight = 10

[[footer]]
   name = "分类"
   pageRef = "categories"
   weight = 20

这些设置后的效果大概是这样:

4.其他配置( params.toml 等)
#

params.toml 中都是一些个性化配置,可以边调边试,按照自己喜好配置。

详细的说明可以查看官网的 简单开始 页面和 配置 页面。

9.本地预览
#

在博客根目录打开命令行,输入:

hugo server

如果没有报错,就说明成功在本地建立了我们的博客网站。此时,我们可以在浏览器中访问 http://localhost:1313/ 来查看我们的博客。

如果遇到报错,通常是这种形式:

ERROR [zh-cn] REF_NOT_FOUND: Ref "docs/installation": "/MyBlog/Main/content/s/_index.zh-cn.md:15:113": page not found
ERROR [zh-cn] REF_NOT_FOUND: Ref "samples": "/MyBlog/Main/content/s/_index.zh-cn.md:15:176": page not found
Built in 125 ms
Error: error building site: logged 2 error(s)

我们只需要按照报错的目录和行数,将对应的错误修正即可。

值得注意的是,本地建立的网站会随着我们修改源文件而实时变化,所以我们在更改配置或编写文章时,可以实时查看呈现出的效果,十分方便。

10.创建文章
#

在 hugo 中创建文章,可以输入:

hugo new xxx.md

这会创建一个 xxx.md 文件,且这个文件会以 archetypes 文件夹中的 default.md 作为模板。因此我们可以先修改 archetypes ,这样以后就不用一一添加了。

然而,我更推荐手动创建文件夹,再在文件夹中创建文档,具体可以看 这里

我们的文章通常都保存在 content 文件夹中,但如果直接在 content 目录下创建文章,会杂乱无章难以找到。因此,我们可以创建一些文件夹,作为文档库,每个文档库下存放不同的文章,这样就很方便了。(这些文档库就对应了 menus.zh-cn.toml 中的 pageRef

对于单独的文章,我们可以先建立一个文件夹,名称内只包括英文和下划线。然后在文件夹中建立 index.md ,这样每篇文章互不影响。在每篇文章的文件夹内,可以放置一个 feature 开头的图片文件,这样就可以设置该文章的缩略图。同时,也可以将文章中的图片放在文件夹内,便于索引。如图:

## 11.推送本地源码到后端库

对 git 基础操作不了解的同学还是可以先看这篇文章:

如何快速上手 Git
loading · loading
Linux Git

首先将本地 git 连接到 github 的后端库上,并设置名称为 origin ,接下来将本地库 push 到后端库上。在网站根目录下输入(第二行后面改成你自己的后端库 SSH 地址):

git init -b main
git remote add origin git@github.com:DeathGarurumon/HouDuan.git
git pull --rebase origin main
git add .
git commit -m "first commit"
git push origin main

之后,刷新一下网页,就能发现后端库中出现了你的源码。

转到前端库,点击 Actions ,些许等待后,会发现后端库的 /public 文件夹已经push 进来了,而且成功 deploy。

此时我们访问 https://deathgarurumon.github.io/ ,就可以看到我们的博客啦!

后记
#

之后的博客生涯中,我们只需要修改本地文件,hugo server 查看效果,然后 git 三连,即可更新我们的博客。git 三连如下:

git add .
git commit -m "xxx"
git push origin main

参考文献
#

1.如何用 GitHub Pages + Hugo 搭建个人博客

2.Blowfish 入门指南

3.Hugo Quick start