博客网站搭建记录
选定博客搭建框架
因为所有的笔记都是 markdown + Typora 写的,所以希望找一个要求如下的网站搭建框架
- [必要]可以根据 markdown 生成或者渲染网站
- [必要]不能和 Typora 冲突, 搭建对于目录结构以及 *.md 的改动要尽可能地小
- [必要]因为不是所有的笔记都需要在网站发布, 所以得区分哪些笔记不可以发布
- [必要]有标签和站内搜索的功能
- [必要]代码高亮, 有行号
- [可选]框架使用自己熟悉的语言编写,方便自定义
- [可选]架构明了,配置简单,一键式部署
最理想的流程是本地使用 Typora 写文档 –> git 同步 –> hugo 展示
综合以上需求, 选定 hugo 作为博客搭建框架
Hugo
Hugo是由Go语言实现的静态网站生成器
安装
安装标准版本
|
|
安装 extended 版本 (优先使用)
[重要]为什么要使用 extended 版本?
在使用部分主题时,会有错误提示: you need the extended version to build SCSS/SASS
|
|
使用
生成 hugo 站点文件夹
|
|
hugo 站点目录结构
.
├── archetypes # 存放生成博客的模版
├── config.toml # 存放 hugo 配置文件 支持 JSON YAML TOML 三种格式配置文件
├── content # 存放 markdown 文件
├── data # 存放 Hugo 处理的数据
├── layouts # 存放布局文件
├── static # 存放静态文件:图片 CSS JS文件
└── themes # 存放主题
使用主题 loveit
将主题作为子模块添加到 themes
目录
|
|
也可以使用 git clone https://github.com/dillonzq/LoveIt.git themes/LoveIt
,但不推荐,使用 submodule 方便使用 git 管理站点目录
配置
|
|
配置文件分为三部分: hugo 基础配置, 菜单配置, 主题配置
|
|
创建文章
|
|
之后会在 /content/posts
目录下看到文件 first_post.md,文件最开始的部分被称为 Front Matter
Front Matter
支持 yaml toml json, 默认 yaml, 位于 *.md 的开始
|
|
运行
hugo server
会生成一个 public
目录, 其中包含你网站的所有静态内容和资源
# 包含草稿
hugo server -D
# 指定配置文件
hugo server --config $(config_file)
Hugo 主题对比
主题市场 https://themes.gohugo.io/
使用 hugo-theme 作为 tag 搜索 github, 以 stars 排序
有几点需要特殊说明
-
wowchemy 比较特殊, 它并不算是主题, 而是提供 site 模板 https://wowchemy.com/hugo-themes/, 可以直接
hugo server
, 以 academic 为例, 使用方式如下1 2 3 4 5 6 7 8 9 10
# 下载主题 git clone https://github.com/wowchemy/starter-academic.git cd starter-academic # 修改对应的 md 目录 cd ./content mv ./post ./post_backup ln $(md_dir) post # 运行 hugo cd .. hugo server
-
部分主题使用 yaml 格式的配置文件, 可以使用在线工具 yaml 转 toml
主题 | 描述 | 优缺点 |
---|---|---|
wowchemy-academic | 和主流 theme 使用方式不同 | |
PaperMod | 不支持国际化 | |
coder | 不支持 tag, search, highlight | |
hugoThemes | 一个 hugo theme 集合 | |
even | 不支持 search | |
LoveIt | 不再更新, 相似主题可查看 DoIt | |
stack | 以 Front Matter 的方式支持 search, archives |
踩坑记录
生产环境下访问 chrome network 存在 wss://livereload 连接失败的问题
nginx 使用以下配置
location / {
proxy_pass http://localhost:1313;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /livereload {
proxy_pass http://localhost:1313;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
但实际上不推荐这样使用 hugo server,最佳配置为使用 nginx 将 public 目录作为静态服务器的根目录,之后后台启动 hugo server 监控 文件改动, hugo server 不对外通信
修改 scss 无法生效
必须使用 hugo extended 版本
修改 theme.js 无法生效
需要重新生成 min.js
|
|
不支持以如下格式展示 mermaid
|
|
解决办法:
-
在 layouts/partials/assets.html 页面增加 metadata
<script src="https://cdn.jsdelivr.net/npm/mermaid@8.10.1/dist/mermaid.min.js"></script>
-
在 layouts/partials/footer.html 页面增加 js
|
|
gitalk 无法加载
更新 gitalk 版本, 具体操作如下:
-
修改 assert/data/cdn/jsdelibr.yml
由
# gitalk@1.6.2 https://github.com/gitalk/gitalk gitalkCSS: gitalk@1.6.2/dist/gitalk.min.css gitalkJS: gitalk@1.6.2/dist/gitalk.min.js
变更为
# gitalk@1.7.2 https://github.com/gitalk/gitalk gitalkCSS: gitalk@1.7.2/dist/gitalk.min.css gitalkJS: gitalk@1.7.2/dist/gitalk.min.js
-
修改 lib/VERSION 中 gitalk 版本
-
下载 gitalk@1.7.2 的 min.js 以及 css 文件并替换 lib/gitalk 的 min.js, css 文件
hugo server 报错 failed to unmarshal YAML
Front Matter 格式不符合要求或者其他错误, 以下为测试结果
字段与值之间没有空格, 例如 draft:true
, 正确格式应为 draft: true
hugo server 错误, failed to unmarshal YAML
没有内容, 正文为空
hugo server 错误
没有 date 字段或者 存在空的 date 字段
文章页面存在日期, 但显示 0001-01-01
没有 draft 字段
默认为 false
其他
图标生成网站
https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black