Hugo+Github Actions+Github Pages 搭建个人页面

总述

经过了一段时间的探索和比较,最终使用了 Hugo + Github Actions + Github Pages 的方式来尝试搭建个人页面,同时选择了两个仓库(一个私有仓库用来存放源文件,一个公开仓库用来存放编译后的静态文件)的方式来完成这个过程。

最终达到效果:

  • 有一个私有仓库存放 Hugo 项目及内容,多台电脑可以通过 git 实现该仓库的同步,满足(可能存在的)多台电脑编辑内容的需求。
  • 有一个公开仓库存放 Hugo 项目编译后的静态文件,可以通过 Github Pages 访问,这个即为最终的个人页面。
  • 私有仓库的每一次提交(push),触发 Github Actions 进行自动编译并推送到公开仓库,实现自动编译和自动部署。

总体上还是比较满意这个效果的,基本上也能满足个人站点的需求。

搭建过程

创建仓库

创建两个仓库,一个私有仓库用来存放 Hugo 项目及内容,一个公开仓库用来存放编译后的静态文件。

前者仓库名称随意,后者名称固定为 <用户名>.github.io

创建 Hugo 项目

此处省略安装 Hugo 的步骤,安装参考官方文档或网络上的教程。

1
2
3
4
5
6
hugo new site <项目名>
cd <项目名>
git init
git submodule add https://github.com/themes-hugo/hugo-theme-learn.git themes/learn
echo 'theme = "learn"' >> config.toml
hugo server

访问 http://localhost:1313,即可看到 Hugo 项目的默认页面。

逐句解释:

  1. hugo new site <项目名>:创建一个名为 <项目名> 的 Hugo 项目。
  2. cd <项目名>:进入项目目录。
  3. git init:初始化 Git 仓库。
  4. git submodule add https://github.com/themes-hugo/hugo-theme-learn.git themes/learn:添加主题。
  5. echo 'theme = "learn"' >> config.toml:配置主题。
  6. hugo server:启动 Hugo 服务器,并自动编译项目。

其中 hugo 相关的命令可以参考 Hugo 官方文档。Hugo 主题可以参考 Hugo 官方主题列表 选取自己喜欢的主题进行安装或者直接在 GitHub 上以’hugo+theme’为主题搜索。主题的 GitHub 地址内一般都会有主题的安装、使用说明。

个人建议使用一些 star 较多、更新时间较新、说明比较详细的主题。

一方面因为 Hugo 更新的原因,一些比较旧的主题内的说明可能不再适用,如:实际上 Hugo 的配置文件已经变化,现在默认的配置文件名称为hugo.yaml,而许多较旧的主题的说明中配置文件名称仍然为config.toml

另一方面 Hugo 的自定义配置内容除一些通用的配置(在 Hugo 官方文档内)外,基本都是依赖于主题的自定义配置,主题的文档详细程度决定了在后续调整过程中的难度。

创建 Github Actions

这里省略将上述 Hugo 项目通过 git 上传到私有仓库的步骤。

WARN:

由于时间比较久,部分配置过程的环节可能有所遗漏,后续如果我想起来或者我按自己这篇文档都走不通 (那还写个屁啊!) 的时候会再补充。

在私有仓库的 .github/workflows 目录下创建一个名为 deploy.yml 的文件,内容可参考如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: deploy

on:
  push:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4.1.7
        with:
          submodules: true
          fetch-depth: 0

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v3.0.0
        with:
          hugo-version: "latest"
          extended: true

      - name: Build Web
        run: ls&&hugo

      - name: Deploy Web
        uses: peaceiris/actions-gh-pages@v4.0.0
        with:
          personal_token: ${{ secrets.PERSONAL_TOKEN }}
          external_repository: `username`/`username`.github.io
          publish_branch: main
          commit_message: ${{ github.event.head_commit.message }}

PERSONAL_TOKEN 为 Github 个人令牌,可以在 Github 个人设置中创建,该 TOKEN 需要有 repo 和 workflow 权限。username 为 Github 用户名。

完成以上步骤后,提交一次推送到私有仓库或手动触发一次 Github Actions ,即可自动触发编译并推送到公开仓库。然后访问 https://username.github.io 即可访问编译后的静态文件。

其他内容如当前页面使用的主题的部分自定义项、更换页面字体等后续闲(mō)下(yú)来(dē)的(shí)话(hòu)再补充。