樹莓派 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 燒錄工具:
- 作業系統選擇:推薦 64 位無桌面版
Raspberry Pi OS Lite (64-bit)或Ubuntu Server 64-bit,資源佔用極小,記憶體佔用僅 100MB 左右; - 進階預設配置(關鍵技巧):在燒錄器中點擊右下角齒輪或按下
Ctrl + Shift + X(Mac:Cmd + Shift + X)喚出進階設定:- 勾選 Set hostname(例如
rpi-server); - 勾選 Enable SSH,並設定帳號密碼或注入你的 SSH 公鑰;
- 勾選 Configure wireless LAN(填寫家中 Wi-Fi 名稱與密碼);
- 設定時區為
Asia/Taipei或Asia/Shanghai。
- 勾選 Set hostname(例如
- 點擊燒錄到 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 步,你的樹莓派已經成為了一台功耗極低、散熱安靜、儲存充裕、開箱即用的現代化家庭伺服器。