使用 Zola 搭建静态博客

2026-05-05

为什么选择 Zola

在 2026 年的今天,静态站点生成器已经多如牛毛。Jekyll、Hugo、Next.js、Astro……每个都有自己的拥趸。但我最终选择了 Zola,原因很简单:

  • 单二进制 — 不需要 Node.js、不需要 Ruby、不需要 Python。下载一个可执行文件就能跑。
  • 速度快 — Zola 用 Rust 编写,构建几百篇文章也就是毫秒级的事。
  • 没有 JavaScript 依赖 — 默认输出纯 HTML + CSS,干净利落。
  • 语法高亮内建 — 不用额外配置。
  • 模板语言 Tera — 如果你熟悉 Jinja2 或 Django 模板,上手零成本。

安装 Zola

Zola 的安装非常简单。macOS 用户:

brew install zola

Linux 用户可以从 GitHub Releases 下载静态二进制文件:

# 以 x86_64 Linux 为例
wget https://github.com/getzola/zola/releases/latest/download/zola-x86_64-unknown-linux-gnu.tar.gz
tar xzf zola-x86_64-unknown-linux-gnu.tar.gz
sudo mv zola /usr/local/bin/

验证安装:

zola --version

初始化项目

zola init my-blog
cd my-blog

这条命令会生成一个基本的目录结构:

my-blog/
├── config.toml      # 站点配置
├── content/         # 文章内容 (Markdown)
├── templates/       # Tera 模板
├── static/          # 静态资源
├── sass/            # SCSS 文件
└── themes/          # 主题(可选)

注意:Zola 默认生成 config.toml,但我个人习惯将其命名为 zola.toml。实际上 Zola 会同时查找 config.tomlzola.toml

配置站点

编辑 zola.toml,填入基本信息:

base_url = "https://your-domain.com"
title = "我的博客"
description = "记录技术与生活"
default_language = "zh"

taxonomies = [
  { name = "tags", feed = true },
]

compile_sass = true

[extra]
author = "your-name"

配置项说明:

  • base_url — 站点的最终部署 URL,用于生成 RSS 和 sitemap。
  • taxonomies — 分类法,这里定义了「标签」分类。
  • compile_sass — 开启 SCSS 编译。

编写模板

Zola 使用 Tera 模板引擎。这是博客的最小模板集:

base.html — 基础骨架

<!DOCTYPE html>
<html lang="{{ lang }}">
<head>
  <meta charset="UTF-8">
  <title>{% block title %}LLS Blog{% endblock %}</title>
  <link rel="stylesheet" href="/style.css">
</head>
<body>
  <header>
    <nav>
      <a href="/" class="site-title">LLS Blog</a>
    </nav>
  </header>
  <main>{% block content %}{% endblock %}</main>
</body>
</html>

index.html — 首页

首页展示最近的文章列表。通过 get_section 获取博客分区内容,然后用循环显示最新的 5 篇文章。

page.html — 文章页

文章页使用 page.content 来渲染 Markdown 转换后的 HTML。所有 Markdown 内容通过 | safe 过滤器标记为安全的 HTML。

创建第一篇文章

content/blog/ 下创建 .md 文件,文件头 (front matter) 使用 TOML 格式:

+++
title = "我的第一篇文章"
date = 2026-01-01
description = "这是一篇示例文章"
[taxonomies]
tags = ["hello", "blog"]
+++

文章内容写在这里…

Zola 会根据文件名生成永久链接,zola-blog-setup-guide.md 的链接就是 /blog/zola-blog-setup-guide/

构建与预览

# 启动开发服务器(带热重载)
zola serve

# 构建生产版本
zola build

zola serve 会在 http://127.0.0.1:1111 启动一个开发服务器,任何文件修改都会自动触发重建。

zola build 将生成的静态文件输出到 public/ 目录,这个目录可以直接上传到任何静态托管服务。

集成 Pagefind 搜索

Pagefind 是一个静态搜索库,专门为静态站点设计,支持中日韩文字。与 Zola 结合使用非常完美。

安装:

npm install -g pagefind

每次构建后生成搜索索引:

zola build
npx pagefind --site public

Pagefind 会分析 public/ 目录中的 HTML 文件,生成搜索索引。在前端,你只需引入它们的 JS 和 CSS 即可添加搜索框。

关于 Pagefind 的更多细节,我会在后续文章中详细介绍。

部署

部署方式有很多种选择:

  • 自托管 — 用 Nginx 或 Caddy 指向 public/ 目录
  • GitHub Pages — 推送到 gh-pages 分支
  • Netlify / Vercel — 连接 git 仓库,设置构建命令为 zola build
  • Cloudflare Pages — 类似 Netlify,但有全球 CDN

我的选择是自托管到自己的服务器上,用 Caddy 做反向代理并自动配置 HTTPS。

结语

Zola 是我目前用过最顺手的静态站点生成器。它不需要复杂的构建管道,不需要几十个依赖包,一个二进制文件就能搞定一切。

如果你正在寻找一个轻量、快速、可靠的博客方案,不妨试试 Zola。本博客的完整代码可以在我的 Gitea 上查看。

下一篇我会写如何配置 Zola 的主题和自定义域名,敬请期待。

https://blog.logfun.xyz/blog/feed.xml