闲置老电脑别扔!零成本搭建家用服务器实战:Home Assistant+Minecraft+RustDesk
2026/9/22 0:51:25 网站建设 项目流程

家里那台2015年前后买的台式机,i5-4590加8G内存,装Win10都开始卡了,扔了可惜,卖二手也就两三百块。我拿它做了一件事:装成一台家用服务器,跑Home Assistant控制全屋灯光和传感器,顺便开一个Minecraft基岩版服务器给几个朋友玩,还挂了RustDesk做远程桌面中转。整套下来零硬件采购成本,功耗待机不到30瓦,7×24小时开着一个月电费也就十几块钱。这篇文章就把我从BIOS设置到系统调优再到服务部署的完整过程拆开讲,包括中间踩过的坑和最后验证下来的稳定配置。如果你手里也有闲置的老机器,或者正打算低成本搭一套自己的服务环境,下面的内容可以直接抄作业。

1. 先想清楚:老电脑做服务器到底值不值

1.1 性能账和功耗账要分开算

很多人一上来就问"我这台老机器能不能做服务器",这个问题其实要拆成两个维度来看。第一个维度是绝对性能,第二个维度是每瓦性能。家用服务器的负载特征和日常办公完全不同:它不需要瞬时爆发力,但要求长时间稳定运行,而且大部分时间处于低负载状态。一台i5-4590的PassMark分数在5000分左右,单核性能放到今天大概相当于N100的70%到80%,但多核因为四核四线程的关系反而略强于N100。对于Home Assistant这种以事件驱动为主、CPU占用常年低于5%的服务来说,性能完全过剩。

真正需要关注的是功耗。老平台的功耗控制确实不如新平台,22nm的Haswell架构在待机状态下整机功耗大概在25到35瓦之间,而同样性能的N100迷你主机可以做到8到12瓦。按每天24小时、每度电0.55元计算,老机器一年的电费大约是120到170元,N100方案大约是40到60元。差价看起来有一百多块,但如果你本来就有闲置的老机器,这笔硬件采购成本是零,而买一台N100迷你主机至少要六七百。也就是说,老机器方案大约需要四到五年才能在电费上"追平"新硬件的采购成本。对于大多数人来说,这个时间跨度已经足够长了。

注意:如果你打算跑视频转码、本地大模型推理这类持续高负载的任务,老平台的功耗会飙升到80瓦以上,这时候电费差距会迅速拉大,需要重新评估。

1.2 哪些服务适合放在老机器上

不是所有服务都适合老平台。我把自己跑过的服务按资源占用分了三类,你可以对照自己的需求来判断:

服务类型典型代表CPU占用内存占用老平台适配度
轻量常驻服务Home Assistant、AdGuard Home、RustDesk中继常年<5%200MB-1GB非常适合
中等负载服务Minecraft基岩版(4-6人)、文件同步、Git仓库峰值30-60%1-4GB适合
重负载服务视频转码、本地LLM推理、大型数据库持续80-100%8GB以上不推荐

我自己的配置是8GB内存,实际跑下来Home Assistant占600MB左右,Minecraft基岩版服务端占1.2GB,RustDesk中继占200MB,系统本身占800MB,总共不到3GB,还有大量余量。如果你要跑Docker容器,建议把内存加到16GB,因为Docker的镜像层和容器运行时本身也会吃掉不少内存。

1.3 和老平台搭配的硬盘选择

老机器通常只有SATA接口,没有M.2插槽。这时候系统盘的选择就很关键。我的建议是:系统盘用一块便宜的SATA SSD,数据盘用机械硬盘。SATA SSD的读写速度在500MB/s左右,虽然比不上NVMe,但对于系统启动和服务加载来说已经绰绰有余。我用的是某品牌240GB的SATA SSD,二手价格不到80块,装完Ubuntu Server 22.04之后还剩200GB空间,足够放Docker镜像和常用数据。

数据盘方面,如果你要存大量文件或者做媒体库,一块2TB的机械硬盘是性价比最高的选择。注意老机器的SATA接口版本可能是SATA 2.0(3Gbps),这会限制SSD的峰值速度,但实际使用中差距不明显,因为4K随机读写才是系统流畅度的关键,而SATA 2.0和3.0在4K性能上的差距远小于顺序读写。

2. BIOS设置:老平台稳定运行的第一道关

2.1 为什么服务器场景下BIOS设置和日常使用不一样

日常使用电脑时,BIOS里的大部分设置你都可以不管,默认值就能跑。但服务器场景有两个特殊需求:断电后自动恢复长时间无人值守稳定运行。这两个需求对应到BIOS里就是几个关键选项,如果没设对,轻则停电后机器不自动开机,重则系统跑着跑着就蓝屏或者死机。

