用 Astro + Cloudflare 搭一个零成本内容站
Astro SSR 负责页面渲染,D1 存结构化数据,R2 放图片和视频,免费额度足够个人站点使用。
技术选型
这个站点的全部基础设施都在 Cloudflare 免费额度内:
| 部分 | 方案 | 免费额度 |
|---|---|---|
| 页面 | Pages(Astro SSR) | 无限静态请求 |
| 数据 | D1 | 5GB 存储 |
| 媒体 | R2 | 10GB 存储 |
几个关键点
- Astro 使用
output: server和@astrojs/cloudflare适配器,页面在 Worker 里渲染。 - 图片和视频不经过构建,直接上传到 R2,通过一个带缓存头的媒体路由读取。
- 后台只有一个管理员,用 Cloudflare Access 做身份校验,不需要自己写登录系统。
媒体路由要支持 Range
视频拖动进度条依赖 HTTP Range 请求,所以媒体路由必须返回 206 Partial Content 和正确的 Content-Range 头,否则播放器只能从头播到尾。
const object = await bucket.get(key, {
range: { offset: start, length: end - start + 1 },
});
成本
个人站点的流量和存储都远低于免费额度上限。唯一需要花钱的地方,可能是域名——但用 *.pages.dev 子域名就完全免费。