记录Hugo博客搭建的过程
博客搭建
本文初步设定按照时间顺序,记录博客搭建的过程和踩过的坑,以及过程中学会的新姿势(
技术栈选择
Hugo + GitHub Page
搭博客这个想法年初就有了,git仓库也建好了,结果一直咕到现在。。。
搭之前参考了一下周围同龄人大佬的技术栈,基本上分为Hexo和Hugo两类。逛了一下Hugo git仓库发现是拿go写的,果断选择Hugo(不得不说,go确实优美)。也是早早听说Github有免费托管网页的功能,因为相较其他部署方法(服务器Netlify等)感觉比较方便,所以选择了Github page。
直到暑假NUS夏令营接触了一下云服务器,开学看了计网自顶而下的应用层部分,才知道HTTP协议,网络应用通信的基本原理有多简单。后悔没有早点了解,一直云里雾里。
Hugo安装
Windows 11
一定要记得下载extend版本,非extend版本不支持Sass/SCSS扩展
Hugo并不提供installer安装版本,需要自行从git仓库下载对应版本安装包并解压。
对于具体的安装,官方文档还贴心地给出了面对Technical Users和Less-technical Users的不同教程(,然而在Technical Users一栏在PowerShell中配置Path的方法是临时的。好奇PowerShell有没有像Linux .bashrc配置文件一样的东西,经过一番google发现确实有,Ps用一个叫profile的文件管理启动配置。于是马上按文档来创建。
创建
| |
编辑
| |
配置.ps1
| |
研究了一下,Ps的
$env:path变量保存的初值是系统path+用户path,这条语句只会改变当前ps命令行的path值,不会影响系统变量。
兴高采烈打开新Ps窗口,结果一大堆红字就跳了出来,貌似是没有脚本运行权限。又search一番发现,原来ps默认禁止配置脚本运行(晕。查阅有关文档,在Ps中Get-ExecutionPolicy的默认值为Restricted,不允许任何配置脚本文件运行,把此值改为RemoteSigned即可
| |
RemoteSigned默认为Windows server的权限属性
Restricted默认为Windows client的权限属性(安全性考虑?普通用户真就不当人呗)
至此,Hugo终于安装好了。
ArchLinux的安装只需要一行
| |
泪目了
按照传统异能
| |
显示
| |
Hugo配置
Hugo使用config.toml文件来进行具体配置。除了一些通用配置外,剩下的配置基本都是根据你选定的主题xjb魔改就行了。例如:
| |
初始化git仓库
| |
主题最好以submodule的形式添加,便于更新
这里在themes文件夹下添加了LoveIt主题
| |
在配置文件config.toml中添加
| |
剩下的配置按照LoveIt官方文档和themes/LoveIt目录下的exampleSite魔改即可。
对于文章创建,Hugo使用Archetypes下的模板为你生成博客文件,不同主题都有自己不同的模板,使用命令
| |
即可按照模板生成文档。
或者,
| |
这样便于将图片等资源放在文档同一目录下,便于索引。见Hugo文档Leaf Bundles
另外,在查文档时还了解到用日期年月日来形成url索引文章的方式,如 9/23/21/hello.md。有空再去了解
在配置网站的过程中,使用
| |
可以实时查看网站的变化
当调整满意后,使用
| |
生成静态网站,默认输出在public目录
部署
一开始的想法是在Github建两个仓库,一个存网站Hugo源码,gitignorepublic文件更新;另一个以username.github.io 命名的仓库上传public的内容,逻辑看起来很清晰,对吧。但一开始直接犯蠢把Hugo源码发到username.github.io仓库了,结果Github page部署选择没法选public子文件,由于git姿势不够,遂把整个库删了… 后来搞了两个仓库,又忘记ignorepublic,直接在public下新建git仓库,当时就感觉有点不对劲,因为这样的操作会导致public文件下的每个更新都会影响到整颗文件树,而本意是希望二者相对独立互不干扰(虽说加了gitignore当前情境下就没问题了,但毕竟是个一般性问题)。参考了这篇博客,发现git还有git worktree add操作,就是为了解决上述问题,新姿势get。
这篇博客中提出了两种部署方法
将hugo输出文件的默认文件夹名称改为docs
只需要在
config.toml中添加1publishDir = docs即可
随后可以直接修改GitHub page部署
docs下的网页。在
public文件夹下建立独立分支配置GitHub page部署该独立分支的内容
代码如下(示例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25//忽略public子目录 echo "public" >> .gitignore //初始化publish branch git checkout --orphan publish git reset --hard git commit --allow-empty -m "init publish branch" git push origin publish git checkout main // 部署 rm -rf public mkdir public rm -rf .git/worktrees/public/ // 在public下建立publish独立分支pulish // index reset 至远端 publish git worktree add -B publish public origin/publish hugo cd public git add --all git commit -m "some words" git push origin publish这个方法的好处是可以将源文档和生成的网页文档的版本历史分开控制
有关git worktree 相关知识,下篇博客总结一下(咕咕咕
发现Netlify不仅有CDN服务器,还支持git仓库自动部署,直接run去Netlify了 (逃)