在 Raspberry Pi Zero 上託管無磁碟網站

Raspberry Pi Zero 經常被視為玩具或舊型設備,但對於對極簡運算感興趣的人來說,它仍然是自我託管的強大工具。xngbuilds 最近的一個專案展示了如何從完全在 RAM 中運行的 Pi Zero v1.3 提供靜態網站服務——這種「無磁碟」配置可以最大限度地延長硬體壽命並最大限度地減少開銷。

這種方法對於想要嘗試小型硬體極限,同時確保系統對斷電和 SD 卡損耗具有韌性的開發者來說特別有用,而 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: 因其極致的輕量化以及在「無磁碟模式」下運行的能力而被選中。

外部硬體 (The VPS)

為了避免讓 Pi Zero 的 CPU 處理加密握手,使用了一個低成本的 VPS (在此案例中為 TierHive) 作為閘道器。該 VPS 運行 Alpine Linux 並配備極低規格 (128MB RAM, 1vCPU),並利用 socat 將流量從公共網際網路轉發到本地的 Pi Zero。

在無磁碟模式下實作 Alpine Linux

該專案的核心是 Alpine Linux 的無磁碟模式。在此配置中,整個作業系統在啟動期間會被載入到 RAM 中。一旦系統運行,microSD card 就不再是作業系統運行的絕對必要條件,這意味著根檔案系統被掛載為 tmpfsramfs

使用 LBU 確保持久性

由於系統在 RAM 中運行,啟動後進行的任何更改——例如安裝套件或編輯配置檔案——在重新啟動後都會丟失。為了解决這個問題,該專案使用了 lbu (Local Backup Utility)。

透過運行 setup-lbu,系統可以將特定目錄(如 /etc/var/www)備份回 microSD card。使用命令 lbu commit -d 可以將系統的當前狀態儲存到磁碟中,確保這些配置在下次啟動時能被恢復。

軟體堆疊

為了保持極小的佔用空間,該專案避免了使用 Apache 或完整的 Nginx 安裝,而是採用了專業且輕量化的工具:

  • darkhttpd: 一個微小的、無需配置的靜態 Web 伺服器。它被配置為 OpenRC 服務以在啟動時自動啟動。
  • dropbear: 一個輕量級的 SSH 伺服器,比 OpenSSH 顯著更節省資源。
  • rsync: 用於將檔案從本地開發機高效地同步到 Pi。

對於需要更多靈活性的人來說,Nginx 仍然是一個可行的替代方案,儘管它需要更多配置以及同樣的 lbu 持久性規則。

網路路由與 TLS 終止

流量從使用者流向網站的路徑如下:

  1. Public DNS $\rightarrow$ VPS (HAProxy): VPS 處理 TLS 握手並自動管理 SSL 證書。
  2. VPS (socat) $\rightarrow$ Local Router: 流量透過特定連接埠從 VPS 轉發到本地家庭 IP。
  3. 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 卡損壞且資源利用率極高的託管環境。

Sources