我用的是一块华硕H81M主板,BIOS是AMI的UEFI版本。不同品牌的BIOS界面差异很大,但核心选项的逻辑是相通的。下面我按重要性排序,逐个说明每个选项的作用和推荐值。

2.2 断电恢复选项:AC Power Loss的处理

这个选项在不同BIOS里的叫法不一样,华硕叫"Restore AC Power Loss",技嘉叫"AC BACK",微星叫"Power Management"下的"Restore after AC Power Loss"。它的作用是:当市电恢复时,机器应该处于什么状态。有三个可选值:

  • Power Off:来电后保持关机状态,需要手动按电源键
  • Power On:来电后自动开机
  • Last State:恢复到断电前的状态

做服务器必须选Power On。我实测过一次,小区临时停电两小时,来电后机器自动启动,所有服务在90秒内全部恢复,完全不需要人工干预。如果选的是Power Off,那你就得等回到家才能手动开机,对于跑Home Assistant这种控制全屋设备的服务来说,停机两小时意味着自动化全部失效。

提示:有些老BIOS里这个选项藏在"Advanced"→"APM Configuration"下面,如果找不到,可以翻一下主板手册的PDF,搜索"AC"或"Power Loss"关键词。

2.3 硬盘模式:AHCI还是IDE

这个选项在"Storage Configuration"或"SATA Configuration"里,叫"SATA Mode Selection"。老主板默认可能是IDE模式,这是为了兼容Windows XP时代的硬盘。但做服务器必须改成AHCI,原因有两个:第一,AHCI支持NCQ(原生命令队列),可以显著提升多任务下的磁盘性能;第二,Ubuntu Server 22.04在IDE模式下虽然能启动,但会丢失一些电源管理功能,导致硬盘温度偏高。

改这个选项有一个坑:如果你之前已经在IDE模式下装了系统,直接改成AHCI会导致系统无法启动。正确的做法是先在IDE模式下进系统,修改注册表或者用工具切换驱动,然后再改BIOS。不过对于全新安装来说,直接设成AHCI就行,没有这个问题。

2.4 核显显存分配:别给太多也别给太少

老平台的核显会从系统内存里划走一部分作为显存。在BIOS的"Graphics Configuration"里有一个"DVMT Pre-Allocated"选项,通常可以选32M、64M、128M、256M等。对于服务器来说,你根本不用核显输出画面(我甚至没接显示器),所以理论上给最小的32M就行。但实测发现,如果给32M,Ubuntu Server在启动时偶尔会报"no suitable video mode"的警告,虽然不影响使用,但看着烦。给64M是最稳妥的,既不会浪费太多内存,也不会触发警告。

另外,如果你打算用RustDesk或者VNC做远程桌面,核显的2D加速还是有点用的,64M足够应付基本的桌面渲染。如果你要跑Jellyfin做硬件转码,那核显的显存分配就要给到256M以上,因为转码过程中需要较大的帧缓冲区。

2.5 风扇策略和温度监控

老平台的散热器通常比较简陋,原装散热器用久了积灰严重,风扇噪音大不说,散热效率也下降明显。BIOS里的"Q-Fan Control"或者"Smart Fan"选项可以设置风扇曲线。我的建议是:把风扇启动温度设低一点,比如40度开始转,60度全速。这样在低负载时风扇转速很低,几乎听不到声音;高负载时又能及时散热。

配合这个设置,你需要在系统里装一个温度监控工具。Ubuntu下用lm-sensors就行:

sudo apt install lm-sensors sudo sensors-detect sensors

输出里会显示CPU核心温度、主板温度、风扇转速等信息。我实测下来,i5-4590在Home Assistant加Minecraft的负载下,CPU温度稳定在45到55度之间,风扇转速在800到1200转,噪音完全可以接受。

3. 系统安装:Ubuntu Server 22.04的实战细节

3.1 为什么选Ubuntu Server而不是桌面版

很多人习惯用桌面版Linux,觉得有图形界面方便。但做服务器,桌面版是负担:GNOME桌面本身就要吃掉1GB以上的内存,还有各种后台更新和通知服务,不仅浪费资源,还会引入不必要的变量。Ubuntu Server 22.04没有图形界面,安装完内存占用只有300MB左右,而且默认开启了各种服务器优化,比如TCP BBR拥塞控制、自动安全更新等。

另一个原因是远程管理。服务器通常放在角落或者柜子里,不接显示器。Ubuntu Server默认开启SSH,装完就能用VS Code的Remote-SSH插件连上去写代码,体验和本地开发几乎一样。我现在的开发流程就是:VS Code连上服务器,直接在服务器上写Python脚本和Docker Compose文件,保存即生效,不需要来回传文件。

