空垠尘

樹莓派 HomeLab 搭建與調優實戰

引言:為什麼樹莓派是絕佳的家庭微型伺服器?

樹莓派(Raspberry Pi)以其極低的功耗(待機僅 2~5W)、完全靜音的運行體驗以及豐富的 GPIO 擴充介面,成為了無數開發者與極客玩家構建 7×24 小時不間斷運行的 HomeLab(家庭實驗室/微型伺服器) 的首選設備。

然而,在實際從零折騰樹莓派的過程中,許多新手往往會踩不少坑:

  • 缺少外接螢幕與鍵盤,不知道如何進行無頭啟動(Headless Boot);
  • 軟體下載極慢,映像源配置繁瑣;
  • 外接行動硬碟或 SSD 重啟後盤符變動或權限遺失;
  • 散熱不佳導致 CPU 高溫降頻,或者風扇常開噪音擾民。

本文將基於長期的維運與折騰實踐,從 系統初始化、儲存擴充、硬體溫控 到 Docker 基礎環境,為你提供一份條理清晰、開箱即用的全套實戰指南。

flowchart TD
    A["1. 無頭燒錄與系統安裝<br/>(SSH & Wi-Fi 免螢幕配置)"] --> B["2. 系統源與基礎環境優化<br/>(APT 映像加速 / 靜態 IP)"]
    B --> C["3. 儲存擴容與硬碟掛載<br/>(UUID / fstab / 權限定義)"]
    C --> D["4. 硬體散熱與 GPIO 溫控<br/>(PWM 調速 / 壽命保護)"]
    D --> E["5. 部署 Docker & HomeLab 服務<br/>(Compose / 容器矩陣)"]

一、 系統燒錄與無頭初始化(無需螢幕與鍵盤)

1. 燒錄官方系統 (Raspberry Pi OS / Ubuntu Server)

推薦使用官方的 Raspberry Pi Imager 燒錄工具:

  1. 作業系統選擇:推薦 64 位無桌面版 Raspberry Pi OS Lite (64-bit) 或 Ubuntu Server 64-bit,資源佔用極小,記憶體佔用僅 100MB 左右;
  2. 進階預設配置(關鍵技巧):在燒錄器中點擊右下角齒輪或按下 Ctrl + Shift + X(Mac: Cmd + Shift + X)喚出進階設定:
    • 勾選 Set hostname(例如 rpi-server);
    • 勾選 Enable SSH,並設定帳號密碼或注入你的 SSH 公鑰;
    • 勾選 Configure wireless LAN(填寫家中 Wi-Fi 名稱與密碼);
    • 設定時區為 Asia/Taipei 或 Asia/Shanghai。
  3. 點擊燒錄到 TF 卡或 USB 固態硬碟中。

2. 首次啟動與 SSH 遠端連接

燒錄完成後,將卡插入樹莓派並接通電源。等待 1~2 分鐘系統初始化,在電腦終端直接透過主機名稱或區域網路 IP 連接:

1# 透過 mDNS 主機名稱直接連接
2ssh your_username@rpi-server.local
3
4# 或查詢路由器後台獲取分配的 IP 連接
5ssh your_username@192.168.1.100

二、 系統源替換與基礎網路調優

由於預設官方軟體源位於海外,下載軟體包可能較慢。首次登入後建議更換為就近高速映像源(以 Debian 12 Bookworm 為例):

1. 備份並替換 APT 軟體源

 1# 備份原源檔案
 2sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
 3sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
 4
 5# 替換系統主源為開源映像源
 6sudo sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' /etc/apt/sources.list
 7sudo sed -i 's|http://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list
 8
 9# 替換樹莓派特有硬體驅動源
10sudo sed -i 's|http://archive.raspberrypi.org/debian|https://mirrors.tuna.tsinghua.edu.cn/raspberrypi|g' /etc/apt/sources.list.d/raspi.list
11
12# 更新快取並升級基礎軟體
13sudo apt update && sudo apt upgrade -y

2. 安裝常用基礎維運工具

1sudo apt install -y curl wget git vim htop zsh tmux net-tools ufw

三、 外接行動硬碟 / SSD 自動掛載與持久化

TF 卡的讀寫壽命和隨機 I/O 效能有限,跑資料庫和下載服務極易損壞。建議將外接行動硬碟或行動固態硬碟(SSD)掛載為資料儲存盤。

sequenceDiagram
    autonumber
    participant USB as 外接硬碟 / SSD
    participant System as 樹莓派系統核心
    participant Fstab as /etc/fstab 設定檔
    participant Mount as 掛載點 (/mnt/data)

    System->>USB: 讀取設備唯一識別碼 (UUID)
    Fstab->>System: 開機解析掛載規則 (nofail, UUID, ext4)
    System->>Mount: 自動掛載至指定目錄並賦予權限

1. 查看硬碟設備與獲取唯一 UUID

插入 USB 硬碟後,在終端機執行:

1# 查看所有儲存塊設備
2lsblk -f

輸出範例:

1NAME        FSTYPE FSVER LABEL  UUID                                 MOUNTPOINT
2sda
3└─sda1      ext4   1.0   DATA   e58f2371-d41a-4d7a-8b8a-927164b18210

