前言
之前试过在blogger和GitHub Pages搭建博客,也用过docker+WordPress搭建,但是后者因为日志过大,加上markdown写起来不是很方面,所以现在又用hugo+GitHub Pages +Actions来搭,这样markdown写起来方便,离线的时候用起来方便
优势
对于docker搭建wordpress的博客是很舒服的,不用考虑图床之类的问题。只需要担心的是wordpress插件会不会出问题之类的, 配置需要一些时间,反向代理域名和端口,还有CF配置SSL等。
hugo相比hexo生成个人感觉好用一些。首先hugo部署很方便,而且环境配置只需要配置环境变量然后就能用了。配置问题主要是Actions的部分,还有就是CF的ip添加一次只能添加一个,比Google的麻烦一些。但是Actions确实很好用,省去了本地生成的麻烦,只需要push到博客仓库就行了(此处的博客仓库是一个私有仓库,不是公开的仓库)。
部署
首先,需要拥有一个github账号,并且在这个账号中建立两个仓库:
1.用于存储hugo site的源码,并且在这个仓库中加入Actions的文件,用于实现github的actions生成。
2.用于存储生成之后的网站的源码,这个仓库就是用于展示的仓库。
完成前置条件之后,部署博客的大体思路是这样的:
作者首先安装Go语言的环境和hugo,然后初始化site,配置本地的site文件,推送到github的源码仓库,由源码仓库中的Actions执行生成name.github.io
仓库中的内容,打开这个链接就可以访问了,之后配置cloudflare之类的比较简单了。
go和hugo环境配置
下载go语言的安装包,添加bin目录到环境变量中(win平台是安装的,所以不需要):
下载地址:https://go.dev/dl/
|
|
安装hugo并且配置hugo
|
|
在网站的父目录中创建网站:
|
|
添加主题,因为这个时候的hugo网站是没有主题的,所以需要添加主题,在此之前,先说明hugo在本地的生成是有两种的,一种是hugo server -D
这种是生成所有的文章预览,包括草稿,如果开始的框中的draft:true
这种情况下,只用hugo server
是无法生成预览的,把true改为false,才能生成预览,这种情况之下,及时推送到github然后actions也没有文章可以看到。
清除git所用的代理配置:
|
|
将theme\examplseSite
里面的config.yoml东西复制出来,放到网站的根目录中,这时候就基本相当于配置好了一个基本的网站了(里面的内容还是examplesite的)。
推送到github
推送到github需要有两个步骤,首先需要将账户登录到git,这里需要配置密钥对,生成的方式:
|
|
第一个密钥对:
首先配置github认证需要的两个密钥,私钥放到本地,公钥上传到Settins|SSH and GPG keys|Authentication Keys 这里。
然后就可以git来推送文件了。
第二个密钥对:
用于连接两个仓库,一个是私有仓库用于存放hugo site根目录中的所有文件,在这个仓库中的Settings|Secrets and variables|
中部署私钥,这里的私钥就是类似key里面的内容,直接全部复制到里面就行了,这里的名字要记住,然后在actions中的文件配置需要用到。
公钥的位置放到name.github.io
仓库中的Settings|Deploy keys
位置,建议起名字的时候可以和前面的私钥对应,或者方便识别。
配置好了密钥之后,可以初始化本地仓库,完成之后就可以推送到远程的私有仓库,在私有仓库中的actions页面执行生成静态网站的步骤。
|
|
一般情况下如果顺利的部署步骤是:
|
|
配置actions
actions是一个可以进行自动化测试的工具,比如可以通过配置文件,将源代码生成为./public
中的静态网站,并且推送到一个共有的仓库,这样私有仓库中的一些源码等内容不会在共有仓库中显示。
对于github 的actions工具,会有一个类似shell的运行结果,如果出现了失败,会有报错,根据报错搜索就可以找到解决方案,一般来说google出来的结果可以解决,actions的运行报错类似如
配置这个文件,需要在网站的根目录中添加目录:.github/workflows/
写一个yml格式的文件。
我的文件格式如下:
|
|
这个文件的配置我也是参考了网上的连接,是一个github仓库,在里面会有指导怎么写yml文件,我这个文件是满足部署,可以运行的。
报错解决
Not submodule
在部署的时候,出现"Not submodule……."(这里的报错涉及到的是主题),这个需要在根目录中写一个名字是.gitmodules
的文件,然后将你的主题的submodule放进去就行,一般hugo的主题有一个仓库是存放了一堆submodule的,在里面更改为如下的方式就好:
|
|
或者在添加主题的时候,就将主题以子模组的形式添加到themes文件夹中:
|
|
如果markdown文件中出现了错误,也会导致报错,不放心的话可以在push的时候看着actions的运行状态。
图片无法显示
设置图片的根目录,在文章首框中加入:
|
|
或者将markdown文件命名为:index.md
,然后将图片复制到文章的项目目录下,形成如下的结构:
|
|
这个文章中下含有了文章index.md
和图片报错实例
,这个图片的名字是可以命名的,这样也好在本地使用。
站点修改
设置avatar.png
在根目录中的assets
文件夹中新建img
文件夹,放入avatar.png
。
站点头像
实际目录:/static/images/favicon.ico
设置:
|
|
设置评论
采用Disqus作为评论系统,只需要更改网站根目录中的config.yaml
文件中disqusShortname
的值即可,改为Disqus的账户名称(需要注册Disqus账户并且用邮箱激活)。
需要在Disqus添加站点,访问:🔗,选择I want to install Disqus on my site,选择免费计划,可以不配置平台,然后在配置中一路默认最后选择完成配置就行。
更换域名、用户名、仓库名字
域名
更换域名需要更换cloudflare的DNS记录,nameserver还给CF的,强制https,A记录添加为185.199.10x.153(x为9-11),代理状态为仅DNS。
用户名字
如果更换了仓库名字或者github用户名字、域名,需要更改配置文件(ymal中的内容,和hugo.yml external_repository:,static中的CNAME记录,这里可以用everything搜索CNAME修改)。
一般是更改config中的内容,改为用户名+github…的形式,域名需要将所有的旧域名替换成新域名,如果出现无法push的情况,可以更换密钥,添加到公开仓库的时候可以勾选上Allow write access
,可以解决128报错无法推送的问题。
报错
如果ssh更新但是没有添加邮箱(-C),可以把私钥名字改为id_rsa重新push。
发布文章
上面用的是index.md
来存放文章内容,所以写新文章的时候用:
|
|
这样图片直接复制到当前文件夹就行了。
开启KaTex支持
通过修改根目录下的config.yaml
中的
|
|
即可开启数学公式支持。
双机更新
如果有两个不同系统的笔记本,比如一个Ubuntu和一个Windows,可以在两个设备上同时clone下来仓库,比如已经完成了另一个设备上的git安装,还没clone仓库到本地时候。
首先将私钥复制到用户目录的ssh文件中,然后在相关目录中直接:
|
|
发生更新之后,即使博客的更新只有一个人,但是仍然需要检查是不是相比仓库发生了更新,如在win上更新之后但是没有pull,但是mac端先pull 到主要分支,如果下次在win上直接pull而不比较内容,会出现覆盖mac端pull的情况,所以需要检测当前的版本是不是最新的,如果和远程仓库有区别需要先把远程仓库的更新拉到本地然后pull:
|
|
到此就完成了两个主机上博客的更新部署,只不过需要在更新的时候先检查远程和本地的区别,然后再选择是否更新。
报错
merge 报错:如果merge提示报错怎么办
hugo server 出现Page not found:
|
|
这种情况就是hugo的theme文件夹中的主题问题,因为之前配置过submodule,github pull下来之后,发现主题文件夹是空的,因为之前改过主题,所以直接把主题过来了,此时在生成就是动态的网页了。
参考
Hugo actions的指导:https://github.com/peaceiris/actions-hugo
报错解决:https://www.youtube.com/watch?v=DMgEGpqXEM4
主题gitmodules:https://github.com/gohugoio/hugoThemes/blob/master/.gitmodules
标题无法从一级标题开始显示:https://huweim.github.io/post/blog_hugo_%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84/