..

浅谈我为什么从 HEXO 迁移到 HUGO

一、为什么选择Hugo

我一直在使用 HEXO 作为我的网站建设工具。最主要的原因在于容易理解,相对比较容易上手,并且有很多齐全的插件供你选择。

首先,第一点得提的就是 Hugo 打出的标语 – The world’s fastest framework for building websites。 Hugo 依靠 Go 语言进行开发,号称世界上最快的构建网站工具。HUGO 具有快速建站的能力。与其他网站建设工具相比,HUGO 具有更快的启动时间和更快的页面加载速度。这对于需要快速响应的网站来说尤为重要。

正是依赖于 Hugo 快速生成的特点,调试方便成了 Hugo 的第二大特点。基本上我在使用 Markdown 语言进行页面编写处修改的内容可以实时地显示在网页上,而不用再次敲命令生成再预览。

第三点自己也是学习和使用 GO 语言,所以也会有所青睐。

二、安装 Hugo

在 macOS 上安装 Hugo 前置条件需要安装 brew

Homebrew 是一款适用于 macOS 和 Linux 的免费开源包管理器。

  1. 安装 GO 和 Git 可以使用 brew 包管理工具
    // 升级 brew
    brew update && brew upgrade
    
    // 安装 Git
    brew install git
    
    // 安装 Go
    brew install go
    
  2. 安装 Hugo brew 扩展版本:
    brew install hugo
    

三、Hugo 快速入门

执行以下命令

# 创建demo目录并初始化网站目录结构
hugo new site hugo-blog  // 你的博客名称这里以 hugo-blog 为例

# 进入项目
cd hugo-blog

# 如果你不会用 git, 就手动的下载主题zip包然后复制到 themes/nostyleplease 并跳过以下两条命令
git init

# 下载 hugo 的 nostyleplease 主题
git submodule add https://github.com/Masellum/hugo-theme-nostyleplease themes/nostyleplease

# 修改配置文件使用主题
echo "theme = 'nostyleplease'" >> config.toml

# 预览当前网站, --watch参数会让程序不断监听当前目录是否有更新然后实时加载。
hugo server --watch

四、使用 Github Actions 自动发布 Hugo 站点

这里使用 *.github.io 仓库维护 build 后的文章仓库。 创建新仓库维护平时文章源代码仓库,因为要同时要维护两个仓库很麻烦,所以借助 Github Actions 自动发布文章。

首先在博客源文件目录下新建 .github/workflows 文件夹,然后再新建 deploy.yml 脚本。

  1. 定义 Github Actions

    name: GitHub Pages
    
    on:
      push:
        branches:
          - master  # Set a branch to deploy
    
    # jobs 是要执行的任务,我们看到他要执行 deploy
    jobs:
      deploy:
        runs-on: ubuntu-22.04  # 运行环境
        concurrency:
          group: ${{ github.workflow }}-${{ github.ref }}
        steps: # 执行步骤
          - uses: actions/checkout@v3
            with:
              submodules: true  # Fetch Hugo themes (true OR recursive)
              fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
          # 安装 hugo
          - name: Setup Hugo
            uses: peaceiris/actions-hugo@v2
            with:
              hugo-version: 'latest'
              extended: true
          # 编译
          - name: Build
            run: hugo --minify
          # 创建 CNAME
          - uses: "finnp/create-file-action@master"
            env:
              FILE_NAME: "./public/CNAME"
              FILE_DATA: "blog.ch3nnn.cn"
          # 将站点发布到对应分支
          - name: Deploy
            uses: peaceiris/actions-gh-pages@v3
            if: ${{ github.ref == 'refs/heads/master' }}
            with:
              deploy_key: ${{ secrets.DEPLOY_KEY }}  # 上文保存至本仓库secrets中的ssh秘钥变量名
              external_repository: ch3nnn/ch3nnn.github.io # 需要将静态文件推送的仓库名
              publish_branch: master # 对应目的仓库的目的分支
              publish_dir: ./public # 推送的文件夹,hugo --minify命令会将静态文件生成至./public文件夹中
              commit_message: ${{ github.event.head_commit.message }} # 指定commit信息
    
  2. deploy key 配置

    生成sshkey 用于 Github Actions 推送 Hugo 生成的静态文件至托管仓库

    #  -C 参数指定github用户的邮箱
    ssh-keygen -t rsa -C chenyinren@vip.qq.com
    # 以下内容为输出
    Generating public/private rsa key pair.
    # 此处输入保存新ssh key的文件路径,不要回车,否则使用默认文件名,会被覆盖。其他地方可一路回车
    Enter file in which to save the key (/Users/chentong/.ssh/id_rsa): id_rsa_deploy_key
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa_deploy_key
    Your public key has been saved in id_rsa_deploy_key.pub
    The key fingerprint is:
    SHA256:iKKuSQt+jFiZc3UbeSDY………………tYrvgO+FRI7tSE waouooo@163.com
    The key's randomart image is:
    +---[RSA 3072]----+
    |     o           |
    |    . o .        |
    |     + . oE o    |
    |    o.o.= .= o   |
    |  .+.o. S=+.o.   |
    | .=.o . . =o+..  |
    |+o o     o O.  . |
    |*o.o      +.+ .  |
    |++.       .oo+   |
    +----[SHA256]-----+
    

    为了能够将静态博客文件上传至<USERNAME>/<USERNAME>.github.io仓库,需要进行deploy key 的配置。首先在本地生成一对 SSH 密钥,然后将公钥配置到 目标仓库,即在目标仓库的 settings 中添加 deploy key 的公钥。 然后在博客源文件的仓库中配置 deploy key 的私钥。从而让 action 脚本可以调用。在仓库的settings中新增 repository secret,将 deploy key 的私钥添加进去。