目录

这个博客不是从 IDE 或终端开始的。它始于一次对话。

我坐下来与 Crush——一个在命令行中运行的自主式 AI 编程助手——描述了我想要的东西:一个名为 Innerspace 的个人博客,托管在 thylong.com,使用 Hugo 和 monochrome 主题构建,由 Redbean 提供服务,用 Docker 容器化,并部署到 k3s 集群。

为什么选择这个技术栈?作为一名 Go 开发者,我一直很欣赏 spf13 的工作——Hugo 是一个出色的工程作品,选择它是自然而然的。同样,我从一开始就选择了 Redbean,因为 Justine 在 Cosmopolitan 项目上的工作确实令人惊叹。一个二进制文件就能在任何地方运行,不需要运行时——这种理念与我思考基础设施的方式一致。我计划将来把博客托管到其他地方,但这些会在以后的文章中详细讨论。

关于这个博客的语言:法语是我的母语,我基本能使用英语双语交流,目前我正在密集学习中文。用三种语言写作是练习的一部分——一种用不同思维方式思考的途径。

你会在这里找到什么?关于我热爱的话题的个人思考和深入探讨:创造力、历史、软件工程、基础设施、史学、艺术、极简主义,以及一点地缘政治。

Crush 完成了剩下的所有工作。以下是它的过程。

技术栈

层级工具原因
静态网站生成器Hugo Extended v0.146+monochrome 主题需要 SCSS 支持
主题hugo-theme-monochrome简约、快速(~5KB gzip CSS)、暗色模式、搜索
Web 服务器RedbeanCosmopolitan 项目的单二进制 Web 服务器
容器Docker(多阶段)第一阶段 Hugo 构建,第二阶段 Redbean 在 scratch 上运行
编排k3s轻量级 Kubernetes,TLS 由集群层处理

Crush 做了什么

Crush 作为完全自主的代理运行。我给了它一个高层计划,它便:

  1. 搭建 Hugo 站点hugo new site,将 monochrome 主题添加为 git 子模块
  2. 配置 hugo.toml — baseURL、主题、暗色模式、搜索、目录、SEO、语法高亮
  3. 设置多语言支持 — 3 种语言(English、Français、中文),基于目录的内容组织,并为简体中文创建了自定义 zh.toml i18n 文件(主题只自带繁体中文)
  4. 创建初始内容 — 主页和 3 种语言的 hello-world 文章
  5. 修复了 RSS 兼容性问题 — monochrome 主题的 RSS 模板使用了 .Site.Author.email,这在 Hugo v0.160+ 上会崩溃。Crush 用自定义的 layouts/_default/rss.xml 覆盖了模板
  6. 编写 build.sh — 从 cosmo.zip 下载 Redbean,运行 Hugo,将输出打包为 thylong.com 二进制文件
  7. 编写 Dockerfile — 多阶段:hugomods/hugo:exts → Hugo 构建,debian:bookworm-slim → Redbean 打包,scratch → 最终单二进制镜像
  8. 创建 k8s 清单 — 带探针的 Deployment、ClusterIP Service、thylong.com 的 Ingress
  9. 设置 CI/CD — GitHub Actions 工作流:构建 → 推送到镜像仓库 → kubectl rollout restart
  10. 编写 Makefiledevbuilddocker-builddeployhooks
  11. 添加 pre-commit hook — 在允许提交之前验证 Hugo 和 Docker 构建
  12. 更新 PLAN.md 以记录架构决策

模型详情

Crush 使用 GLM-5.1 Cloud(通过 Ollama)作为大模型,Claude Haiku 4.5 作为小模型。执行是自主式的——Crush 规划、搜索代码库、读取文件、编辑文件、运行构建、诊断错误(如 RSS 模板问题)、并迭代直到一切编译通过。每个决策都是自主做出的,只需简短的进度报告。

结果

innerspace/
├── hugo.toml              # 多语言配置 (en/fr/zh)
├── Makefile               # 构建目标 + 帮助
├── PLAN.md                # 架构决策
├── README.md
├── build.sh               # Hugo 构建 + Redbean 打包
├── Dockerfile             # 多阶段:Hugo → Redbean 在 scratch 上
├── content/
│   ├── en/                # 英文内容
│   ├── fr/                # 法文内容
│   └── zh/                # 中文内容
├── i18n/
│   └── zh.toml            # 简体中文翻译
├── layouts/_default/
│   └── rss.xml            # 自定义 RSS(Hugo v0.160+ 修复)
├── k8s/                   # Deployment, Service, Ingress
├── .githooks/pre-commit   # 构建验证
├── .github/workflows/     # CI/CD
└── themes/
    └── hugo-theme-monochrome/

最终构建在 3 种语言中生成 34 个页面,全部打包在一个运行在 scratch 上的 Redbean 单二进制文件中。一个二进制,零依赖,从 k3s 提供服务。

这篇文章本身也是 Crush 写的最后一件事。