
我家里的数码设备越来越多三台电脑、两个手机、一块移动硬盘影视和照片散得到处都是。之前想找一部电影得先回忆它到底存在哪台机器上手机相册满了又要手动导一次数据。折腾了几个来回之后我下定决心搭一台家庭服务器把所有零散的数据集中起来统一管理。对比过旧笔记本改造、软路由和云服务器最后还是选了树莓派。这篇文章是我从硬件选型到日常维护的完整记录包括踩过的坑和排查思路适合想低成本入门家庭服务器、又不想一上来就买几千块成品NAS的朋友。我最早的想法其实很简单把一台旧笔记本刷成NAS系统但这台设备跑起来功耗60W朝上、风扇呼呼响、体积还占地方放在客厅实在碍眼。云服务器也考虑过但存储空间太小、带宽受限把几十部电影传上去几乎是恶梦。成品NAS硬件倒是省心可价格摆在那里系统更新频率也让我犹豫。后来看到抽屉里吃灰的树莓派4B才认真考虑用它当载体。事实证明只要需求想清楚树莓派的性能其实绰绰有余。1. 为什么是树莓派从需求反推硬件选型1.1 先列需求再谈硬件动手之前我先把需求一条一条写下来避免被“跑分参数”带着走。家用服务器的核心无非这几点文件共享让电脑、手机、电视都能访问同一份数据下载任务挂BT、PT不用开电脑媒体管理把下载好的电影、剧集自动整理成海报墙照片备份手机照片定期集中备份偶尔跑点小脚本比如定时同步、爬点天气数据。这套需求没有一项是真正吃性能的瓶颈全都在存储的读写能力、网络传输速度和系统长期运行的可靠性上。把这个需求清单摆出来再对比几种方案就清晰了很多方案优点缺点我的判断旧笔记本改NAS性能强、免硬件成本功耗高、噪音大、体积大、系统新旧难控不适合24小时常开云服务器可随时访问、免维护存储贵、带宽小、数据在外网只适合跑轻量服务成品NAS省心、维护简单价格高、系统封闭、扩展配件贵入门预算不友好树莓派低功耗、体积小、社区资料多算力有限、存储接口弱完美契合我的需求树莓派存在的缺点恰好都被我用在关键场景里存储读写弱就换SSD移动硬盘来解决算力有限就不硬解4K高码率视频直接交给播放端解码。需求越具体选型越不会翻车。1.2 树莓派4B与5怎么选我当时手里是一块树莓派4B 4GB版本后来也在朋友那边实测过树莓派5 8GB。这两代对家庭服务器场景来说性能都算够用差别主要在冗余度、发热和价格上。我把对比列一下项目树莓派4B树莓派5CPU4核 Cortex-A724核 Cortex-A76内存2/4/8GB4/8/16GB网口千兆以太网千兆以太网USBUSB 3.0 x2USB 3.0 x2带独立控制器功耗水平待机2-4W满载7W左右待机3-5W满载8-12W散热方案被动散热片基本够建议主动风扇金属壳价格相对便宜相对贵最终选择4B 4GB不是因为它更强而是因为Samba文件共享、qBittorrent下载、Jellyfin媒体服务这三件套在4B上跑得很顺。树莓派5的CPU单核性能确实提升明显但日常使用几乎感知不到差异反而多了一笔风扇投入。当然如果你计划以后跑照片AI识别、更大的数据库或者同时跑更多容器直接上树莓派5 8GB会更从容省得半年后又想换板子。1.3 周边配件里的隐性坑树莓派本身只是一块裸板真正决定体验的是周边配件。我在配件上踩过不少坑总结下来最值得注意的几点。电源适配器必须买官方或标称电流足额的。树莓派4B建议5V 3A树莓派5官方更是直接建议5V 5A。USB接口外接移动硬盘时硬盘启动瞬间的电流尖峰很容易让劣质电源掉压表现就是系统突然重启、硬盘频繁报错。我一开始用手机充电头供电跑两天就出现一次文件系统只读的情况换了官方电源后再没出现过。存储介质方面我建议直接放弃SD卡作为系统盘的想法。SD卡的随机读写能力弱连续写入大文件时容易变成系统瓶颈而且日志频繁写入会加速寿命衰竭。我现在把树莓派系统装在一块128GB的SSD移动硬盘上启动速度快、读写稳Samba拷贝文件也从原来11MB/s提升到110MB/s完全两个体验。稍后会在踩坑章节详细说这段排查过程。散热被很多人忽视但对24小时运行的服务器来说非常关键。我的4B用了一个十几块钱的铝制散热壳夏天不开空调时温度压在60度以内后来忍不住加了一个小风扇直接降到50度以下。如果你的环境比较闷热建议还是上一个带风扇的散热套件温度每低一点对硬件寿命都是正向的。2. 系统部署从烧录到首次进系统的关键细节2.1 系统选型Lite版比桌面版更适合服务器树莓派官方系统有两类带桌面环境Desktop和精简版Lite。做家庭服务器我强烈建议选Lite版而且要64位。桌面环境看着花哨但对服务器没有任何帮助反而会占掉几百MB内存、多出一堆图形组件需要定期更新时间久了还可能因为桌面进程异常影响整体运行。Lite版启动后就是一个纯命令行界面占用资源少操作也直接。有些人担心不会用命令行就选桌面版这个顾虑其实没必要。服务器的日常运维无非就是SSH连上去敲几条命令文件管理、容器操作都有成熟命令可查习惯了反而比在图形界面里一层层点菜单更高效。真有临时看界面的需求还可以装一个轻量Web管理面板但正常情况下用不到。2.2 无头部署一张SD卡直接带走现在的树莓派烧录工具已经很智能官方出的Raspberry Pi Imager就能在写系统之前完成初识化配置。我习惯把这类操作叫“全自动无人值守安装”因为系统写完插电就能直接通过SSH连上去键盘显示器都不用接。具体流程是打开Imager选择操作系统“Raspberry Pi OS Lite (64-bit)”选择SD卡然后在设置的齿轮图标里填写主机名、设置用户名和密码、勾选SSH服务、配置Wi-Fi和时区。这些配置会直接写入烧录后的系统不需要额外的编辑命令。重点说一下SSH和Wi-Fi这两个选项。SSH必须提前开启否则无头模式下第一次启动会卡在无法远程连接的状态。Wi-Fi配置要格外小心SSID里如果含空格或特殊字符需要按照对应格式填写否则系统启动后连不上网又得拔卡重刷。另外建议把国家选对这样Wi-Fi频段和功率配置才会正确。烧录完成后把SD卡装进树莓派、接通电源等一分钟从路由器后台找到设备的IP地址然后通过 SSH 连接即可。IP地址通常会在路由器“已连接设备”列表里显示也可以用nmap扫描局域网设备来发现。2.3 开机后的系统初始化首次登录后不要急着装服务先把系统状态整理干净。我在每台新派上都会按同样顺序处理先换软件源再更新系统然后改主机名、校时区、配静态地址。换源是很多人容易忽略的一步。Raspberry Pi OS默认走官方软件源国内访问速度经常很慢。修改 /etc/apt/sources.list 和 /etc/apt/sources.list.d/raspi.list 里的地址为国内镜像站即可。注意要先确认系统版本代号比如Bookworm和Bullseye的地址结构不一样复制粘贴之前花十秒钟看一眼文件内容能省去后面一堆麻烦。换完源执行更新sudo apt update sudo apt full-upgrade -yfull-upgrade 会升级内核和重要组件首次执行可能需要几分钟耐心等它跑完。更新完成后顺手执行 raspi-config把主机名改为你喜欢的名字再把时区设为Asia/Shanghai。时区不设对会导致定时任务、日志时间全错排障时特别容易懵。静态IP配置我倾向于在路由器端做DHCP保留而不是在树莓派里写死网络配置。原因很简单DHCP保留只需要在路由器上绑定一次MAC地址树莓派系统重装后不用再改配置文件如果在系统里写静态IP遇到子网掩码、网关填错的情况远程连接直接失联又得回到接显示器救急的模式。最后建议顺手开启SSH密钥登录关掉密码登录。用 ssh-keygen 生成一对密钥把公钥追加到树莓派的 ~/.ssh/authorized_keys 里然后编辑 /etc/ssh/sshd_config 设置 PasswordAuthentication no。这样即使局域网里有不速之客扫到SSH端口也只能望而却步。2.4 远程管理的日常姿势系统部署完之后我基本就不再碰物理设备了所有操作都在终端里完成。管理方式有点笨但很靠谱用 tmux 保持会话。tmux 的好处是即使SSH断开正在跑的打包、下载、升级任务也不会被中断。后来我把所有服务都迁到Docker Compose里tmux的主要用途变成临时跑一些脚本和手动维护任务但依然每天都用。我还会在终端里配一个别名把连树莓派的命令缩短比如在本地 ~/.ssh/config 里定义一个 Host 条目Host rasp HostName 192.168.1.100 User pi IdentityFile ~/.ssh/id_ed25519这样每次只需输入ssh rasp就能直达省掉一长串参数。3. 核心服务搭建文件共享、下载与媒体播放3.1 Samba文件共享让全屋设备连通文件共享是家庭服务器的第一刚需手机、电脑、电视、平板都要访问同一个数据池子Samba是兼容性最好的方案。安装很简单sudo apt install samba samba-common-bin -y然后编辑 /etc/samba/smb.conf在文件末尾添加共享目录配置。我这里的共享根目录是 /data下面按用途分成 files、downloads、media、backup 几个子目录配置时直接共享 /data 整体权限统一管理更省心。[data] comment Home Data path /data browseable yes read only no valid users pi create mask 0644 directory mask 0755 force user pi force group pivalid users 指定允许访问的用户force user 和 force group 则让所有通过Samba写入的文件都以 pi 用户身份创建避免出现多用户权限错乱的麻烦。配置好后给 pi 设置Samba密码重启服务sudo smbpasswd -a pi sudo systemctl restart smbd在Windows资源管理器地址栏输入 \192.168.1.100\data 就能访问macOS的Finder里按 CmdK 输入 smb://192.168.1.100/data 同样可以手机上用支持SMB协议的文件管理器即可。这里最常见的坑是写入失败基本都是宿主机目录权限问题检查 /data 的属主是否为 pi然后给好可写权限就行。3.2 目录结构设计数据别乱放文件共享搞定之后紧接着要面对的是数据组织问题。我见过很多人直接把所有文件堆在共享根目录几个月后自己都找不到东西在哪。我的习惯是从第一天就把结构定清楚/data ├── files/ # 个人文档、软件安装包 ├── downloads/ # 下载任务相关 │ ├── incomplete/ # 未完成文件 │ └── complete/ # 已完成文件 ├── media/ # 影音资源 │ ├── movie/ │ ├── tv/ │ └── photo/ └── backup/ # 各类备份分开目录的好处是权限和任务都容易隔离。比如 incomplete 目录可以让任何用户写入但 complete 只允许下载服务写入照片目录单独分出来方便后面给备份脚本指定数据源Samba共享时也可以按需隐藏某些目录。这套结构从前期固定下来后面加服务基本不用改动体验非常顺。3.3 qBittorrent-nox下载机也能很干净下载任务我选了 qBittorrent-nox这是一个没有图形界面的qBittorrent版本通过Web UI操作完全契合服务器场景。安装方式sudo apt install qbittorrent-nox -y首次运行会生成配置目录然后自动退出我们指定配置文件路径再启动qbittorrent-nox --profile/home/pi/.config/qBittorrent访问 IP:8080 打开Web UI默认用户名 admin密码在初次启动日志里有输出登录后马上到设置里改掉。Web UI里需要重点调整几处监听端口随机改成高位端口并启用随机端口机制全局速度限制根据上行带宽设置避免下载塞满带宽导致其他设备上网卡顿下载完成后自动转移到 /data/downloads/complete做种策略设置一个合理比率比如分享率到1.5停止做种既不占空间也保持PT账号健康。为了让qBittorrent开机自启配置一个systemd服务。新建 /etc/systemd/system/qbittorrent.service[Unit] DescriptionqBittorrent-nox Afternetwork.target [Service] Userpi ExecStart/usr/bin/qbittorrent-nox --profile/home/pi/.config/qBittorrent Restarton-failure RestartSec10 [Install] WantedBymulti-user.target然后sudo systemctl daemon-reload sudo systemctl enable --now qbittorrent用systemd管理的好处是进程崩溃后会自动拉起重启树莓派也会自动启动。我后来把这套逻辑搬进Docker Compose后这个systemd服务就退役了但思路是通用的。3.4 Jellyfin媒体库刮削的乐趣和折腾媒体服务我用Jellyfin这是完全开源免费的一套方案配合Samba共享的媒体目录能自动刮削海报、简介、字幕信息变成电视墙一样的效果。安装方式有很多我建议直接用Docker镜像省去Java环境和依赖的烦恼docker run -d \ --name jellyfin \ --restart unless-stopped \ -p 8096:8096 \ -v /data/config/jellyfin:/config \ -v /data/media:/media \ -e PUID1000 \ -e PGID1000 \ jellyfin/jellyfin这里有个关键点PUID和PGID必须设为宿主机实际用户的UID和GID默认1000对应第一个普通用户通常就是 pi。如果不设这两个环境变量容器内进程可能以root运行创建出来的缓存、缩略图文件属主全是root后面想清理或迁移目录时会遇到权限毛。界面打开后添加媒体库时选择对应的电影或剧集目录元数据语言选中文刮削器默认的几种已经覆盖主流信息源。刮削效果主要看文件名规范电影推荐 “肖申克的救赎 (1994).mp4” 这样的格式美剧推荐 “绝命毒师/S01E01.mp4” 结构。文件名越规范刮削成功率越高需要手动修正的越少。部分小众片源刮不到很正常Jellyfin允许手动编辑nfo文件直接把IMDb信息填进去就能补上。硬解方面树莓派4B对H.264硬解支持可以但对H.265和4K高码率视频比较吃力。我的策略是播放端解码Jellyfin只负责转发流媒体这样即便客户端机器性能一般播放也不会卡顿树莓派CPU负载也能保持在一个很低的水平。4. Docker化与备份策略把自己从重复劳动里解放出来4.1 为什么服务统一走Docker ComposeqBittorrent和Jellyfin我都推荐用Docker方式跑更不用说后续可能加的Home Assistant、导航页、笔记服务。服务一旦多起来直接在系统里装很容易把依赖搞乱卸载也不干净。Docker化之后每个服务是独立的容器配置文件、数据目录都能用挂载卷明确指出来删除服务不会残留一堆系统包。更重要的是Docker Compose把整套应用的启动流程固化成一份文件重新部署、迁移到新硬件时只需要复制这一份 yaml 文件运行 docker compose up -d 就能恢复完整服务。这一点在恢复演练时特别有用。4.2 一份能直接抄作业的Compose配置我的 /data/config/docker-compose.yml 长这样services: qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID1000 - PGID1000 - TZAsia/Shanghai - WEBUI_PORT8080 volumes: - /data/config/qbittorrent:/config - /data/downloads:/downloads ports: - 8080:8080 - 6881:6881 - 6881:6881/udp restart: unless-stopped jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin environment: - PUID1000 - PGID1000 - TZAsia/Shanghai volumes: - /data/config/jellyfin:/config - /data/media:/media ports: - 8096:8096 restart: unless-stoppedlinuxserver镜像的qBittorrent和apt装的qBittorrent-nox配置思路一样只是配置文件位置挂在 /config 卷里。注意端口映射时BT客户端的监听端口需要同时映射TCP和UDP否则做种效率明显下降。Jellyfin的端口映射没什么特殊保持8096即可。第一次启动时建议先不要设置下载目录和媒体库等容器起来后再进入Web界面配置因为容器内的路径是 /downloads 和 /media这是明确的挂载点直接在界面里指定这两个路径就行。不用纠结宿主机路径和容器路径的差异只要卷挂载对应好即可。4.3 备份配置备份与数据备份分开做Docker化之后备份的对象变得非常清晰配置文件和持久化数据。媒体文件这种重新下载成本低的资源一般不纳入备份策略照片和个人文件才是备份的重点。我的备份脚本分两段。第一段是配置备份定期把所有容器配置打包并归档到备份目录#!/bin/bash BACKUP_DIR/data/backup/config-store DATA_DIR/data/config TIMESTAMP$(date %Y%m%d) mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/config-${TIMESTAMP}.tar.gz \ -C /data \ config find $BACKUP_DIR -name config-*.tar.gz -mtime 30 -delete第二段是照片和个人文件的增量备份用rsync同步到冷备移动硬盘rsync -avh --delete \ /data/media/photo/ \ /mnt/backup-disk/photo/rsync的 --delete 选项确保备份目录和源目录完全一致删除掉源端已移除的文件。增量备份的好处是每天跑一次也就几秒钟极大降低备份对正常使用的影响。定时任务用crontab30 3 * * * /usr/local/bin/backup-config.sh /var/log/backup.log 21 0 4 * * * /usr/local/bin/backup-photo.sh /var/log/backup.log 21备份必须做恢复演练否则等于没备份。我每季度会从备份清单里挑一天把 config-*.tar.gz 解压到一个临时目录检查服务配置是否完整照片备份则会随机打开几张图片验证完整性。这个习惯让我在真实故障时心里有底。4.4 系统盘损坏的应对树莓派常年在读写系统盘确实有寿命风险。我用过三张SD卡其中一张在一年后出现文件系统只读表现是重启后SSH能连但所有写入操作都报错。如果你的系统跑在SD卡上遇到这类症状基本可以确定卡快不行了建议立即把配置和数据备份出来迁移到SSD。迁移方案很简单用镜像工具把SD卡完整克隆到SSD里空间够大还可以顺手扩容root分区然后把 /etc/fstab 里的根分区UUID改成SSD的UUID。这样树莓派下一次启动就会从SSD引导SD卡彻底退役。就算整个系统盘阵亡只要 /data 数据目录在按照前面的Compose文件重新部署所有服务几分钟就能完整拉起来。这也是容器化最大的回报数据和应用分离系统盘变成了可以随时重建的组件。5. 日常维护、监控与踩坑记录5.1 轻量监控不被大盘绑架家庭服务器不追求复杂的监控体系偶尔看一眼状态就够了。我用的都是命令行直接查看不装额外的监控面板因为小规模服务装Prometheus或Grafana纯属增加维护负担。温度用官方命令vcgencmd measure_temp磁盘空间df -h /data日志查看用 journalctl 和 docker logsjournalctl -u systemd-resolved --since today docker logs --tail 200 jellyfin我把这三条命令写到一个脚本里配合crontab每小时在 /data/logs/status.log 追加一行摘要心里有数就好echo $(date) $(vcgencmd measure_temp) $(df -h /data | tail -1) /data/logs/status.log这个日志文件本身也通过Samba共享方便局域网内其他设备查看虽然多数时候根本不会看。监控的意义在于故障发生时能回溯而不是制造信息焦虑。5.2 踩坑一Samba复制文件速度感人现象很明确从电脑往树莓派复制文件速度一直徘徊在11MB/s路由器是千兆网线也是六类线理论速度应该到110MB/s才对。首次排查链路是先看链路协商路由器后台确认树莓派网口确实协商到了1000Mbps排除网线问题然后直接在树莓派本机对数据盘做读写测试发现写入速度也只有20MB/s左右瓶颈锁定在存储设备上。问题根源是SD卡。当时系统盘和数据盘用同一张SD卡它的顺序读写在SATA级别的电脑上用读卡器能到80MB/s但在树莓派的IO环境下表现很差尤其并发写入时波动极大。解决方法是把数据目录迁移到USB接口的SSD移动硬盘上同时把系统也迁过去之后Samba复制文件稳定在110MB/s卸载、读取海量小文件时的响应速度也有质的提升。这个坑让我明白一个道理树莓派的性能瓶颈通常不在CPU而在你为它选择的存储介质。5.3 踩坑二qBittorrent Web UI 打不开qBittorrent -nox 设置为开机自启后我遇到过一个很迷惑的现象systemd服务显示 runningSSH 登录树莓派执行 curl localhost:8080 也能拿到页面内容但从另一台电脑访问 192.168.1.100:8080 却一直超时。排查链路从进程监听地址开始ss -lntp | grep 8080输出显示监听地址是 127.0.0.1:8080而不是 0.0.0.0:8080这个问题就清晰了qBittorrent 默认Web UI只听本机回环即使系统防火墙完全开放其他设备也访问不到。解决办法是在Web UI设置里把监听地址改成 0.0.0.0。改完之后 ss 输出会变成 0.0.0.0:8080局域网内访问随即恢复正常。这个坑特别典型很多自带Web服务的程序出于安全考虑默认只监听本机遇到“服务看似在跑但访问不了”的问题第一反应应该先看监听地址而不是急着查防火墙和路由器。5.4 踩坑三Docker容器权限错乱Jellyfin显示不出媒体Jellyfin 容器启动后Web 界面里新建媒体库时发现 /media 目录是空的但宿主机上明明有几十部电影。第一反应是检查容器内挂载是否正常docker exec jellyfin ls -la /media输出显示目录是空的但我在宿主机上能看到内容。既然挂载路径和卷映射都没有问题那就是UID/GID不匹配导致容器无法读取目录内容。用 docker exec jellyfin id 看到容器内用户 uid 是 911而宿主机 /data/media 目录的属主是 uid 1000两个对不上文件权限自然阻止了读取。解决办法有两个方向一是把容器的 PUID 环境变量设为 1000 并重启容器二是修改宿主机目录属主。推荐用前者因为Docker容器的权限设计就是依赖PUID/PGID映射到宿主机用户统一设成1000后以后新增容器只要沿用一个模版权限问题基本都不会出现。5.5 长期运行体验与功耗实测这套服务我已经持续跑了快一年整体体验相当务实。功耗方面我用功率计实测过树莓派4B加上一块USB供电的SSD移动硬盘日常负载下功耗大约6到8W比普通笔记本低了一个数量级。按7W算一天0.168度电一个月电费大约3块多几乎无感。温度方面夏季客厅不开空调时不带风扇的铝壳散热里最高到过65度不算危险但还是偏高。后来加了一个12V风扇调到低速温度稳定在50度上下噪音也几乎没有。如果是树莓派5建议直接上官方主动散热套装别省这一点钱。网络方面只要路由器本身靠谱树莓派的千兆网口吞吐量可以跑满实际Samba复制确实能到110MB/s左右这个速度已经能顺畅播放绝大多数高码率原盘了。最后一点实际操作中的体会这套系统折腾下来如果说有一条最想分享的经验那就是别一上来就追求复杂。很多朋友问我的第一步该做什么我都建议先从 Samba 文件共享开始让全家人的数据都统一到一台设备上用顺手了再逐步加 qBittorrent、Jellyfin最后才上 Docker Compose 管理所有服务。一步一步来每加入一个服务你都能感受到它解决的真实问题而不是为了“玩技术”而堆容器。如果让我重新来一次我会直接上树莓派5 8GB 加一块 SSD 移动硬盘省去 SD 卡带来的一堆折磨4B 4GB 这套方案当然也完全够用。最后补充一个小技巧把所有服务的配置目录统一放到 /data/config 下备份时只需要打包这一个目录数据盘则单独处理。这套“配置归配置、数据归数据”的思路让整个家庭服务器在遇到任何故障时都能快速恢复这是我认为比单个服务配置更值得长期坚持的好习惯。