为什么写博客
一直想有个安静写字的地方。不是知乎、不是掘金、不是公众号——是自己的域名、自己的审美、自己的节奏。
playerz.fun 这个域名已经买了很久了,一直在等一个合适的契机。这个周末,终于动手了。
有意思的是,搭建这个博客的整个过程——从框架选型、环境配置、代码汉化、到部署调试——大部分工作不是我亲手敲的,而是跟 AI agent 结对完成的。我负责决策和审查,agent 负责执行和修复。
说到底牌,这种方式省掉了很多”查文档 → 试 → 报错 → Google → 再试”的死循环。agent 能自主读写文件、执行命令、SSH 到远程服务器,像一个不知疲倦的远程协作者。但它也不是万能的——API Token 权限不够它搞不定、Heredoc 在 Windows 的 SSH 里就是跑不通。判断哪些任务适合交给 agent、哪些自己上手,是个在实践中磨出来的直觉。
第一次尝试:Next.js 自建
一开始选了 Next.js。理由很简单:熟悉,生态好,全栈能力强。
于是吭哧吭哧写了 50 多个文件——SQLite 数据库、12 个 API 端点、前后台页面、暗色模式……功能都跑通了,localhost:3000 全部 200 OK。但越写越觉得不对劲:
- SWC 编译问题:Windows 环境下
better-sqlite3需要 MSVC 编译,换成sql.js勉强绕过去,但next/image、next/font轮番报错 - 文件管理混乱:组件之间依赖纠缠,改一个样式影响三个页面
- 暗色模式实现啰嗦:Context、Provider、localStorage 同步、SSR 水合不一致……光是主题切换就写了小一百行
- 最致命的是:每次改完配置,一个
npm run build可能莫名其妙崩掉,然后花了半小时排查是缓存问题还是 SWC 问题
一个个人博客而已,不应该这么复杂。
第二次尝试:AstroPaper
果断推倒重来。评估了几个方案后选了 Astro + AstroPaper:
| 对比维度 | Next.js 自建 | AstroPaper |
|---|---|---|
| 文件数量 | 50+ 源文件 | 不到 30 个 |
| 暗色模式 | 手写 100 行 | 开箱即用 |
| 构建速度 | 30 秒+ | 4.5 秒 |
| 二进制依赖 | SQLite 需要编译 | 零原生依赖 |
| 文章管理 | 数据库后台 | Markdown 文件 |
| 搜索 | 无 | PageFind 静态搜索 |
AstroPaper 有 4.5k stars,MIT 协议,作者维护活跃。核心思路是 “写 Markdown,生成静态 HTML”,没有数据库、没有 API、没有运行时 JavaScript。这恰好就是我想要的。
三件必须要做的事
迁移到 AstroPaper 后,并不是装好就能用。做了三件关键的事:
1. 设计定制
AstroPaper 默认的配色偏暖,改了一套暗黑极简的:
底色 #0f1117 主色 #6366f1 文字 #e4e5e8
低饱和蓝紫配深灰底,关掉页面里所有的 emoji——够冷静,够极客。
2. 全面汉化
AstroPaper 原版全是英文文本。把 20 多个 Astro 组件翻了个遍:
- 导航 “Posts” → “文章”
- 日期格式 “22 Mar, 2025” → “2026年4月26日”(引入 dayjs zh-cn 语言包)
- 分页 “Prev/Next” → “前一页/后一页”
- 搜索引擎、归档页面、404、标签系统……全部中文
中文搜索也要处理:PageFind 开箱支持 zh-cn 分词,但某些中英文混排的边界 case 需要关注。
3. 部署策略的转变
一开始打算部署到 Cloudflare Pages——免费、Git 自动部署、CDN 全球加速。但实际场景是:服务器就在家里,网络环境决定了 GitHub Actions 跑不起来。
最终采用了 Caddy + Cloudflare Tunnel 方案:
用户 → playerz.fun → Cloudflare DNS(CNAME 到 Tunnel)
→ Cloudflare Tunnel(QUIC 加密)
→ 本地 Caddy(静态文件服务)
这个架构有几个好处:
- 零入站端口:Tunnel 只发出连接,不需要公网 IP 也不需要端口转发
- 全链路加密:用户到 Cloudflare 是 HTTPS,Cloudflare 到本地是 QUIC
- Caddy 做静态服务:自动 Gzip、安全头(HSTS、X-Frame-Options)、访问日志
- systemd 守护:开机自启、崩溃自动重启
唯一多出来的依赖是 cloudflared,大约 40MB。但相比传统方案(公网 IP + Nginx + Let’s Encrypt + DDNS),简洁太多了。
总结
几个教训:
- 不要为简单目标搭建复杂系统。个人博客就是写 Markdown 生成 HTML,Next.js 的全栈能力在这里是过度设计
- 成熟的开源主题比自己从零搭划算。AstroPaper 的几个核心 feature(暗色模式、搜索、OG 图片、RSS)如果要自己实现,至少一周起步
- Cloudflare Tunnel 是被低估的工具。免费、不需要公网 IP、不需要配置证书——比传统反向代理方案优雅得多
- 工具选择要看实际环境。Windows + 中国网络,很多”最佳实践”(Docker、GitHub Actions、Google Fonts)直接不可用,需要因地制宜
这个博客会持续更新。没有什么具体的计划——想写的时候就写,内容大概会覆盖前端技术、工具折腾、偶尔的生活记录。
欢迎来访。RSS 订阅见导航栏链接。
加载中...