如果我的 Git 主机就是一台静态站点生成器
来源: char.lt — 2026-09
概述
作者跑了近半辈子自托管 Git forge(Gogs 变 Gitea、再变 Forgejo),但 Forgejo 在他那台小机器上反复因为重打包停滞的仓库而塞满磁盘,还会在爬虫的「宇宙微波背景辐射」级别骚扰下 OOM。他不想再用 Anubis 之类 JavaScript 工作量证明把访问挡在外面——那与开放 Web 的理念相悖,还会把不支持 JS 的浏览器直接挡死。他的答案是 sorcery:形态上就是个静态站点生成器的 Git 主机,仓库一更新就重建一批磁盘上的 HTML——概览页、每个分支 tip commit 的目录树、每个文件的语法高亮源码页;读取请求由 sendfile 直接送静态文件,因此面对爬虫负载天然有韧性。他甚至指出这不算创新:GitHub Pages 当年就是一台机器扛住全部读取的。
核心要点
- 痛点是小机器上的 Forgejo 撑不住:重打包卡死的仓库吃满磁盘,爬虫流量把进程压到 OOM。
- 他拒绝 Anubis 式 JS 证明挑战,认为那是「向假设投降」,还把不带 JS 的浏览器排除在开放 Web 之外。
- sorcery 的形态是静态站点生成器:仓库更新时预先重建概览、分支目录树与语法高亮源码页。
- 代价前置换读取便宜,因此用 sendfile 送静态文件就能抵御爬虫负载。
- 他只保留自己真正在用的功能,砍掉 issues、PR、releases、wiki 这些 GitHub 兼容包袱。
- 近期待办是加 CI 注解,远期可能把它长成一个与朋友共用的小型 forge。
金句
为什么不干脆做一个一切都只是静态文件的 Git 主机呢?
👍 0
👎 0
返回 Lobsters 首页