2小时内迁移到 BunnyCDN 的经验分享
Jonathan's Blog
Switching to BunnyCDN in Less Than 2 Hours
发布于 2025 年 3 月 9 日,归类于 Tools, Bunnycdn, Hosting, Blogging, Cloudflare 封面图片基于 Arctic Hare , John James Audubon (c. 1841) National Gallery of Art 目录
目录
鉴于美国政治最近出现的一些,嗯,不稳定 因素,以及大家都喜欢弱者的心态,我一直在寻找欧洲的替代方案来替代我当前的托管方案,也就是 Cloudflare。 在浏览了 european-alternatives.eu,并阅读了 Bluesky 上的一些评论之后,我决定尝试一下 BunnyCDN,这是一家位于斯洛文尼亚的 CDN 服务提供商。 完整切换到 BunnyCDN 的过程非常简单,只用了不到两个小时就设置完毕。 在这篇文章中,我想描述一下我是如何切换的,以及过程中遇到的一些令人困惑的步骤,以及我对整个过程的总体想法和印象。 需要明确的是,这绝不是一篇赞助文章 —— 我与 BunnyCDN 没有任何关联(除了我的网站运行在他们的 CDN 网络上)。 但这篇文章会对他们给予相当积极的评价,因为到目前为止,一切都非常容易,这给我留下了深刻的印象。
Getting Started
首先要做的事情,显然是在 BunnyCDN 网站上注册。 有一个 14 天的免费试用选项(至少在撰写本文时是这样),不需要设置任何信用卡或付款方式。 注册后,该过程比 Cloudflare 的 Pages 产品在一定程度上更加手动,但仍然相当简单。 本质上,对于托管在 CDN 上的博客,我需要两件事:
- 一个边缘“存储区 (storage zone)”,用于托管文件。
- 一个“拉取区 (pull zone)”,它充当 CDN,从主机加载和缓存文件并将其提供给客户端。
这里的神奇配置是告诉拉取区,它的源 (origin)(即它从哪里加载文件)应该是一个特定的 BunnyCDN 存储区,而不是任意主机。
创建存储区非常容易。 您可以选择将数据复制到哪些区域,以及可用的存储层选项。 我最终选择了最快的“Edge”层并选择了所有区域,这产生了每月 0.30 美元/GB 的成本。 快速的 du -sh
命令显示我上传的文件将远远小于 1GB,即使这样,每月 30 美分也是一个非常低的价格。
创建后,您将可以访问一个文件夹查看器,该查看器显示存储区的内容(最初为空)。 在这里,您可以手动上传文件(尽管有一些自动化的方法,我稍后会介绍)。 为了测试,我在本地构建了我的博客并将这些文件上传到存储区。
下一步是添加一个拉取区。 这也很简单 —— 同样,您可以选择要支持哪些区域,并且可以选择标准层和一个专为大型文件设计的更便宜的层。 定价因用户连接到的区域而异,因此您可以选择跳过您实际上不需要的更昂贵的区域,但同样,对于我这种规模的博客来说,价格可以忽略不计,所以我选择了所有区域。
在创建拉取区时,系统还会要求您提供拉取区的源,即 CDN 在没有缓存任何内容时应使用的来源。 在这里,我选择了之前创建的存储区。
这两个步骤最多可能花费半小时,在结束时,我有一个托管我的博客的 URL(<my-pull-zone-name>.b-cdn.net
)。
Switching Over From Cloudflare
我的第一印象非常积极 —— BunnyCDN 始终如一地比 Cloudflare 快几百毫秒返回我的博文,而且这种效果通过点击我的网站就能注意到。 此外,这种体验非常轻松 —— 是的,它没有 Cloudflare 的一键式 Pages 系统那么快,但仍然非常容易,而且 BunnyCDN 的管理仪表板也感觉比 Cloudflare 的更清晰、更易于使用。 这感觉非常有希望。 所以我做了一个大概不应该在晚上 10 点对“生产”站点做的决定,我将域名的 DNS 指向了 BunnyCDN。 鉴于我的域名也是由 Cloudflare 管理的,这感觉有点亵渎,但也很简单。 在 Cloudflare DNS 设置页面中,有一个现有的 CNAME 记录指向我的 Cloudflare Pages 站点,所以我将其切换到了 BunnyCDN 站点。 我还禁用了“Proxy”设置 —— 这很重要,因为它确保 Cloudflare 直接将用户指向 BunnyCDN IP 地址,而不是通过他们自己的服务器代理请求(本质上是创建了一个双重 CDN)。 在等待了大约五分钟后,我可以从访问我的博客时提供的标头中看出,它是通过 BunnyCDN 提供的。 最初,这产生了关于无效证书的 HTTPS 警告,但这很容易通过在 BunnyCDN 仪表板中启用 HTTPS 来修复。 同样,整个过程可能花费了大约 15 分钟,最后,整个站点完全由 BunnyCDN 提供服务,并且感觉明显更流畅。
Automating Deployments
最后一步是启动并运行自动部署。 我不想每次进行更改时都必须手动上传文件,因此我需要一个 CI 作业来自动构建和发布我的站点。
这件事本应很简单,但由于多种原因,结果变得更加复杂,部分原因是我自己的困惑,部分原因是缺乏文档。
支持此站点的 Git 存储库托管在 Github 上,因此我像以前一样使用了 GH Actions。 我已经处理了更新讨论,这在免费层中很轻松,而且我认为这些构建也能做到这一点。
BunnyCDN 提供了两种自动上传(或操作)存储区中的文件的方法:一个 HTTP API(也可以管理 CDN 的其他方面)和一个 FTP 连接。
考虑到这两个选项,我选择了第三个:让其他人为我做艰苦的工作。 Github 上有一些预先编写的操作可以处理将文件上传到 BunnyCDN,所以我选择了 ayeressian/bunnycdn-storage-deploy
,它似乎很受欢迎,而且检查和验证起来也不太困难。
一旦我弄清楚了让它工作的技巧,它就运行得相当好。 具体来说:
upload
、remove
和purgePullZone
部分都是必要的,至少对于将整个新站点上传到存储区的标准情况是这样。 如果您跳过purgePullZone
,则新页面将被上传,但 CDN 仍将提供缓存的旧页面。- UI 中显示的文件“上次修改”时间似乎是 UTC 时间。 我住在德国,这里与 UTC 足够接近,以至于我花了一段时间才意识到上传新文件正在对存储区产生影响,而不仅仅是将所有文件保持在一小时前的状态。
- 使用操作的术语,
storageZoneName
和storagePassword
都可以在存储区 API/FTP 设置中找到。accessKey
是全局帐户访问密钥,可以在用户设置中找到。 最后,pullZoneId
是区域 ID ,而不仅仅是名称,获取它的最简单方法是从在仪表板中查看您的拉取区时的 URL 中获取它。 如果您输错了这些值,错误消息往往是不透明的,因此这花了一些时间才弄清楚。
但是,一旦它开始工作,一切都运行得非常好。 该作业大约需要 25 秒才能运行,每次推送到 master 都会运行,并按我期望的那样成功部署站点。
Impressions
总的来说,我真的很喜欢 BunnyCDN。 我已经关注它几个星期了,但是能够在不到两个小时内将我的站点从 Cloudflare 完全切换过来给我留下了深刻的印象 —— 尤其是在这里没有快乐的黄金路径“从 Cloudflare 导入”逻辑。 我认为从任何现有 CDN 切换过来都同样容易,而且可能从大多数其他静态托管提供商切换过来也是如此。 到目前为止,我的印象非常积极:
- 至少在德国这里,服务器响应似乎始终比 Cloudflare 的快。 这可能并非在所有地方都是如此,但 BunnyCDN 似乎确实具有相当不错的全球覆盖范围。
- UI 也比 Cloudflare 的清晰得多。 这可能是因为 Cloudflare 只是有更多的产品,但我认为 BunnyCDN 将“拉取区”和“存储区”分开,使其更容易将配置组织到正确的类别中。
- UI 加载速度也快 很多。 Cloudflare 的仪表板有时真的很难使用,只是因为加载时间和到处弹出的糟糕的微调器和骨架状态。 BunnyCDN 的仪表板感觉更流畅,并且加载状态更少。
- BunnyCDN 的服务器端监控设置感觉它提供了更有用的信息。 我还可以访问过去三天的服务器日志,并有机会手动或自动导出它们,或将它们转发到其他服务。 我假设这在 Cloudflare 中也是可能的,但不在免费层中。 举一个具体的例子:我现在可以看到少数人通过 RSS 订阅阅读此博客,这非常酷! 订阅者们,大家好!
- 有一个类似于 workers 的系统,看起来相当强大。 我还没有尝试过,但它看起来你可以做 Cloudflare 的 workers 可以做的很多事情,包括像 WASM workers 这样的东西。 在 CDN 配置中,你还可以将特定路由重定向到一个 worker,这应该使将 workers 与现有静态站点集成非常方便。
- 至少对于我的正常负载来说,成本几乎完全可以忽略不计。 显然,您的里程可能会有所不同,而且我还没有测试很长时间,但每天的负载看起来可能会低于 1 美分,而且尽管选择了最昂贵(即最快)的选项,但存储成本在 UI 中甚至都不可见。 每月最低消费为 1 美元,我暂时假设我很少会花费超过这个金额。 这使得托管成本与我支付域名注册的金额处于同一数量级。
也就是说,BunnyCDN 并非完美,并且值得了解一些差异和缺点:
- Cloudflare 的 Pages 非常接近一键式选项,它们会自动处理构建、部署和管理不同分支的不同页面。 BunnyCDN 更加手动。 它并不复杂,一旦设置好,就没有什么区别,但它更手动。
- Cloudflare Pages 是免费的(也就是说,完全免费,你甚至可能不需要信用卡才能注册)。 BunnyCDN 的成本非常低,但它不是完全免费的。
- Cloudflare 在某些地方感觉稍微更专业一些。 例如,有一个 API 可以与 BunnyCDN 的系统交互,但它的文档不如 Cloudflare 的文档那么完善。 有一种方法可以在 BunnyCDN 中管理具有多个帐户的团队,但访问控制感觉非常精细。 似乎无法为不同的任务创建多个 API 密钥,而是每个用户只获得一个 API 密钥。 这对我来说很好用,但我可以想象更大的公司会发现这更难使用。
Conclusion
我喜欢 BunnyCDN。 它速度快、价格低廉且非常易于使用。 它是一家欧盟公司,在我看来似乎足够注重隐私。 它到处都是奇怪的兔子人卡通,起初有点令人不安,但有一种很好的“只是对此感到奇怪”的能量。
目前,我将保持域名指向 BunnyCDN,并使用我获得的免费试用来进行更多测试。 如果您在访问此站点时遇到以前没有遇到的问题,请告诉我。 或者,如果您之前在使用 Cloudflare 时遇到问题,而现在这些问题已得到解决,请告诉我。
我仍然会保留旧的 Cloudflare Pages 实例,因为,嗯,它是免费的,而且在我想要向某人展示我一直在做的事情时,创建预览站点仍然很方便。 (使用 Cloudflare,预览站点会自动为存储库中的任何分支创建 —— 这大概也可以使用 BunnyCDN 实现,但需要更多的手动工作,我不想现在就去做。)如果一切都出错,我可以随时切换回 Cloudflare。
但目前,我是一位满意的 BunnyCDN 客户,我建议您尝试一下。
Share this article on Reddit, X/Twitter, Bluesky, Hacker News, or Lobsters, or via your device.
Comments, thoughts, or corrections? Send me an email at jonathan.frere@gmail.com or contact me on social media.
This work is licensed under [CC BY-SA 4.0![](data:image/svg+xml,%3Csvg%20version=%221.0%22%20id=%22Layer_1%22%20xmlns=%22http://www.w3.org/2000/svg%22%20xmlns:xlink=%22http://www.w3.org/1999/xlink%22%20width=%2264%22%20height=%2264%22%20viewBox=%225.5%20-3.5%2064%2064%22%20enable-background=%22new%205.5%20-3.5%2064%2064%22%3E%3Cg%3E%3Ccircle%20fill=%22%23fff%22%20cx=%2236.944%22%20cy=%2228.631%22%20r=%2229.105%22/%3E%3Cg%3E%3Cpath%20d=%22M37.443-3.5c8.951.0%2016.531%203.105%2022.742%209.315C66.393%2011.987%2069.5%2019.548%2069.5%2028.5c0%208.954-3.049%2016.457-9.145%2022.514C53.918%2057.338%2046.279%2060.5%2037.443%2060.5c-8.649.0-16.153-3.143-22.514-9.429C8.644%2044.786%205.5%2037.264%205.5%2028.501c0-8.723%203.144-16.285%209.429-22.685C21.1