我上个月上线了 china-sourcing-agents.com,一个做电子和物联网硬件采购代理的B2B站点。11种语言、边缘动态生成OG图、零后端的全文搜索、表单直接发邮件到我收件箱——整套基础设施月成本:0美元。
以下是真正让我意外的几个点。
![]()
【技术栈】Astro 6 框架,Cloudflare Pages 托管(静态资源+边缘Worker),Tailwind CSS v4 样式,MDX + Zod 4 内容集合,satori 做OG图文字渲染,@resvg/resvg-wasm 在边缘把SVG转PNG,Pagefind 构建时生成全文搜索索引,Resend 发事务邮件,Cloudflare Turnstile 防机器人。几乎全静态,唯一动态端点是询盘表单。
【意外一:开发环境和生产环境终于一致了】这是我之前最怀疑的,结果是真的。Astro 6(2026年3月发布)和Cloudflare合作,让 astro dev 直接跑在 workerd 里——就是Cloudflare Workers用的同款JavaScript运行时。实际效果:本地能跑,线上就能跑。边缘运行时的开发环境bug消失了。
以前我踩过经典坑:Node.js里能跑的代码(process.env、fs、Node流)部署到Workers就静默崩溃。现在从 npm run dev 开始,运行时就是同一个。配置极简:output设server,adapter用@astrojs/cloudflare,imageService选compile,完事。
【意外二:11种语言×5类内容,一个glob loader搞定】站点支持英语、德语、法语、日语、韩语、西班牙语、意大利语、葡萄牙语、荷兰语、俄语、波兰语。每门语言都有独立的指南、博客、案例、服务、行业内容——总共约250个MDX文件。
Astro 6的Content Layer API让整套多语言结构变成每类内容一个集合定义。glob loader按模式匹配,所有语言的同主题文件(比如en/how-to-source-from-china.mdx、de/...、ja/...)都在同一个guides集合里。一个helper函数按语言前缀过滤,把entry.id里 locale/ 前面的部分切掉当slug用。Zod 4做强类型校验,内容层全类型安全。
【意外三:OG图在边缘实时渲染,不是构建时预生成】以前做多语言站,OG图要么构建时预生成(语言×页面数量爆炸),要么干脆不做。这次用satori在边缘跑:请求来时,根据当前页面数据实时渲染SVG,再用resvg-wasm转成PNG返回。延迟可接受,内存占用可控,不需要把几千张图塞进构建产物。
【意外四:全文搜索零后端,构建时索引】Pagefind在构建阶段扫描所有静态HTML,生成搜索索引。用户搜索时直接下载索引文件,在浏览器里跑查询。没有搜索服务要维护,没有API要付钱,11种语言的索引加起来几百KB。
【意外五:表单直接发邮件,没有数据库】询盘表单用Cloudflare Worker处理,Resend发邮件到我邮箱。数据不进数据库,没有存储成本,没有后台要登录。Turnstile验证防垃圾,简单直接。
整套下来,免费额度完全够用。Cloudflare Pages的构建和托管、Workers的请求数、Resend的日发信量,都在免费层内。唯一可能未来要付的是Resend,但日发信量到几百封之前都不用动。
这个组合让我重新思考"静态站点"的边界。不是什么都得SSR,不是什么都得数据库。把计算推到构建时和边缘,很多传统需要后端的功能,现在可以用更简单的架构解决。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.