Deploy weblog site with hugo
使用 Hugo 构建静态博客,并快速免费部署。
几个静态网站构建工具对比
| NAME | STARTS | FORKS | FIRST RELEASED | LANGUAGE |
|---|---|---|---|---|
| jekyll | 51k | 10k | Nov, 2008 | Ruby |
| Hexo | 41k | 5k | Oct, 2012 | TypeScript |
| Hugo | 86k | 8k | Jul, 2013 | Go |
| VuePress | ~3k | ~1k | Apr, 2018 | TypeScript |
| VitePress | 17k | ~3k | Apr, 2020 | TypeScript |
| MkDocs | 21k | ~3k | Nov, 2014 | Python |
这几个工具个有优缺点
- jekyll :GitHub 最古老最多人关注,构建工具依赖 Ruby 和相关依赖包,在最新的 macOS 系统上安装麻烦,依赖包兼容性差;
- Hexo :中文主题多但自身官方文档不完整且混乱;
- VuePress :适合开源软件项目简陋官网和文档,易于通过 Vue 编写扩展,但默认缺乏最基本分类 (categories)、标签 (tags) 等静态博客功能。
- VitePress : 定位和功能和 VuePress 类似。基于更现代的 Vue 3 和 Vite 技术栈构建,热更新和构建速度更快。
- MkDocs : 对旧系统和旧浏览器(如 Windows 7 和 IE 11)兼容性最好的工具,避免使用浏览器现代技术因此默认主题简陋。适合构建需支持全版本全平台技术类文档。
- 其他
- astro 类似整合 Vue 和 next.js 为一体的工具,强大而复杂。
核心功能对比
| FEATURE | Hugo | MkDocs |
|---|---|---|
| 使用常见 markdown 语法 | no | yes |
| 自定义 CSS | yes | yes |
| 自定义页面列表顺序 | yes | yes |
| 自定义导航栏 | yes | yes |
| 自定义边栏 | no | yes |
| 自定义主题 | yes | yes |
| 自动深色模式 | no | no |
| 响应式(Responsive) | yes | yes |
| 集成搜索 | ? | yes |
| 支持 IE11 | no | yes |
| Windows 7 构建 | yes | yes |
最适合现代博客
hugo + Cloudflare 的方案
在 Cloudflare 上部署 hugo 最新版本构建的静态博客。
- 构建工具使用 hugo,安装简单只有一个二进制文件、构建速度快、文档完善;
- 静态页面托管、域名、SSL 证书都是用 Cloudflare ,免费且稳定;
部署步骤
- 以此文编写时刻为例,按 hugo 官方文档是用构建工具版本为 0.147.2, 生成项目后,添加 markdown 页面内容;
- 安装构建工具参考命令
CGO_ENABLED=1 go install -v -tags extended github.com/gohugoio/hugo@v0.147.2 - 如果是用官方文档推荐的默认 ananke 主题,需要锁定它的版本
cd themes/ananke ; git checkout v2.12.0
- 安装构建工具参考命令
- 提交内容项目到 GitHub 仓库;
- 在 Cloudflare 上创建项目,选择 hugo 构建工具,选择 GitHub 仓库,等待构建完成;
- 配置域名和 SSL 证书,完成。
注意:
- Cloudflare Pages 如果不通过环境变量指定 hugo 版本,默认会使用 0.118.2 版本,导致构建失败;
- 设置环境变量
HUGO_VERSION和前面生成项目时指定的版本一致即可。
最终方案的效果就是当前博客的样子。
自定义 hugo CSS 样式
根据使用 theme 不一样可能要按需修改,以 themes/ananke 为例。
- 根目录下新建 layouts/partials/head-additions.html 文件, 内容为
<link rel="stylesheet" href="{{ "css/main.css" | relURL }}"> - 根目录下新建 static/css/main.css ,文件内容为要添加的自定义 CSS 样式
工作原理, themes/ananke 会在 baseof.html 引入 partials/head-additions.html 子模板,默认从根目录开始加载文件覆盖(如有)。
最适合全平台手册
MkDocs + Cloudflare 的方案
在 Cloudflare 上部署 MkDocs 最新版本构建的技术手册。
ref: https://developers.cloudflare.com/pages/framework-guides/deploy-an-mkdocs-site/
自定义 Python 版本
在 Environment variables 环境变量中添加 PYTHON_VERSION 指定版本即可,如 3.8.10 。
自定义 MkDocs CSS 样式
新建 custom_theme/main.html 文件修改,模板语法和内容参考 https://www.mkdocs.org/dev-guide/themes/
集成 Disqus 并禁用冗余强制广告
在 custom_theme/main.html 文件添加以下
{% include "disqus.html" %}
新建 custom_theme/disqus.html 文件,内容如下
{% block comments %}
<div id="disqus_thread"></div>
<script>
/**
* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables */
/*
var disqus_config = function () {
this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
*/
(function () {
// DON'T EDIT BELOW THIS LINE
var d = document,
s = d.createElement("script");
s.src = "https://你的-domain-name.disqus.com/embed.js";
s.setAttribute("data-timestamp", +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<!-- https://stackoverflow.com/a/56613937 -->
<style>
iframe[src*="ads-iframe"] {
display: none;
}
</style>
{% endblock %}