Gobin - 高性能静态博客生成器
Gobin 是一个基于 Go 语言开发的静态博客网站生成器,专为追求极致性能和高定制性的博客作者设计。它兼容常见的 Jekyll 博客内容结构,让您能够迁移现有 Markdown 内容,同时享受更快的构建速度和更灵活的定制能力。
项目背景
本项目旨在将现有的 Jekyll 博客(使用 Beautiful Jekyll 主题)迁移到一个自研的静态网站生成器上。通过使用 Go 语言重写,我们期望达到以下目标:
- 极速构建:相比 Jekyll,构建速度提升 10-100 倍
- 零依赖部署:单二进制文件,无需运行时环境
- 迁移友好:保持常见 Markdown 文件结构和 Front Matter 格式
- 灵活定制:强大的模板系统和配置选项
当前能力
已支持
- Markdown + YAML Front Matter 解析
_posts/ 目录结构
- 列表页、文章页、标签页、分类页生成
- RSS、Atom、Sitemap、搜索索引生成
- 基础主题模板与静态资源复制
build、serve、init、new、check、version CLI 命令
permalinks.posts 文章链接配置
draft / published 内容可见性控制
assets.fingerprint 静态资源指纹(query / filename 两种策略)
serve watch 模式下的 LiveReload 注入
gobin build --incremental 增量构建:按 source / list / feed / search / sitemap 多类别指纹跳过未变化的产物
gobin serve watcher 重建自动启用增量,只重渲染受影响的产物
当前限制
- 暂未实现并行构建
- 多语言、短代码、图片优化等能力仍在规划中
规划中
- 并行构建
- 更完整的 Jekyll 迁移兼容层
- 多语言与短代码支持
- 更完善的主题系统和开发服务器体验
技术栈
- 后端生成器:Go 1.25
- Markdown 渲染:goldmark
- 代码高亮:Chroma / Prism.js
- 模板引擎:Go
html/template
- CLI 框架:cobra
- CSS 框架:Tailwind CSS(可选)
快速开始
安装
# 从源码安装(推荐)
git clone https://github.com/mengbin92/gobin.git
cd gobin
go build -o gobin ./cmd/gobin
# 使用 Go install 安装
go install github.com/mengbin92/gobin/cmd/gobin@latest
# 使用 Docker 运行
docker run --rm -p 8080:8080 \
-v "$PWD:/site" \
docker.io/mengbin92/gobin:latest
创建新站点
# 初始化新博客
gobin init my-blog
cd my-blog
# 目录结构
my-blog/
├── _posts/ # 博客文章
├── assets/ # 静态资源
├── templates/ # 页面模板
├── config.yaml # 配置文件
└── public/ # 构建输出(自动生成)
创建第一篇文章
# 创建文章文件
$EDITOR _posts/2026-01-04-my-first-post.md
文章格式:
---
title: "我的第一篇文章"
date: 2026-01-04T10:00:00+08:00
description: "这是我的博客第一篇文章"
tags: ["博客", "教程"]
categories: ["生活"]
draft: false
---
# 文章内容
## 开始写作
从这里开始你的写作之旅...
本地预览
# 启动开发服务器
gobin serve
# 或指定端口
gobin serve -p 8080
# 启用文件监听和自动刷新
gobin serve --watch
访问 http://localhost:8080 查看你的博客。
构建站点
# 构建静态文件
gobin build
# 增量构建,仅重写受影响的产物
gobin build --incremental --clean=false
# 轻量压缩输出(保守模式)
gobin build --minify
# 包含草稿文章
gobin build --drafts
# 跳过输出目录清理
gobin build --clean=false
--minify 当前会对 HTML 和 CSS 做保守压缩,并保留 JavaScript 原始内容,优先保证输出正确性而不是做激进资源改写。
使用 --clean=false 时,未变化的静态资源会跳过复制以加快重建。Gobin 会通过资源 manifest 清理上次构建记录过、但本次源目录中已不存在的旧静态资源;未被资源管线管理的输出文件仍会保留。
配置说明
主配置文件(config.yaml)
# 网站基本信息
title: 我的个人博客
description: 专注于技术分享和生活记录
theme: default
languageCode: zh-CN
baseURL: https://example.github.io
# 目录配置
contentDir: _posts
staticDir: assets
publishDir: public
# 分页配置
paginate: 10
paginatePath: page
# Permalink 配置
permalinks:
posts: /:year-:month-:day-:title/
# 导航链接
navbarLinks:
- name: 首页
url: /
- name: 分类
url: /categories/
- name: 标签
url: /tags/
- name: 关于
url: /about/
# 社交媒体
social:
github: your-github-username
email: your-email@example.com
# 功能开关
enableEmoji: true
enableGitInfo: true
enableRobotsTXT: true
# 站点级产物开关(可选)
outputs:
feed: true
search: true
sitemap: true
robots: true
# 评论系统(可选)
comments:
enabled: false
provider: utterances
utterances:
repo: "username/repo"
theme: "github-light"
# Markdown 渲染和代码高亮
markup:
# 默认关闭 Markdown 中的原始 HTML。
# 迁移可信旧内容且需要 HTML 片段时,可显式设为 true。
allowUnsafeHTML: false
highlight:
style: github
lineNos: true
markup.allowUnsafeHTML 默认关闭。显式设置为 true 时,Markdown 中的原始 HTML 会作为活动 HTML 输出,适合迁移完全可信的旧内容;内容来源不完全可信时应保持默认值。
项目结构
gobin/
├── cmd/
│ └── gobin/ # CLI 入口
├── internal/
│ ├── config/ # 配置管理
│ ├── parser/ # 内容解析
│ └── generator/ # 站点生成
├── templates/ # 默认模板
├── assets/ # 默认静态资源
├── themes/ # 主题目录
├── docs/ # 文档
├── examples/ # 示例站点
└── scripts/ # 迁移和工具脚本
CLI 命令参考
| 命令 |
说明 |
示例 |
gobin init [name] |
初始化新站点 |
gobin init myblog |
| `gobin new <post |
page> |