⚠️ 注意:絕對不要使用 /dev/sda1 來掛載!如果下次重啟插了其它隨身碟,盤符可能會變成 /dev/sdb1 導致啟動卡死。必須使用 UUID。

2. 建立掛載點與配置 /etc/fstab

1# 1. 建立掛載目標目錄
2sudo mkdir -p /mnt/data
3
4# 2. 編輯 fstab 自動掛載配置
5sudo vim /etc/fstab

在檔案末尾追加一行(以 ext4 格式為例):

1# <file system>                                 <mount point>   <type>  <options>       <dump>  <pass>
2UUID=e58f2371-d41a-4d7a-8b8a-927164b18210     /mnt/data       ext4    defaults,nofail,noatime 0       2

💡 參數解析:

  • defaults:使用預設讀寫權限;
  • nofail:關鍵配置!即使硬碟未插上或識別失敗,系統也不會卡死在開機自檢流程;
  • noatime:關閉每次讀取檔案更新存取時間戳記,減少寫入操作,延長磁碟與快閃記憶體壽命。

3. 測試掛載與權限設定

1# 測試配置是否正確(不報錯即為配置無誤)
2sudo mount -a
3
4# 將掛載目錄的歸屬權分配給當前一般使用者
5sudo chown -R $USER:$USER /mnt/data

四、 硬體散熱與 GPIO 智慧溫控風扇

樹莓派 4B / 5 在高負載下發熱量較大。如果風扇一直全速運轉,不僅噪音刺耳,還會加速風扇軸承磨損。我們可以使用一段輕量級 Python 腳本配合 GPIO 實現智慧溫控調速。

1. 硬體接線示意

  • 風扇正極(紅線) $\rightarrow$ 接 GPIO 5V(Pin 4)或 3.3V(Pin 1)
  • 風扇負極(黑線) $\rightarrow$ 透過三極管(如 NPN S8050)連接 GPIO GND(Pin 6)
  • 三極管控制基極 $\rightarrow$ 接 GPIO 14(Pin 8,TXD)

2. 智慧溫控守護腳本 (temp_control.py)

建立腳本檔案 /usr/local/bin/temp_control.py:

 1#!/usr/bin/env python3
 2# -*- coding: utf-8 -*-
 3import time
 4import os
 5import RPi.GPIO as GPIO
 6
 7# 配置參數
 8FAN_PIN = 14          # 控制引腳 BCM 14
 9TEMP_HIGH = 55.0      # 超過 55 度開啟風扇
10TEMP_LOW = 45.0       # 低於 45 度關閉風扇
11
12GPIO.setwarnings(False)
13GPIO.setmode(GPIO.BCM)
14GPIO.setup(FAN_PIN, GPIO.OUT, initial=GPIO.LOW)
15
16def get_cpu_temp():
17    """讀取 CPU 當前核心溫度"""
18    with open("/sys/class/thermal/thermal_zone0/temp", "r") as f:
19        temp = float(f.read()) / 1000.0
20    return temp
21
22try:
23    fan_state = False
24    while True:
25        temp = get_cpu_temp()
26        if temp >= TEMP_HIGH and not fan_state:
27            GPIO.output(FAN_PIN, GPIO.HIGH)
28            fan_state = True
29        elif temp <= TEMP_LOW and fan_state:
30            GPIO.output(FAN_PIN, GPIO.LOW)
31            fan_state = False
32        time.sleep(5)
33except KeyboardInterrupt:
34    GPIO.cleanup()

3. 註冊為 systemd 開機自啟服務

建立守護行程設定檔 /etc/systemd/system/fan-control.service:

 1[Unit]
 2Description=Raspberry Pi Smart Fan Temperature Control
 3After=multi-user.target
 4
 5[Service]
 6Type=simple
 7ExecStart=/usr/bin/python3 /usr/local/bin/temp_control.py
 8Restart=always
 9RestartSec=10
10
11[Install]
12WantedBy=multi-user.target
1# 啟用並啟動溫控服務
2sudo systemctl daemon-reload
3sudo systemctl enable --now fan-control.service

五、 安裝 Docker 與現代 HomeLab 運行環境

有了穩定的儲存與散熱,最後一步是安裝 Docker 容器矩陣,讓樹莓派能輕鬆部署無數現代化開源服務:

 1# 1. 官方腳本一鍵安裝 Docker
 2curl -fsSL https://get.docker.com | bash
 3
 4# 2. 將當前使用者加入 docker 群組(免 sudo 執行 docker)
 5sudo usermod -aG docker $USER
 6
 7# 3. 安裝 Docker Compose 外掛
 8sudo apt install -y docker-compose-plugin
 9
10# 4. 配置 Docker 日誌上限輪轉(防止把磁碟撐爆)
11sudo mkdir -p /etc/docker
12sudo tee /etc/docker/daemon.json <<-'EOF'
13{
14  "log-driver": "json-file",
15  "log-opts": {
16    "max-size": "20m",
17    "max-file": "3"
18  }
19}
20EOF
21
22sudo systemctl restart docker

總結

透過以上 5 步,你的樹莓派已經成為了一台功耗極低、散熱安靜、儲存充裕、開箱即用的現代化家庭伺服器。

文章目錄