我的家庭实验室架构 | 一台二手服务器跑出小公司的开发环境
系列导览 ▏本文是「家庭实验室从零到一」系列的第 0 篇,介绍整体架构、硬件选型与设计原则。后续 5 篇会逐一深挖每个组件的安装与配置。
卷首:为什么不用云?
我是一个 SaaS 团队的技术合伙人,公司业务跑在某公有云。但有几件事让我决定在家里搭一套实验室:
- 开发环境长期跑着会很贵:测试数据库、Redis、Jenkins、Harbor、消息队列……7×24 烧云费,一年下来够买几代服务器
- 学习/试错有成本焦虑:在云上点错一下子可能就是几百块,本地随便玩
- 私有数据更想留在本地:图纸、合同、客户资料、内部文档——上云方便,但你永远在帮别人维护信任
- 想跑一些"不那么主流"的服务:自托管 LLM、Web3 节点、私人云盘——这些云上要么贵要么不让
于是我用一台二手服务器,在家里搭了这套架构。不是为了取代云,而是补齐云做不到 / 做得贵的事。
一、硬件配置思路(性价比导向,二手机器)
不展开具体型号(你按预算选即可),核心思路:
| 组件 | 选择档次 | 关键考量 |
|---|---|---|
| CPU | 双路服务器级 / 多核多线程优先 | 多核并发,单核性能不重要 |
| 内存 | 大容量 ECC 内存(128GB 起) | VM/容器多,内存是第一瓶颈 |
| 系统盘 | NVMe SSD(≥ 1TB) | 装系统 + VM 镜像 |
| 数据盘 | SATA HDD(≥ 4TB) | 冷数据 / 媒体库 / 备份目标 |
| GPU | 入门独立显卡 | NAS 硬解 / 未来跑小模型 |
| 主板 | 服务器/工作站板,支持 IOMMU/VT-d(重要) | 否则没法直通 |
| 电源 | 750W 金牌+ | |
| 噪音 | 客厅/书房需可接受 | 涡轮风扇换静音、机箱加棉 |
整机预算:完全可以控制在「同性能新机」的 1/3 ~ 1/2。
我的诉求是多任务并发 + 大内存,不是单核高性能,所以二手洋垃圾完美。如果你跑游戏 / 视频剪辑,方向相反,请买消费级。
二、整体架构
┌──────────────────────────────────────────────────────────────────┐
│ 物理机 PVE Host │
│ - Proxmox VE 9.x │
│ - 双路 CPU + 大内存 + NVMe + HDD + GPU │
│ │
│ ├── LXC #1 代理网关 │
│ │ 功能: 全屋 HTTP/SOCKS 代理出口 │
│ │ │
│ ├── LXC #2 Tailscale Subnet Router │
│ │ 功能: 异地访问家里所有服务,免端口转发 │
│ │ │
│ ├── VM NAS │
│ │ 配置: 中等 CPU/内存 + 数据盘直通 │
│ │ 功能: 团队共享存储、媒体库、备份目标 │
│ │ │
│ └── VM Dev-Server │
│ 配置: 大 CPU/内存配额 │
│ 功能: 运维面板、CI/CD、数据库、应用服务 │
└──────────────────────────────────────────────────────────────────┘2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
网络规划建议:
家庭实验室建议为虚拟机和容器单独划一个网段(比如 192.168.X.0/24,X 自己定),避免和家用设备(手机、电视、IoT)IP 段冲突。具体怎么划分见后续 PVE 装机篇。
三、为什么这样切?设计原则
原则 1:物理 → 虚拟 → 容器,三层隔离
PVE 是 hypervisor(裸金属虚拟化),上面跑 VM 和 LXC 容器:
- VM:完全虚拟化,隔离强,性能稍弱(适合 NAS、开发环境这种长期运行 + 配置复杂的服务)
- LXC:内核共享,启动秒级,性能接近原生(适合代理、中继这种轻量长期任务)
为什么要分?不同生命周期、不同重启频率、不同资源画像的东西,物理上要分开:
- 代理服务挂了,不能影响 NAS
- 重装开发环境,不能动 NAS 数据
- NAS 升级,不能影响异地访问
原则 2:每个组件单一职责
代理 LXC: 只做代理
Tailscale LXC: 只做异地中继
NAS VM: 只做存储
Dev VM: 只做开发环境2
3
4
诱惑是"反正都有了,多加一个服务也无所谓"。但单一职责让每个组件可独立维护、独立备份、独立销毁重建。我的 dev VM 已经重建过几次(学新东西踩坑),但 NAS VM 始终如一。
原则 3:网络平面化,IP 段语义清晰
按角色分段,IP 段自带语义:
X.X.X.1 家用路由器
X.X.X.10 PVE Host(本体)
X.X.X.11~19 LXC 容器
X.X.X.20~29 NAS 类 VM
X.X.X.30~39 开发类 VM
X.X.X.40~49 预留扩展2
3
4
5
6
通过 IP 一眼看出角色。比 DNS 好用,因为 DNS 还要维护,IP 段是"自解释"的。
原则 4:能直通就直通
- 数据盘 HDD:物理直通给 NAS VM(不走 PVE 存储池),性能损失最小
- GPU:物理直通给需要的 VM(视频硬解 / GPU 计算)
- 网卡:千兆共用就行,没必要直通(瓶颈通常在外网带宽)
直通损失虚拟化的灵活性(迁移、快照),但换来接近原生的性能。对于核心数据存储和 GPU 加速,绝对值得。
原则 5:远程访问走 Tailscale,不动路由器
家用宽带没公网 IP 是常态,常规方案是搞 DDNS + 端口转发,或者打洞(NAT 穿透)。
我选 Tailscale Subnet Router:
- 装在 LXC 容器里,零侵入
- 把整个家里网段暴露给 Tailscale
- 异地通过任何设备 + Tailscale 客户端,直接访问家里所有 IP
- 加密走 WireGuard,安全
- 免费额度对个人 / 小团队足够(最多 100 设备)
最大好处:路由器配置完全不动,免端口转发,不暴露公网。
四、组件角色(每个都会单独深挖)
代理 LXC(全屋科学上网)
职责:家里所有需要访问境外资源的设备 / 服务,统一指向这个容器。
为什么单独搞:
- Docker 拉镜像、npm/pip 装依赖、AI 工具用 OpenAI API——这些都需要稳定代理
- 在每个 VM 里装代理客户端不现实(升级麻烦、互相干扰)
- 中心化一个代理服务,所有 VM 通过
http_proxy=http://<代理 LXC IP>:7890即可
详细安装见本系列「LXC 篇 - 全屋代理」。
Tailscale LXC(异地访问)
职责:让你在公司、咖啡厅、出差路上,能直接访问家里的所有服务。
实现:Tailscale 客户端 + Subnet Router 模式(暴露整个家庭网段)。
详细安装见本系列「LXC 篇 - Tailscale 异地中继」。
NAS VM(存储与团队协作)
职责:
- 团队共享文件夹(按部门权限)
- 个人备份目标(Mac / Windows / 手机自动备份)
- 媒体库(电影 / 剧集)
- PVE 自动备份目标(VM 快照备份到这里)
- 网盘同步本地
选型逻辑(不绑定具体产品):
- 国产 / 汉化好的:fnOS、绿联 UGOS、极空间 ZSpace 等
- 老牌专业:TrueNAS、Synology DSM(黑群晖有合规风险)
- DIY 派:OpenMediaVault、纯 Samba + Cockpit
我选了「国产 + btrfs 支持 + Docker 应用市场 + UI 友好」这一类。家人能用是硬指标。
详细安装见本系列「NAS VM 篇」。
Dev-Server VM(开发环境)
职责:
- 运维面板(管 MySQL / Redis / Nginx 等"传统"服务)
- CI/CD(构建 + 部署)
- 容器引擎(Docker,跑应用容器)
- 数据库(业务数据库的开发副本)
- 内部服务(自托管博客、Wiki、监控等)
为什么独立 VM 而不是直接装在 PVE Host 上:
- PVE Host 应该极简,只负责 hypervisor 工作
- 开发环境会经常装 / 卸 / 试新东西,污染面大,独立 VM 重建容易
- 资源限制防止吃光宿主资源
详细安装见本系列「Dev-Server VM 篇」。
五、踩过的坑(写在前面)
坑 1:BIOS IOMMU 开了但没生效
直通必须开 VT-d / IOMMU。BIOS 开了之后还要在 PVE 的 GRUB 里加内核参数:
# /etc/default/grub
# Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD CPU 用
# GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
# 改完执行
update-grub && reboot2
3
4
5
6
7
8
9
不加这个,PVE 看不到设备的 IOMMU 分组,直通失败。验证:
dmesg | grep -i iommu
# 应该看到 "IOMMU enabled" 之类的字样2
坑 2:HDD 直通模式选错
PVE 直通有两种:
- 磁盘直通:把整个磁盘当虚拟磁盘传过去,VM 看到的是 SCSI 设备(推荐,通用性好)
- PCI 直通:直通整个 SATA 控制器,性能稍好但要额外的 SATA 卡
我用第一种,足够。
坑 3:NAS 默认文件系统不是 btrfs
很多 NAS 系统默认创建 ext4 存储池。第一次创建一定选 btrfs:
- 元数据 DUP(双份,硬盘扇区损坏不丢元数据)
- 快照(Time Machine 风格)
- 透明压缩(zstd,节省空间)
- 数据完整性校验(CRC)
ext4 全都没有。后期改文件系统等于重建存储池,初次设置就一步到位。
坑 4:NAS 共享后,子文件夹默认权限不对
很多 NAS 系统创建共享文件夹时,默认让所有用户能读。如果你建「财务」「人事」之类的敏感目录,记得逐个设置部门权限:
- 财务 → 仅财务部 + 老板可读写
- 人事 → 仅 HR + 老板可读写
- 公共 → 全员读写
- 各部门资料 → 该部门读写,其他部门只读或不可见
权限错了,泄密只是时间问题。
坑 5:dev-server 上一次性装太多软件,相互影响
我第一次搭 dev VM 时,一鼓作气装了运维面板 + Docker + Jenkins + 各种语言 SDK……结果某次升级 Docker 导致 Jenkins 容器异常,排查半天。
教训:每装一个核心服务,先快照(PVE 一键快照功能很爽)。挂了直接回滚,不浪费时间救火。
六、阅读路线(链接到后续文章)
| # | 主题 | 内容 |
|---|---|---|
| 0 | 本文 - 系列导览 | 整体架构 + 设计原则 |
| 1 | PVE 装机篇 | Proxmox 安装 + 初始化 + 网络配置 |
| 2 | LXC:全屋代理 | 容器跑代理客户端,统一出口 |
| 3 | LXC:Tailscale 中继 | Subnet Router 模式,异地访问家里 |
| 4 | NAS VM:存储与协作 | btrfs 存储池 + 部门权限 + 备份策略 |
| 5 | Dev-Server VM:开发栈 | 系统装机 + 面板 + 开发工具链 |
后续系列:CI/CD(Jenkins + Docker 蓝绿)单独成系列,避免本系列篇幅失控。
七、最后说几句
这套架构不是一夜之间搭出来的,是边用边迭代的结果。我前后大概花了 1 个月业余时间,踩了 30+ 个坑,才形成现在这个相对稳定的架构。
写这个系列,主要是给我自己留个 runbook——以后某天某 VM 挂了要重建,不至于再踩同样的坑。顺便给同样想搞家庭实验室的朋友做个参考。
每篇都会包含:
- 该组件的选型逻辑(为什么是它,不是别的)
- 踩过的坑(按时间顺序)
- 通用化的安装命令(你按需替换占位变量)
- 验证清单(怎么知道你装对了)
- 后续可扩展的方向
如果你按这个系列搭出了自己的家庭实验室,欢迎告诉我,互相交流踩坑经验。
下一篇:#1 PVE 装机篇
附录:术语表
| 术语 | 解释 |
|---|---|
| PVE / Proxmox VE | 开源虚拟化平台(hypervisor),基于 Debian + KVM + LXC |
| VM | 虚拟机(Virtual Machine),完全虚拟化,性能稍弱但隔离强 |
| LXC | Linux Container,内核共享的容器,启动快、开销小 |
| 直通 / Passthrough | 把物理设备(磁盘 / GPU / 网卡)直接给 VM 用,绕过虚拟化 |
| IOMMU / VT-d | CPU 虚拟化扩展,直通的硬件基础 |
| btrfs | 支持快照、压缩、CRC 的现代文件系统 |
| Subnet Router | Tailscale 模式,把整个网段而非单设备暴露给 Tailscale |
| WireGuard | 现代 VPN 协议,Tailscale 底层用的就是它 |
本文协议:CC BY-NC-SA 4.0,转载请保留出处
💬 评论