家庭服务器搭建方案

结论: 家庭服务器不要先买机器,先定用途。影音、网盘、智能家居、下载、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 / Seafile2 核足够,照片索引时吃 CPU2~4 GB500 GB~4 TB(SSD 更舒适)否高
智能家居中枢Home Assistant2 核,瞬时峰值高2~4 GB32~64 GB否中
下载机qBittorrent / Aria2 / Transmission2 核,做种时 IO 敏感1~2 GB2~8 TB(HDD)否中
私人 Git / 代码仓库Gitea / GitLab CEGitea 1~2 核;GitLab 4 核起Gitea 1~2 GB;GitLab 4~8 GB50~200 GB否中
家庭 DNS / 广告过滤AdGuard Home / Pi-hole1 核512 MB~1 GB8~16 GB否高(推荐)
家庭监控录像Frigate NVR需硬解 + 可选 Coral TPU4~8 GB2~8 TB(高写入)必须中
密码库 / 个人看板Vaultwarden / Homepage1 核512 MB~1 GB8~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 GB0(已有)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 迷你主机了。

功耗与电费怎么测算?

先给结论:家庭服务器是常年开机的设备,买之前先算三年的"机器价格 + 电费",再决定方案。

text
日耗电量(度) = 平均功率(W) × 24 ÷ 1000
年耗电量(度) = 平均功率(W) × 24 × 365 ÷ 1000 = 平均功率 × 8.76
年电费(元)   = 年耗电量 × 电价    (居民电价常见 0.5~0.8 元/度,阶梯电价需按实际)
三年总拥有成本 = 机器价格 + 硬盘价格 + 年电费 × 3
设备平均功率年耗电年电费(0.6 元/度)三年电费
ARM 单板电脑5 W43.8 度26 元79 元
N100 迷你主机13 W113.9 度68 元205 元
N305 迷你主机(高负载)25 W219 度131 元394 元
成品 NAS(2 盘位)25 W219 度131 元394 元
成品 NAS(4 盘位)45 W394 度237 元710 元
旧笔记本30 W262.8 度158 元474 元
旧台式机(i5 + 2 HDD)80 W700.8 度420 元1261 元

实测与降耗建议:

bash
# 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 且端口未被封直连、延迟最低多数家宽不满足条件,且暴露端口风险高★★
bash
# 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 的月成本通常在几元到几十元量级)。
bash
# 用 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%
bash
# 数据库类容器备份前先导出,不要直接拷数据库文件
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,几小时内就能全部复原。

bash
# 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 示例:

yaml
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

配套运维命令:

bash
# 用 .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,体积小、恢复快。