3.2 安装过程中的分区方案

Ubuntu Server 22.04的安装器提供了几种分区方案,我推荐手动分区,因为自动分区有时候会把大部分空间分给/home,而服务器场景下/home根本用不到那么多。我的分区方案是这样的:

挂载点大小文件系统说明
/boot/efi512MBFAT32UEFI启动分区,必须
/60GBext4系统和Docker镜像
/var40GBext4日志和容器数据
/home剩余空间ext4个人文件和项目代码
swap4GBswap交换分区,防止OOM

这里重点说两个地方。第一,/var单独分区是为了防止Docker日志把根分区撑满。Docker默认的日志驱动是json-file,如果不限制大小,一个跑得久的容器日志能涨到几个GB。把/var单独分出来,即使日志爆了也不会影响系统运行。第二,swap给4GB是因为8GB内存跑多个服务时,偶尔会有内存峰值,有swap兜底可以避免OOM Killer直接杀掉进程。

3.3 安装后的第一件事:更新和基础配置

装完系统重启后,第一件事是更新软件源并升级:

sudo apt update && sudo apt upgrade -y

然后装几个必备工具:

sudo apt install -y curl wget git vim htop net-tools

接下来配置SSH密钥登录,禁用密码登录。这一步很重要,因为服务器暴露在局域网里,密码登录有被暴力破解的风险。先在本地生成密钥对(如果还没有的话):

ssh-keygen -t ed25519 -C "server"

然后把公钥复制到服务器:

ssh-copy-id username@server-ip

最后编辑服务器的/etc/ssh/sshd_config,把PasswordAuthentication改成no,重启SSH服务。这样之后就只能用密钥登录了,安全性大幅提升。

3.4 固定IP和主机名

服务器需要一个固定的局域网IP,否则每次重启后IP变了,你的Home Assistant、Minecraft客户端都得重新配置。有两种方式:一种是在路由器里做DHCP静态绑定,另一种是在服务器上设静态IP。我推荐在路由器里绑定,因为这样服务器本身还是用DHCP,网络配置更简单,换路由器时也只需要重新绑定一次。

主机名方面,建议设一个好记的名字,比如homeserver。这样你在浏览器里访问http://homeserver:8123就能打开Home Assistant,不用记IP地址。设置方法:

sudo hostnamectl set-hostname homeserver

然后在路由器的DNS设置里把homeserver解析到服务器的IP。大多数家用路由器都支持本地DNS解析,如果没有这个功能,可以在每台设备的hosts文件里手动添加。

4. 服务部署:从Home Assistant到Minecraft的完整链路

4.1 Docker和Docker Compose的安装

我所有的服务都用Docker跑,原因是隔离性好、迁移方便、升级简单。Ubuntu Server 22.04自带的Docker版本比较老,建议用官方脚本安装最新版:

curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER

装完之后需要重新登录一次,让用户组生效。然后装Docker Compose插件:

sudo apt install -y docker-compose-plugin

验证一下:

docker compose version

注意:Docker默认的镜像存储位置在/var/lib/docker,如果你按照前面的分区方案把/var单独分了40GB,那这里不用改。如果/var空间不够,可以在/etc/docker/daemon.json里配置>version: '3' services: homeassistant: container_name: homeassistant image: ghcr.io/home-assistant/home-assistant:stable volumes: - /home/username/homeassistant:/config - /etc/localtime:/etc/localtime:ro environment: - TZ=Asia/Shanghai restart: unless-stopped network_mode: host

这里有几个关键点。第一,network_mode: host让容器直接使用宿主机的网络,这样Home Assistant才能通过mDNS发现局域网里的智能设备(比如小米、涂鸦的设备)。如果用默认的bridge网络,设备发现会失效。第二,restart: unless-stopped保证容器在系统重启后自动启动,配合前面BIOS里的Power On设置,实现完全无人值守。第三,/etc/localtime挂载进去是为了让容器时间和宿主机一致,否则自动化触发时间会错乱。

启动命令:

cd /home/username/homeassistant docker compose up -d

第一次启动会拉取镜像,大概需要几分钟。启动完成后,浏览器访问http://服务器IP:8123就能看到Home Assistant的初始化界面。按照提示创建账号、设置位置和时区,然后就可以开始添加设备了。

4.3 Minecraft基岩版服务器的搭建

Minecraft基岩版服务端我用的是itzg/minecraft-bedrock-server这个镜像,它支持自动更新和世界备份。docker-compose.yml如下:

