终于还是把个人博客搭建起来了。
TODO List: 评论功能…. 别的再想想
要不断完善下去
总之先总结一下到当前这里,我做了什么。
Hugo#
什么是hugo#
我个人理解是一个网页生成工具,Go语言编写的所以安装hugo前还需要安装go
hugo在命令行中使用,所以安装好hugo之后需要把可执行文件放到环境变量路径里面去 or 直接在可执行文件目录下打开终端使用 or 使用绝对路径
我在windows系统中使用,直接下载的编译好的可执行文件
具体教程可以直接看官网 Installation | Hugo官方文档
常用的hugo命令#
到目前为止,我使用过的hugo命令一共就四条
hugo new site [path]
在path路径下创建一个hugo目录,目录的基本构成如下
E:\BLOG_SOURCE_CODE ├─archetypes ├─assets │ ├─article │ └─img ├─config │ └─_default ├─content │ ├─about │ ├─link │ ├─music │ ├─posts │ └─resume ├─data ├─i18n ├─layouts ├─public ├─static │ └─img └─themes
archetypes 存放使用hugo new [path]生成的文件的默认内容(如日期时间、标题等)
hugo new [path]
也就提到这个命令的用法,一般我使用path是posts/…
这里的path前可以默认认为有一个content,也就是path是content文件夹下的文件路径。所以content文件夹一般存放我们想要上传的博客正文的markdown格式文件。
assets和static里面存放我们需要用到的一些图片文件,assets里面的图片用于网页样式设置的图片(如背景,图标等等),而static里面的文件用于文章里引用的图片文件,比如上面的截图就是放在static文件夹下。
config文件夹有两种存在形式,如果用hugo new site生成,那或许不会有config这个文件夹,而是有一个hugo.toml文件
config文件夹可以理解成hugo.toml配置文件的精细化,里面有_default文件夹,配置文件在_default文件夹中。我使用的Blowfish主题包含hugo, language, menus, params, taxonomies的配置。这些在blowfish或者你选用的主题的官方文档里都会有介绍各个参数的用法,这里就不一一解释。
其余文件夹不用太在意,theme文件夹存储你想使用的主题样式,public文件夹用于存放hugo执行后自动将content以及theme样式转换成网页(即html)以后的文件、图片等等。
然后就是
hugo
hugo server
hugo命令直接生成网页样式,hugo server会在本地起服务器,从浏览器localhost:1313可以访问到你的网站。
至此,就是我在使用hugo过程中用到的所有命令。
下载theme样式#
Hugo Themes 这里有hugo官方提供的样例,可以选择自己喜欢的进行下载,然后把相应的文件存放到theme文件夹下。
有几种下载方式,git submodule 下载到theme文件夹下,或者直接下载源码压缩包然后解压到theme文件夹下,理论上是一致的,但是用git submodule下载的话,在仓库更新的时候,本地更新也会更方便一些。
并且下载源码压缩包,文件夹名可能会带有master之类的后缀。需要注意theme下文件夹名称对应的就是config文件里所引用的theme=''的字段名,二者要严格对应。
然后可能就需要再花一点时间去看看theme的官方文档了,里面会介绍config文件的设置方法,里面字段名称的默认值和作用等等。。
至此,你已经可以在本地部署一个hugo生成的网站了。
Github Page#
这个网站只在本地维护,不对外开放,别人在网址里面输入localhost:1313当然访问不到
所以使用Github page,将这个网页与github page结合,这样别人在网页输入github page的地址就能看到相关网站了
创建github page也非常的简单
但这时,我们输入"用户名.github.io"是没有内容的
怎么让hugo生成的网页放到我们生成的github page上呢?
把public文件夹上传到这个github仓库就可以了
如果整个Hugo的文件夹都想要用github维护的话,可以用github action,创建.github/workflows文件夹,里面放入gh-pages.yml文件,内容如下
name: github pages # 名字自取
on:
push:
branches:
- main # 这里的意思是当 main分支发生push的时候,运行下面的jobs,这里先改为github-actions
jobs:
deploy: # 任务名自取
runs-on: ubuntu-latest # 111在什么环境运行任务
steps:
- uses: actions/checkout@v2 # 引用actions/checkout这个action,与所在的github仓库同名
with:
submodules: true # Fetch Hugo themes (true OR recursive) 获取submodule主题
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo # 步骤名自取
uses: peaceiris/actions-hugo@v2 # hugo官方提供的action,用于在任务环境中获取hugo
with:
hugo-version: 'latest' # 获取最新版本的hugo
# extended: true
- name: Build
run: hugo --minify # 使用hugo构建静态网页
- name: Deploy
uses: peaceiris/actions-gh-pages@v3 # 一个自动发布github pages的action
with:
# github_token: ${{ secrets.GITHUB_TOKEN }} 该项适用于发布到源码相同repo的情况,不能用于发布到其他repo
external_repository: Ridiculous-ops/Ridiculous-ops.github.io # 发布到哪个repo11
personal_token: ${{ secrets.AUTO_UPDATE }} # 发布到其他repo需要提供上面生成的personal access token
publish_dir: ./public # 注意这里指的是要发布哪个文件夹的内容,而不是指发布到目的仓库的什么位置,因为hugo默认生成静态网页到public文件夹,所以这里发布public文件夹里的内容
publish_branch: main # 发布到哪个branch
比如我的github仓库中创建了Blog_Source_Code仓库,这个仓库用于维护整个hugo网页,但是github page只需要public文件夹的内容,就可以在Blog_Source_Code文件夹中这样设置。
设置完之后,在每次git push时就会自动执行action把public文件夹push到github page的那个仓库里去了。
但是这样设置还是不够的,还需要把自己的token放入这个仓库的action里面。
如下操作
用户的setting里打开,左侧有Developer Settings进入,到如下界面



external_repository: Ridiculous-ops/Ridiculous-ops.github.io # 发布到哪个repo11
personal_token: ${{ secrets.AUTO_UPDATE }} # 发布到其他repo需要提供上面生成的personal access token
secrets.AUTO_UPDATE这个AUTO_UPDATE是我再上一步中起的名,换成你自己用的密钥名称就行。 仓库地址换成自己的仓库地址。
至此,在push源码仓库的时候就会同步push public文件夹到github page了。


