主要观点:
- 作者为博客的预览站点服务器 future-sight 过度设计,利用 Kubernetes 的强大功能,实现了自动构建和部署预览站点。
- 之前的预览站点方案存在机器需 24/7 在线的问题,新方案通过将渲染资产存储在 zip 文件中,并利用 Go 的自定义压缩器支持,将其在不同设备间传输和直接服务给用户。
- future-sight 工作流程包括在编辑器中保存时触发 xesite 重建本地预览站点,将生成的 site.zip 上传到 Tigris 并广播给其他副本,最终设置为“当前”版本。
- 在实现过程中遇到了 AWS S3 库与 Minio 的兼容性问题,通过手动创建 S3 客户端解决。
- “生产”部署在 homelab Kubernetes 集群上,预览站点由三个 pod 运行。未来希望对预览站点进行身份验证,并实现自动刷新。
关键信息:
- 预览站点之前通过 Tailscale Funnel 暴露给世界,存在机器需 24/7 在线的问题。
- 新方案利用 Go 的 archive/zip 包和自定义压缩器支持,将 site.zip 平均压缩至 15MB。
- future-sight 涉及协议缓冲区、NATS 和 Valkey 等技术,通过一系列步骤实现预览站点的自动构建和部署。
- 在实现过程中遇到 AWS S3 库与 Minio 的兼容性问题,并通过手动创建 S3 客户端解决。
- “生产”部署在 homelab Kubernetes 集群上,预览站点由三个 pod 运行。未来计划对预览站点进行身份验证和自动刷新。
重要细节:
--devel
模式在本地开发时启用额外功能,如文件更改自动重建和去除 GitHub、Patreon webhook 端点的身份验证中间件。- Go 的自定义压缩机支持使 zip 文件成为 gzip 流的集合,可能减少 CPU 和带宽消耗。
port-forward.sh
脚本用于启动“开发”服务并进行端口转发,以便在 MacBook 上使用。- AWS 过渡到“hostname-derived bucket URLs”导致 Minio 出现问题,通过手动创建 S3 客户端并使用
--use-path-style
标志解决。 - Valkey 密码设置为
hunter2
,虽不是秘密但因仅在集群内部可访问,安全性问题不太重要。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。