version: '3' services: minecraft: container_name: minecraft image: itzg/minecraft-bedrock-server environment: - EULA=TRUE - GAMEMODE=survival - DIFFICULTY=normal - SERVER_NAME=My Server - SERVER_PORT=19132 - ONLINE_MODE=false ports: - "19132:19132/udp" volumes: - /home/username/minecraft:/data restart: unless-stopped

这里ONLINE_MODE=false是为了让没有正版账号的朋友也能进来,如果你只和正版玩家玩,可以设成trueSERVER_PORT默认是19132,UDP协议,记得在路由器里做端口转发(如果你想让外网的朋友也能连进来的话)。

启动之后,用Minecraft客户端添加服务器,地址填服务器的局域网IP,端口19132,就能连上了。我实测i5-4590跑4到6人的基岩版服务器,TPS稳定在20,完全没有卡顿。内存占用在1.2GB左右,CPU占用峰值40%。

4.4 RustDesk自建中继服务器的配置

RustDesk是一个开源的远程桌面工具,自建中继服务器可以避免走公共服务器带来的延迟和隐私问题。它有两个组件:hbbs(信令服务器)和hbbr(中继服务器)。docker-compose.yml如下:

version: '3' services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs volumes: - /home/username/rustdesk:/root network_mode: host restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr volumes: - /home/username/rustdesk:/root network_mode: host restart: unless-stopped

启动后,RustDesk客户端里配置ID服务器为服务器的局域网IP,中继服务器也填同样的IP,就能走自建中继了。实测局域网内远程桌面延迟在10ms以内,外网通过端口转发后延迟在30到50ms,比公共服务器稳定得多。

5. 稳定性调优:让老机器7×24小时不宕机

5.1 关闭不必要的系统服务

Ubuntu Server默认启动了一些服务器场景用不到的服务,比如snapdModemManagerbluetooth等。关掉它们可以释放内存和CPU,减少潜在的不稳定因素。查看当前运行的服务:

systemctl list-units --type=service --state=running

我关掉的服务包括:

sudo systemctl disable --now snapd sudo systemctl disable --now ModemManager sudo systemctl disable --now bluetooth sudo systemctl disable --now cups

关掉snapd之后,snap命令就不能用了,但服务器场景下你基本不会用到snap包,所以影响不大。cups是打印服务,服务器不需要打印,直接关掉。

5.2 日志管理和磁盘空间监控

前面提到Docker日志可能撑满磁盘,除了分区隔离,还要在Docker层面限制日志大小。编辑/etc/docker/daemon.json

{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }

这样每个容器的日志最多占30MB(10MB×3个文件),不会无限增长。改完之后重启Docker:

sudo systemctl restart docker

另外,系统日志也要管理。journald默认会占用最多10%的磁盘空间,对于40GB的/var分区来说就是4GB,可以接受。如果你想更激进地限制,编辑/etc/systemd/journald.conf,设置SystemMaxUse=500M

5.3 温度监控和自动告警

老平台的散热是个隐患,尤其是夏天。我写了一个简单的脚本,每5分钟检查一次CPU温度,如果超过75度就通过Home Assistant发送通知:

#!/bin/bash TEMP=$(sensors | grep 'Core 0' | awk '{print $3}' | tr -d '+°C') if [ "$TEMP" -gt 75 ]; then curl -X POST http://localhost:8123/api/webhook/overheat_alert fi

把这个脚本加到crontab里:

*/5 * * * * /home/username/check_temp.sh

然后在Home Assistant里创建一个Webhook自动化,收到请求后给手机推送通知。这样即使你不在家,也能第一时间知道服务器温度异常。

5.4 定期备份策略

服务器上的数据分两类:一类是配置数据(Home Assistant的配置、Minecraft的世界存档),另一类是系统本身。配置数据我用rsync每天凌晨3点备份到外接硬盘:

rsync -av --delete /home/username/homeassistant /mnt/backup/ rsync -av --delete /home/username/minecraft /mnt/backup/

系统本身不需要频繁备份,因为重装一次也就半小时。但我会把Docker Compose文件和关键配置放在Git仓库里,这样即使系统盘挂了,换一块新盘重装系统后,git clone下来就能恢复所有服务。

6. 实测数据与常见问题排查

6.1 一个月运行数据记录

我从部署完成到现在跑了一个月,记录了一些关键数据:

指标数值说明
平均待机功耗28W所有服务运行但无客户端连接
峰值功耗52WMinecraft 6人同时在线
月耗电量约20度按30天计算
月电费约11元按0.55元/度
CPU平均温度48°C室温26°C
内存占用2.8GB/8GB所有服务合计
系统盘占用18GB/60GB含Docker镜像
连续运行时间30天无重启、无宕机

