个人主页 wyclab.com 搭建记录
项目简介
wyclab.com 是我的个人主页,托管在腾讯云 EdgeOne Pages 上。技术栈是 Astro 4 + astro-pure 主题 + Bun + Pagefind。
为什么选 Astro
- 零 JS 默认——纯静态产出,首屏 < 50KB
- 多框架混用——同一页面可以同时用 Vue/React/Svelte(虽然我目前只用 Astro 原生)
- 构建快——Vite 驱动,增量构建 < 2s
- 生态成熟——astro-pure 这种主题直接 fork 改改就能用
目录结构
pureblog/
├── src/
│ ├── components/ # Astro 组件
│ ├── content/ # 博客内容(Markdown)
│ ├── layouts/ # Layout
│ ├── pages/ # 路由
│ ├── styles/ # 全局样式
│ └── config.ts # 站点配置
├── public/
│ ├── pagefind/ # ⚠️ 本地预生成的 pagefind 索引
│ └── ...
├── astro.config.mjs
├── edgeone.json
└── package.jsonEdgeOne Pages 部署踩坑
Pagefind 二进制问题
pagefind npm 包内含预编译二进制,EdgeOne 的 musl/Alpine 环境无法运行。详见 EdgeOne Pages 构建环境的 Pagefind 二进制踩坑。
最终方案:本地预生成 + 提交到仓库
bash
# 本地 macOS(glibc 环境)
bun install
bun run build
npx pagefind --site dist
# 提交
git add public/pagefind/
git commit -m "chore: 提交预生成的 pagefind 索引"
git pushEdgeOne 构建时 bun install 不会再跑 pagefind 二进制(因为我们已经在 post-build 之前生成了),直接拷贝 public/pagefind/ 到 dist/client/pagefind/。
EdgeOne Pages 配置
edgeone.json:
json
{
"installCommand": "bun install",
"buildCommand": "bun run build",
"outputDirectory": "dist/client",
"framework": "astro",
"nodeVersion": "20.18.0"
}与本仓库(vitepress-blog)的区别
| 维度 | wyclab.com | blog.wyclab.com(本仓库) |
|---|---|---|
| 框架 | Astro | VitePress |
| 搜索 | Pagefind(预生成提交) | 内置 MiniSearch |
| 主题 | astro-pure | 自定义 lmt-* Layout |
| 输出目录 | dist/client | docs/.vitepress/dist |
| 部署 | EdgeOne Pages | EdgeOne Pages |
两个站共享 EdgeOne Pages 账号但独立仓库独立构建。
后续规划
- SEO 优化——Astro 的 Sitemap/RSS 集成 + JSON-LD
- 评论系统——Waline 替代 Disqus
- 文章封面图——自动生成 OG 图
- 国际化——i18n 路由支持