结论: 家庭服务器不要先买机器,先定用途。影音、网盘、智能家居、下载、Git 五类用途对资源的需求差异极大;硬件上低功耗迷你主机(N100 级,6~20 W)是多数家庭的最优解,系统统一用 Ubuntu Server 24.04 + Docker Compose 管理,外网访问按"IPv6 > 穿透 > 端口映射"的顺序选择。
引言:家庭服务器和"买个 NAS"不是一回事
很多人对家庭服务器的印象停留在"买台成品 NAS 存照片"。但 2026 年的家庭数字化需求早已超出存储:想给电视装一个自己的影音库、想把手机照片自动备份到家里、想让智能灯和空调不依赖云厂商、想有个 7×24 的下载机、想给自己搭个私人 Git 仓库。这些需求叠加起来,一台纯 NAS 要么做不到,要么授权费用不低。
家庭服务器(Home Server / Home Lab)的本质是一台常年开机、统一管理家庭数据与服务的小机器。它的难点不在技术门槛——Docker 已经把部署门槛降得很低——而在方案设计:先买机器再想干什么,几乎必然买错。本文按"用途矩阵 → 硬件方案对比 → 功耗测算 → 外网访问 → 备份与 UPS → docker-compose 落地"的顺序,给出一套可直接照抄的方案设计方法。
先定用途:家庭服务器用途与资源需求矩阵
先给结论:用途决定配置,而不是反过来。下面这张矩阵表列出五类最常见用途的资源需求,你可以按自己要跑的服务把需求叠加,得出最终配置。
| 用途 | 典型软件 | CPU 需求 | 内存需求 | 存储需求 | 是否需硬解 | 优先级 |
|---|---|---|---|---|---|---|
| 影音中心 | Jellyfin / Plex / Emby | 需支持 Intel QSV 或独显硬解,N100 级即可 | 2~4 GB | 影视库 2~8 TB(HDD) | 强烈建议 | 高 |
| 私人网盘 | Nextcloud / Seafile | 2 核足够,照片索引时吃 CPU | 2~4 GB | 500 GB~4 TB(SSD 更舒适) | 否 | 高 |
| 智能家居中枢 | Home Assistant | 2 核,瞬时峰值高 | 2~4 GB | 32~64 GB | 否 | 中 |
| 下载机 | qBittorrent / Aria2 / Transmission | 2 核,做种时 IO 敏感 | 1~2 GB | 2~8 TB(HDD) | 否 | 中 |
| 私人 Git / 代码仓库 | Gitea / GitLab CE | Gitea 1~2 核;GitLab 4 核起 | Gitea 1~2 GB;GitLab 4~8 GB | 50~200 GB | 否 | 中 |
| 家庭 DNS / 广告过滤 | AdGuard Home / Pi-hole | 1 核 | 512 MB~1 GB | 8~16 GB | 否 | 高(推荐) |
| 家庭监控录像 | Frigate NVR | 需硬解 + 可选 Coral TPU | 4~8 GB | 2~8 TB(高写入) | 必须 | 中 |
| 密码库 / 个人看板 | Vaultwarden / Homepage | 1 核 | 512 MB~1 GB | 8~16 GB | 否 | 低 |
需求叠加示例:
- 影音 + 网盘 + DNS(最常见组合):CPU 需带核显(N100/N305 或 Intel 10 代以上),内存 8 GB,存储 1 块 512 GB SSD(系统与容器) + 1 块 4 TB HDD(影视与备份)。
- 全都要:CPU 4~8 核带核显,内存 16 GB,存储 1 TB SSD + 8 TB HDD,预算与功耗同步上升。
- 只要文件备份与照片同步:2 核 4 GB + 2 TB 存储即可,甚至树莓派级别都能跑,但机械盘 IO 会成为瓶颈,建议至少上 SATA SSD。
选型红线:
- 需要转码影音就必须有硬件编码:Intel Quick Sync(QSV)是家庭场景的最优解,N100、N305 及 10 代以上酷睿核显都支持。纯软解转码一路 1080p 就要吃掉 4~6 核,家庭机器扛不住。
- 内存宁可多 4 GB:Docker 服务越加越多,4 GB 很快见底,8 GB 是 2026 年的舒适线。
- 系统盘与数据盘分开:系统盘用 SSD(256~512 GB),数据盘用大容量 HDD 做冷存储。
硬件方案对比:迷你主机 / 成品 NAS / 软路由 / 旧电脑
先给结论:多数家庭选"低功耗 x86 迷你主机 + 外接硬盘柜"最划算;成品 NAS 胜在省心与售后,软路由适合网络玩家,旧电脑只在电费不敏感时划算。
| 方案 | 代表配置 | 价格区间(截至 2026 年,以官网实时报价为准) | 功耗 | 扩展性 | 噪音 | 适合人群 |
|---|---|---|---|---|---|---|
| x86 迷你主机(N100/N305) | 4~8 核 / 16 GB / 512 GB SSD | 约 800~2500 元 | 6~25 W | 中(USB/双网口,硬盘位少) | 20~30 dB | 首选,绝大多数家庭 |
| 成品 NAS(2~4 盘位) | 双核~四核 / 4~8 GB | 约 2000~8000 元(不含盘) | 15~45 W | 高(多盘位、RAID) | 25~35 dB | 重视存储与售后、不愿折腾 |
| 软路由 + 虚拟化 | N100/N305 多网口 / 8~16 GB | 约 600~2000 元 | 8~25 W | 中(网络强、存储弱) | 20~30 dB | 想同时做路由、旁路由、科学组网 |
| 旧电脑 / 旧笔记本 | i5 6~10 代 / 8~16 GB | 0(已有) | 40~120 W | 高(可加多块硬盘) | 35~45 dB | 已有闲置机器且不在意电费 |
| ARM 单板电脑 | 4~8 核 / 4~8 GB | 约 300~800 元 | 3~10 W | 低(IO 瓶颈) | 静音 | 只跑轻量服务、智能家居 |
方案要点:
- 迷你主机不是 NAS 的替代品,而是更灵活的上位替代。用迷你主机 + Docker 可以跑 Jellyfin + Nextcloud + Home Assistant,而同价位成品 NAS 的 CPU 往往带不动多路转码。
- 成品 NAS 的真正价值在"存储可靠性 + 系统省心 + 手机 App 体验"。如果你最在意家人也能方便使用、且不愿维护 Linux,成品 NAS 值得多花钱。
- 软路由做家庭服务器需要取舍:多网口很强,但硬盘位通常只有 1~2 个,且一旦路由器上的服务崩了会影响全家网络。建议"软路由专职路由,另配一台跑服务"。
- 旧电脑的最大成本是电费:以 80 W 平均功率、0.6 元/度计算,一年约 420 元电费,三年就够买一台 N100 迷你主机了。
功耗与电费怎么测算?
先给结论:家庭服务器是常年开机的设备,买之前先算三年的"机器价格 + 电费",再决定方案。
日耗电量(度) = 平均功率(W) × 24 ÷ 1000
年耗电量(度) = 平均功率(W) × 24 × 365 ÷ 1000 = 平均功率 × 8.76
年电费(元) = 年耗电量 × 电价 (居民电价常见 0.5~0.8 元/度,阶梯电价需按实际)
三年总拥有成本 = 机器价格 + 硬盘价格 + 年电费 × 3| 设备 | 平均功率 | 年耗电 | 年电费(0.6 元/度) | 三年电费 |
|---|---|---|---|---|
| ARM 单板电脑 | 5 W | 43.8 度 | 26 元 | 79 元 |
| N100 迷你主机 | 13 W | 113.9 度 | 68 元 | 205 元 |
| N305 迷你主机(高负载) | 25 W | 219 度 | 131 元 | 394 元 |
| 成品 NAS(2 盘位) | 25 W | 219 度 | 131 元 | 394 元 |
| 成品 NAS(4 盘位) | 45 W | 394 度 | 237 元 | 710 元 |
| 旧笔记本 | 30 W | 262.8 度 | 158 元 | 474 元 |
| 旧台式机(i5 + 2 HDD) | 80 W | 700.8 度 | 420 元 | 1261 元 |
实测与降耗建议:
# 1. 有条件的用功率计实测(最准),或用软件估算
sudo apt install -y lm-sensors && sudo sensors-detect --auto
sensors # 看 CPU 功耗相关的 power 项(部分平台支持)
# 2. 查看硬盘是否休眠(避免机械盘 24 小时空转)
sudo hdparm -C /dev/sdb # 输出 active/idle 或 standby 表示已休眠
# 3. 设置机械盘 10 分钟无访问后休眠
sudo hdparm -S 120 /dev/sdb
# 持久化:/etc/hdparm.conf 写入
# /dev/sdb { spindown_time = 120 }
# 4. 开启 CPU 节能模式(ondemand / powersave)
sudo apt install -y cpufrequtils
echo 'GOVERNOR="powersave"' | sudo tee /etc/default/cpufrequtils
sudo systemctl restart cpufrequtils
cpufreq-info | grep -i 'current policy'- 机械盘休眠能省 5~8 W,但也意味着影音首次访问会有 5~10 秒的起转延迟,按使用习惯取舍。
- 别用独显:一张闲置独显空载就能增加 10~30 W。
- 避开阶梯电价高档位:如果家庭用电已在高档位,边际电价更高,低功耗设备的回收期更短。
外网访问:家庭服务器的三种方案怎么选
先给结论:优先级是 IPv6 直连 > 内网穿透(frp 等) > 路由器端口映射。家用宽带通常没有固定公网 IPv4 且 80/443 端口被运营商封锁,所以"直接映射"往往是三条路里最不靠谱的一条。
| 方案 | 前提条件 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|---|
| IPv6 + DDNS | 家宽分配 IPv6,访问端也支持 IPv6 | 直连、延迟低、不限端口、零成本 | 部分网络(公司/手机流量)不支持 IPv6 | ★★★★★ |
| 内网穿透(frp / 商业穿透) | 一台有公网 IP 的云服务器或商业服务 | 通用、不受 CGNAT 影响、可绑域名 | 中转增加延迟,带宽受限于中转机 | ★★★★ |
| VPN 组网 | 需中转服务器或公网 | 最安全,等于"远程回到家里" | 需在每个设备安装客户端 | ★★★★ |
| 路由器端口映射 | 有公网 IPv4 且端口未被封 | 直连、延迟最低 | 多数家宽不满足条件,且暴露端口风险高 | ★★ |
# 1. 先确认自己有没有 IPv6
ip -6 addr show scope global
curl -s -6 ifconfig.me
# 2. 确认是否有公网 IPv4(两个值不一致即为 CGNAT,端口映射无效)
curl -s -4 ifconfig.me
ip route get 1.1.1.1 | awk '{print $7; exit}'
# 3. IPv6 防火墙要单独放行(ufw 默认不管理 IPv6,需确认 /etc/default/ufw 中 IPV6=yes)
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow from 192.168.1.0/24 to any port 2222 proto tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
sudo ufw status verbose
# 4. IPv6 的 DDNS:给域名加 AAAA 记录(脚本逻辑同 A 记录,用 curl -6 ifconfig.me 取地址)
curl -s -6 ifconfig.me安全红线:
- 不要把数据库、管理后台、SSH 直接暴露到公网。自己远程访问优先用 VPN 组网;必须暴露的服务一律配 HTTPS + 强认证。
- 只放行必要的端口,用完即关。
- 开启自动更新与 fail2ban:家庭服务器常年在线,是最容易被自动化扫描盯上的目标。
数据备份与 UPS:家庭服务器最容易被忽略的部分
先给结论:家庭服务器的硬盘一定会坏,市电一定会停,所以在装完服务之前就要把备份和 UPS 想清楚,而不是等数据丢了再补救。
备份策略(3-2-1 原则):
- 3 份副本:主数据 + 本地备份 + 异地备份。
- 2 种介质:例如 SSD 主盘 + HDD 备份盘,或本机 + 对象存储。
- 1 份异地:家人的机器、另一处住所、或云对象存储(几十 GB 的月成本通常在几元到几十元量级)。
# 用 restic 做加密增量备份到本地盘 + 对象存储
sudo apt install -y restic
export RESTIC_PASSWORD='换成强密码'
export B2_ACCOUNT_ID='...' # 或 S3/OSS 对应的环境变量
restic init --repo /mnt/backup/restic-repo
restic -r /mnt/backup/restic-repo backup /srv/appdata /srv/media --tag home
# 保留策略:7 天/5 周/12 月
restic -r /mnt/backup/restic-repo forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune
# 定时:每天凌晨 4 点
echo '0 4 * * * RESTIC_PASSWORD="..." /usr/bin/restic -r /mnt/backup/restic-repo backup /srv/appdata --tag home' \
| sudo tee /etc/cron.d/restic-backup
# 定期校验(备份没验证过等于没备份)
restic -r /mnt/backup/restic-repo check --read-data-subset=10%# 数据库类容器备份前先导出,不要直接拷数据库文件
docker exec nextcloud-db mysqldump -u nextcloud -p"$MYSQL_PASSWORD" --single-transaction nextcloud \
| gzip > /srv/backup/nextcloud-$(date +%F).sql.gz
# 整机快照(有条件的用文件系统快照,如 btrfs)
sudo btrfs subvolume snapshot /srv /srv/.snapshots/$(date +%F)UPS 与电力保护:
- 配一台入门级 UPS(约 300~800 元),能给服务器与路由器/光猫提供 10~30 分钟续航,避免突然断电导致文件系统损坏。
- UPS 通过 USB 接服务器,用 NUT 实现自动关机:市电中断且电量低时自动安全关机,来电后自动开机(需在 BIOS 中开启"断电恢复后开机")。
- 路由器和光猫也要接 UPS,否则停电后服务器还活着但网络断了,远程管理一样失联。
用 docker-compose 统一管理家庭服务
先给结论:家庭服务器的服务管理强烈建议全部容器化,用一个 /srv/docker 目录 + 多个 compose 文件统一管理。重装系统时只要恢复目录 + docker compose up -d,几小时内就能全部复原。
# 1. 安装 Docker(Ubuntu 24.04)
sudo apt update && sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER && newgrp docker
docker version
# 2. 建立统一目录结构
sudo mkdir -p /srv/{appdata,media,backup,docker}
sudo chown -R $USER:$USER /srv一个包含影音、网盘、DNS 三件套的 docker-compose.yml 示例:
services:
# 影音中心:Jellyfin,挂载 /dev/dri 使用 Intel 核显硬解
jellyfin:
image: jellyfin/jellyfin:10.10.7
container_name: jellyfin
user: "1000:1000"
network_mode: host
volumes:
- /srv/appdata/jellyfin/config:/config
- /srv/appdata/jellyfin/cache:/cache
- /srv/media:/media:ro
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
# 私人网盘:Nextcloud + MariaDB + Redis
nextcloud-db:
image: mariadb:11.4
container_name: nextcloud-db
volumes:
- /srv/appdata/nextcloud/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "${NC_DB_ROOT}"
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: "${NC_DB_PASS}"
restart: unless-stopped
nextcloud-redis:
image: redis:7-alpine
container_name: nextcloud-redis
command: ["redis-server", "--save", "60", "1"]
restart: unless-stopped
nextcloud:
image: nextcloud:31-apache
container_name: nextcloud
depends_on:
- nextcloud-db
- nextcloud-redis
ports:
- "8081:80"
volumes:
- /srv/appdata/nextcloud/html:/var/www/html
- /srv/media/share:/var/www/html/data/share
environment:
MYSQL_HOST: nextcloud-db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: "${NC_DB_PASS}"
REDIS_HOST: nextcloud-redis
restart: unless-stopped
# 家庭 DNS 广告过滤
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
ports:
- "3000:3000/tcp" # 首次初始化向导
- "5353:53/tcp"
- "5353:53/udp"
volumes:
- /srv/appdata/adguard/work:/opt/adguardhome/work
- /srv/appdata/adguard/conf:/opt/adguardhome/conf
restart: unless-stopped配套运维命令:
# 用 .env 管理密码(不要写进 compose 文件)
cat > /srv/docker/.env <<'EOF'
NC_DB_ROOT=换成强密码
NC_DB_PASS=换成强密码
EOF
chmod 600 /srv/docker/.env
cd /srv/docker
docker compose config # 校验配置
docker compose up -d # 启动全部服务
docker compose ps
docker compose logs -f jellyfin
# 更新镜像(家庭服务器建议每月一次,并保留旧镜像以便回滚)
docker compose pull
docker compose up -d
# 资源观测,找出吃内存/CPU 的容器
docker stats --no-stream目录约定建议:/srv/appdata/<服务名>/ 放配置与状态数据(必须备份),/srv/media/ 放影音与大文件(可按重要性决定是否备份),/srv/backup/ 放备份产物。这样备份时只需打包 /srv/appdata,体积小、恢复快。
企业QQ咨询