这个数据说明老平台做家用服务器是完全可行的。功耗和电费都在可接受范围内,稳定性也经得起考验。

6.2 常见问题:BIOS里识别到硬盘但PE看不到

这是老平台装系统时最常见的问题之一。原因通常是BIOS里的SATA模式设成了RAID或者Intel RST,而PE系统里没有对应的驱动。解决方法很简单:进BIOS把SATA模式改成AHCI,保存重启后再进PE就能看到硬盘了。如果改完AHCI后进PE还是看不到,检查一下硬盘的数据线和电源线是否插紧,老机器的SATA接口容易氧化,拔下来用橡皮擦擦一下金手指再插回去。

6.3 常见问题:Ubuntu安装时黑屏但底部有两个小图标

这个现象通常出现在用U盘安装Ubuntu Server的时候,原因是安装器尝试用图形模式启动但核显不支持。解决方法是在启动菜单里选择"Install Ubuntu Server"后按e编辑启动参数,在linux那一行的末尾加上nomodeset,然后按F10启动。这样安装器会用基本的VESA模式显示,虽然分辨率低一点,但能正常完成安装。

6.4 常见问题:Docker容器启动后无法访问

先检查容器是否真的在运行:

docker ps -a

如果状态是Exited,看日志:

docker logs 容器名

常见原因有三个:端口被占用、配置文件路径错误、权限不足。端口占用可以用netstat -tulpn | grep 端口号查看。配置文件路径错误通常是挂载的宿主机目录不存在或者权限不对,用ls -la检查一下。权限不足的话,把目录所有者改成当前用户:

sudo chown -R $USER:$USER /home/username/服务目录

6.5 常见问题:Minecraft服务器外网连不上

局域网能连但外网连不上,99%是端口转发没做对。基岩版用的是UDP 19132端口,很多路由器在端口转发页面默认只转发TCP,需要手动把协议改成UDP或者"TCP+UDP"。另外,如果你的宽带没有公网IP(现在很多家宽都是大内网),那端口转发也没用,需要用内网穿透工具。这种情况下可以考虑用RustDesk的中继服务器做转发,或者用其他内网穿透方案。

6.6 一个容易被忽略的细节:时间同步

服务器的时间必须准确,否则Home Assistant的自动化会在错误的时间触发,Minecraft的日志时间也会乱。Ubuntu Server默认用systemd-timesyncd做时间同步,但有时候会因为网络问题同步失败。我建议手动检查一下:

timedatectl status

如果显示System clock synchronized: no,可以手动指定一个国内的时间服务器:

sudo timedatectl set-ntp true

然后在/etc/systemd/timesyncd.conf里把NTP改成ntp.aliyun.com或者cn.pool.ntp.org,重启服务:

sudo systemctl restart systemd-timesyncd

这个细节看起来小,但实际影响很大。我之前有一次Home Assistant的自动化在凌晨3点触发,结果因为时间偏差了15分钟,把家人吵醒了。从那以后我就养成了检查时间同步的习惯。

7. 后续可以继续折腾的方向

这套配置跑了一个月之后,我又陆续加了一些东西。比如用AdGuard Home做全屋DNS过滤,拦截广告和追踪域名,效果比浏览器插件好得多,因为它在网络层就拦掉了,手机App里的广告也能过滤。还加了Uptime Kuma做服务监控,每个容器是否在线、响应时间多少,一目了然,服务挂了会通过邮件和微信通知。

如果你对本地AI感兴趣,老平台跑大语言模型确实吃力,但跑一些小的推理任务还是可以的。比如用ollama跑一个3B参数左右的模型做文本分类或者简单的问答,i5-4590加8GB内存勉强能跑,但速度比较慢,大概每秒3到5个token。如果你有16GB内存,可以试试7B量化的模型,速度会好一些。

另外,如果你有多个老机器,可以考虑做服务器集群。比如一台跑Home Assistant和DNS,另一台跑Minecraft和文件服务,通过内网互联。这样单台机器的负载更低,稳定性更好。不过对于大多数家庭场景来说,一台就够用了,没必要为了集群而集群。

最后说一个我踩过的坑:老机器的CMOS电池如果没电了,每次断电后BIOS设置都会恢复默认,包括你设的Power On和AHCI模式。表现就是停电后机器不自动开机,或者开机后找不到硬盘。换一颗CR2032纽扣电池就能解决,成本两块钱。这个坑很隐蔽,因为平时不断电根本发现不了,等到真停电的时候就抓瞎了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询