在 Raspberry Pi Zero 上托管无盘网站
Raspberry Pi Zero 通常被视为玩具或过时设备,但对于对极简计算感兴趣的人来说,它仍然是构建自托管服务的强大工具。xngbuilds 最近的一个项目展示了如何从完全在 RAM 中运行的 Pi Zero v1.3 提供静态网站服务——这种“无盘”配置可以最大限度地延长硬件寿命并最大限度地减少开销。
对于那些想要在确保系统能够抵御断电和 SD 卡磨损(这是长期部署 Raspberry Pi 的常见故障点)的同时,实验小型硬件极限的人来说,这种方法特别有用。
架构:本地硬件与外部代理
为了在仅有 512MB RAM 的设备上维持高性能、安全的网站,该项目采用了混合架构。TLS (SSL) 终止的繁重工作被卸载到一个微型外部 VPS 上,从而使 Pi Zero 能够专注于通过 HTTP 提供静态内容。
本地硬件栈
- Raspberry Pi Zero v1.3: 核心计算单元。
- 512MB microSD card: 用于初始启动并存储持久化配置文件。
- Waveshare Ethernet HAT: 提供稳定的有线连接(虽然 OTG 适配器也是一种替代方案)。
- Alpine Linux: 因其极度的轻量化和在“无盘模式”下运行的能力而被选中。
外部硬件 (VPS)
为了避免使用加密握手来消耗 Pi Zero 的 CPU,使用了一个低成本 VPS (在此案例中为 TierHive) 作为网关。该 VPS 运行着配置极低的 Alpine Linux (128MB RAM, 1vCPU),并利用 socat 将流量从公共互联网转发到本地 Pi Zero。
在无盘模式下实现 Alpine Linux
该项目的核心是 Alpine Linux 的无盘模式。在这种配置下,整个操作系统在启动时被加载到 RAM 中。一旦系统运行起来,microSD card 就不再是操作系统运行所必需的了,这意味着根文件系统被挂载为 tmpfs 或 ramfs。
使用 LBU 确保持久性
由于系统在 RAM 中运行,启动后进行的任何更改——例如安装软件包或编辑配置文件——在重启后都会丢失。为了解决这个问题,该项目使用了 lbu (Local Backup Utility)。
通过运行 setup-lbu,系统可以将特定目录(如 /etc 和 /var/www)保存回 microSD card。使用命令 lbu commit -d 可以将系统的当前状态保存到磁盘,从而确保这些配置在下次启动时能够恢复。
软件栈
为了保持极小的占用,该项目避免了使用 Apache 或完整的 Nginx 等重型 Web 服务器,而是倾向于使用专门的轻量级工具:
darkhttpd: 一个微型、零配置的静态 Web 服务器。它被配置为 OpenRC 服务以在启动时自动运行。dropbear: 一个轻量级 SSH 服务器,比 OpenSSH 显著更节省资源。rsync: 用于将文件从本地开发机高效地同步到 Pi。
对于需要更多灵活性的用户,Nginx 仍然是一个可行的替代方案,尽管它需要更多的配置和相同的 lbu 持久化规则。
网络路由与 TLS 终止
流量通过以下路径从用户流向网站:
- Public DNS $\rightarrow$ VPS (HAProxy): VPS 处理 TLS 握手并自动管理 SSL 证书。
- VPS (socat) $\rightarrow$ Local Router: 流量通过特定端口从 VPS 转发到本地家庭 IP。
- ** Local Router** $\rightarrow$ Pi Zero: 路由器将外部端口转发到 Pi Zero 的内部 IP,端口为 80。
这种设置有效地绕过了 Pi Zero 处理复杂加密的需求,尽管社区中的批评者指出,如果配置了像 ChaCha20 这样的优化密码套件,Pi Zero 技术上是可以处理 TLS 的。
社区见解与反论点
该项目在 Hacker News 上引发了关于此类设置的必要性和“令人印象深刻程度”的热烈讨论。
关于硬件能力
一些用户认为 Pi Zero 的性能比该项目所暗示的要强大得多。正如一位用户所言:
"A raspberry zero is more powerful than an enterprise server from the 1990s. A minimalist static website is not impressive."
其他人指出,Pi Zero 能够运行更复杂的任务,包括生产级的云存储或通过模拟 (BOX64) 运行 x86 服务器。
关于“无盘”的定义
技术纯粹主义者指出,由于 Pi 仍然从 SD 卡启动,它并不是像 TFTP 启动那样真正的“无盘”。一个真正的无盘 Pi 会通过网络获取其启动镜像,从而完全移除 SD 卡。
关于安全与寿命
尽管存在质疑,请许多人称赞了 Alpine Linux 的选择以及 tmpfs 方法。在 RAM 中运行操作系统可以显著延长 microSD card 的寿命,通过消除持续的写入循环,这是 Raspberry Pi 项目中故障的主要原因。
结论
虽然为 Pi Zero 提供静态网站服务对于经验丰富的系统管理员来说可能显得微不足道,这,项目作为一个构建弹性、低开销系统的实用蓝图。通过结合轻量级 OS、基于 RAM 的执行以及用于 TLS 终止的策略性代理,可以创建一个几乎免疫于 SD card 损坏且资源利用率极高的托管环境。