使用 pyinfra 和 Chimera Linux 构建一个小型内容分发网络

作者为使linkedlist.org(其链接博客)更快,在全球设置了多个部署,使用pyinfra自动化流程,以Chimera Linux为宿主操作系统。

  • 网络架构:展示用户、Gcore GeoDNS 节点及在 AU、FR、NY 的服务器,还有底部的 Qotom 服务器及其与其他服务器的关系。
  • 背景与优化:之前专注写内容,现持续优化低流量网站,添加缓存使应用只渲染一次页面,后续响应复用缓存结果,平均约 323µs,但服务器在澳大利亚,访客常遇延迟,虽对低流量网站影响不大,但仍决定改善。
  • 探索方案: briefly 探索 Cloudflare 和 Fastly 等,因不想给它们更多流量且这是个人项目,最终放弃。统计显示访问者主要来自澳大利亚、美国等,添加欧洲和美国的部署可改善延迟,Linked List 用 Rust 实现,系统要求低,在LowEndBox找到便宜的 VPS,如RackNerd
  • 配置与部署:用 pyinfra 代码自动化安装 Chimera Linux,基本步骤包括从 ISO 启动、登录、设置 ssh 访问、运行 pyinfra 安装部署等,还定义 cports 模板构建 Linked List 系统包,利用其支持创建用户和数据目录,服务器配置额外的 apk 仓库,pyinfa 部署负责构建和同步。
  • TLS 证书:通常用Lego管理 Let’s Encrypt 证书,因需在多服务器间同步,探索多种方案后,用在家的 fanless Qotom Mini PC 通过 pyinfra 配置管理证书,更新文件时通过 renew-hook 脚本推送到各服务器,创建专用用户并通过 doas 规则允许其重启 nginx 以更新证书。
  • GeoDNS:用Gcore’s Managed DNS service确定发送访客到哪个服务器以减少延迟,避免额外请求和跳数,北美由美国服务器服务,欧洲等由法国服务器服务,其他由澳大利亚服务器服务,默认是澳大利亚服务器,还利用其健康检查功能避免解析到故障服务器。
  • 上线与部署:DNS 配置后切换 NS 记录到 Gcore,开始各服务器处理流量,新内容部署通过简单的rsync,内容独立于应用,监控内容目录变化自动重载,部署通过 Makefile 启动,最终平均响应时间从 807ms 降至 189ms,大部分监控位置响应时间降低,在 Chromium 的 Lighthouse 测试中性能得 100 分,目前仅在三个地方有部署,后续可按需添加服务器,同时呼吁大家查看 linkedlist.org 并通过 RSS、Mastodon 和 Bluesky 关注。参考了 Stefano Marinelli 的三篇博客文章用于参考。
阅读 33
0 条评论