这个站是怎么搭的
我想要一个自己的站,放能公开的工具、方法和笔记。动手前定了四个条件:
- 一分钱不花:不买域名,不开付费服务,也不要后端。
- 在国内能打开,而且打开得快。
- 写稿、排版、发布都能交给 AI Agent,我只说想写什么,最后说一声「发」。
- 公开的内容不能带出工作上的信息。
下面按这四条说说是怎么做的。
托管:实测之后选了 GitHub Pages
有免费额度的静态托管有好几家,纸面上比来比去意义不大,国内能不能打开得靠实测。我用 Globalping 的匿名接口,从中国内地的 12 个家庭宽带探针分别访问各家的默认域名,看能不能打开、要等多久。2026 年 11 月 3 日北京时间 19:05 前后的结果是:
- GitHub Pages(
github.io):12 次全部成功,总耗时的中位数是 556 ms。 - Cloudflare Pages(
pages.dev):总耗时的中位数是 940 ms,比 GitHub Pages 慢不少。 - Vercel(
vercel.app):12 次全部失败,域名被 DNS 污染了。
另外两家没法放在一起比:EdgeOne 的默认域名不对外开放;Netlify 的新账号每月只有 15 GB 左右的流量,用完网站就停了。
GitHub Pages 的限制我都能接受:免费账号只能从公开仓库发布;站点不能超过 1 GB;每月流量的软上限是 100 GB;不能以商业用途为主。仓库公开反倒是好事,这个站的源码本身就是一份搭站笔记。
用到的工具
- Astro:把 Markdown 生成纯静态页面。每篇文章是一个 Markdown 文件,开头写标题、摘要、日期和标签。这几项有校验规则,写错字段名或者漏填,构建直接失败。
- Pagefind:构建完成后给全站建索引,搜索完全在浏览器里进行,不需要服务器。在任意页面按 ⌘K(Windows 上按 Ctrl K)就能搜。
- RSS 和站点地图:构建时自动生成。
- GitHub Actions:推到 main 分支,就自动构建、检查、发布。
页面不引用任何外部 CDN 或网络字体。中文用系统自带的字体,代码字体跟着网站一起发布,所有资源都来自同一个域名。
写一篇文章的流程
草稿和原始素材放在我电脑上仓库以外的目录里,不进公开仓库。一篇文章大致这样走:
- 我说想写什么,给出要点或素材。
- Agent 起草,放进仓库,在本机预览,截图给我看。
- 我提修改意见,Agent 接着改,直到我满意。
- 我说「发」,Agent 提交并推送,等发布完成后再打开线上页面确认。
仓库根目录有一份 AGENTS.md,写明了排版规范、目录约定、发布步骤,以及哪些内容不能上。Claude Code 和 Codex 进到这个仓库,都会先读这份文件。
发出去之前的检查
npm run check 一条命令跑完下面这些检查,有一项不过就不能提交:
- 构建:校验文章的标题、日期等信息,生成页面和搜索索引。
- 站内链接:每个站内链接和锚点都必须指向真实存在的位置。
- 中文标点:中文句子里不能夹半角标点。代码、网址、数字和纯英文短语不算。
- 图片体积:单张图片超过上限就报错。
- 提交身份:每个提交的作者邮箱都必须是 GitHub 提供的 noreply 地址,不暴露真实邮箱。
- 敏感词:按我电脑上的一份清单,扫一遍源文件、生成的页面和全部提交历史。清单本身不进仓库。
本机的 git hook 会在提交和推送前自动跑这些检查。GitHub Actions 上还会再跑一遍,只有敏感词这项不跑,因为清单只在我的电脑上。检查不通过,网站就不会更新。
还没做的
3D 房间、中英双语、邮件订阅、评论和访问统计,都留到以后。
这篇文章由 Claude Code 根据搭站的过程起草,我核对后发布。