跳过正文
这个网站的诞生。。。

这个网站的诞生。。。

·255 字·2 分钟
Ridiculous
作者
Ridiculous
A little bit about you

终于还是把个人博客搭建起来了。

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]生成的文件的默认内容(如日期时间、标题等)

我的default.md

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的地址就能看到相关网站了

https://pages.github.com/

创建github page也非常的简单

我的githubpage
创建新的仓库,严格保证仓库名为“用户名.github.io”的格式,访问权限设置为public,就可以了。

但这时,我们输入"用户名.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进入,到如下界面

3
全选repo的权限,生成
4
生成一个token,然后复制(一定要复制保存,这个只会在生成的时候显示,后面要忘记了就要重新生成了) 然后去代码仓库的setting添加actions的密钥

5
名字随意,建议全大写。Secret粘贴刚才生成的token
我的default.md
最后把刚才的gh-page.yml文件中的倒数3、4行

		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了。