如何使用Github搭建个人博客

Hugo+Github Pages+Github Action 方案

Posted by 陈十二 on Wednesday, November 2, 2022

简介

本文将详细介绍Github搭建个人博客的流程,其中,通过hugo搭建本地服务,托管在Github Pages上,并用Github Action实现了CI/CD,非常方便!
注:本文是以macOS系统来讲解的。

搭建本地服务

Hugo,号称世界上最快的构建网站的框架,凭借其惊人的速度和灵活性,让搭建网站变得十分有趣。下面,我们将安装Hugo,并搭建本地服务。

安装Hugo

推荐使用homebrew方式来安装Hugo,十分简单。

brew install hugo

等待完成,进行验证:

hugo version

创建站点

通过hugo命令来创建一个新的web站点:

hugo new site "博客名"

hugo_new_site

命令执行完毕,将会创建一个文件夹:

hugo_site_folder

选择主题

推荐两个主题库: Hexo ThemesHugo Themes
你可以自行选择一个喜欢的主题,并通过git submodule add命令安装至theme文件夹下(这里以hugo-theme-cleanwhite主题为例):

git submodule add https://github.com/zhaohuabing/hugo-theme-cleanwhite.git themes/hugo-theme-cleanwhite

通过命令启动Hugo服务器:

hugo server -t hugo-theme-cleanwhite

http://localhost:1313/将会看到由主题生成的示例网站。

hugo_server

配置Hugo

config.toml配置文件在根目录下,可根据自身的需求进行修改。可参考hugo-theme-cleanwhite主题下的exampleSite文件夹中的文件。

hugo-theme-cleanwhite

默认的文章存储在./content/post文件夹下,每当运行Hugo启动服务命令后,Hugo将自动生成静态网站文件至. /public文件夹中,此时我们只需要将新增的文件内容发布在网络上即可。

更详细的配置规则,可参考Configure Hugo

写博客

现在我们可以创建一篇文章了。执行下面的命令,会在./content/post文件夹下新增一个名为hello-blog.md的文件:

 hugo new post/hello-blog.md

我们会看到,有默认的数据,将其进行修改后,就可以在下面编写文章了。 hugo_hello_blog

本地部署

执行命令,就可以直接通过http://localhost:1313/地址在本地访问并预览网页了。

hugo server -t hugo-theme-cleanwhite

至此,Hugo本地服务已搭建完成。

发布到Github Pages

接下来,我们将搭建好的本地博客托管到Github,以hello-blog.md为例。

前期准备

1、Github账号
2、发布好的本地静态网页文件,即hello-blog.md执行hugo命令后./public目录下的结果。

基本流程

下面我将介绍如何发布到Github Pages

1、创建新的Github仓库
新建一个public仓库,并命名为username.github.io,其中username必须是github账户名!!! hugo_github_repository

2、将Github仓库拉到本地
在你指定的目录位置,执行git clone命令,将远程仓库拉到本地。

git clone https://github.com/username/username.github.io.git

3、将静态网页文件添加至Github仓库
Hugo命令生成的./public文件夹下的所有文件,拷贝至本地仓库,这一步可以手动拷贝,也可以用命令实现。

cp -rf hugo-site/public/* username.github.io/
git add --all
git commit -m "init commit"

4、提交至Github仓库

git push -u origin main

注:git操作,建议使用github客户端来完成,可以省去账号登录的工作。

提交完成后,在浏览器中输入https://username.github.io/,就能看到你的博客了。

配置Github Action实现CI/CD

最后,我们要通过Github Action完成两件事:

1、编译,生成静态网页文件
2、部署,将静态网页文件拷贝到指定的位置

这样一来,我们只需要通过git push命令来触发Github Action就可以了。

前期准备

1、私有库,用于存放博客源码
2、公开库,用于存放静态网页文件(已有,username.github.io)

基本流程

1、创建私有库,配置Github Action
在GitHub,创建一个私有仓库,命名为hugo-blog,并通过git clone命令将仓库拉到hugo-site目录下。

git clone https://github.com/username/username.github.io.git "/hugo-site"

./hugo-site/.github/workflows/目录下创建一个hugo.yml文件,参考如下:

name: hugo blog
on:
  push:
    branches:
      - main
jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Check out source
        uses: actions/checkout@v2

      - name: Setup hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "0.104.3"
          extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.PERSONAL_TOKEN }}
          external_repository: username/username.github.io
          publish_dir: ./public
          publish_branch: main

Github Action包含四个步骤:

  • Check out source,拉取代码
  • Setup hugo,准备Hugo环境
  • Build,使用Hugo编译并生成静态网页文件
  • Deploy,部署并发布到Github Pages

注:其中的PERSONAL_TOKEN,在第2步中进行讲解。

2、配置合适的TOKEN 首先,需要生成一个Personal access tokens

[1] 在GitHub个人主页,以此点击Settings -> Developer settings -> Personal access tokens -> Tokens(classic),进入如下页面: hugo_personal_access_tokens [2] 点击Generate new token(classic),在Note中输入名称,如GITHUB_ACTION_TOKEN,在Select scopes选择workflowhugo_action_token [3] 点击Generate token,将生成的token复制,为后续创建secret做准备;
(*** 一定要复制!!!一旦离开此页面,将无法再次查看此值 ***)

[4] 在私有库(hugo-blog)项目下,依次点击Settings -> Secrets -> Actions,进入添加Action secrets的页面,点击New repository secret按钮: hugo_action_secrets [5] 新增secret,Name项输入hugo.yml中设置的PERSONAL_TOKEN,Secret项输入步骤[3]中复制的token值,然后点击Add Secret按钮,即可。
(注:Name的值,不能以GITHUB_开头,否则会创建失败) hugo_new_secret

至此,整个使用 Hugo + Github Pages + Github Action 方案搭建个人博客的过程已讲解完毕!

结束语

完成上述配置后,当我们写完一篇md文章后,通过git push命令或者Github客户端推送到远程仓库时,将会触发GitHub Action, 按hugo.yml文件配置的工作流自动编译并生成静态网页文件,并推送到Github Pages仓库。当Github Pages仓库更新完成后, 又会自动触发官方页面部署CI,实现网站的自动发布。

以上就是Hugo搭建本地服务、GitHub Pages自动部署和发布,实现了一个完整的自动发布系统,心动不如行动,抓紧用起来吧!