搭建自己第一个homelab,感觉可能会挺让人不知所措的,尤其是当你要面对大多数教程都刻意跳过的网络挑战时。经过数月的反复试错和创造性解题,这套设置逐渐发展成了一整套自托管基础设施,跑着一个作品集网站、托管家人的网站,甚至还支撑着游戏服务器,而这一切都来自一台不起眼的Dell OptiPlex 7070 Micro。这里是从零到完全自托管的完整故事,包括路上遇到的各种障碍,以及它们是怎么被解决的。
起点:为什么选自托管而不是云
和很多开发者一样,起点是显而易见的选择:云托管。但当你要同时跑多个项目,又想自由地做各种实验时,那每月5到20美元的账单很快就会累积起来。更重要的是,几个具体的需求让自托管变得很有吸引力:
- 托管一个个人作品集网站
- 需要一台Minecraft服务器和家人一起玩游戏
- 想要完全掌控基础设施
- 对其中涉及的技术挑战感到好奇
Dell OptiPlex 7070 Micro成了起点。它体积小、能耗低,而且性能足以跑多个服务,非常适合搭在卧室里的服务器方案。
挑战一:突破CGNAT地狱
这正是大多数homelab教程力不从心的地方:它们假设你有一个公网IP地址。但实际上,大多数家用网络都在运营商级NAT(CGNAT)后面,不用变通方法的话,从家里托管服务几乎是不可能的。
安装好Ubuntu Server、准备好基础配置之后,这堵墙立刻就出现了。域名已经通过Cloudflare买好了,本地一切都配置妥当,但外部世界却没法触达服务器。
混合方案:VPS + Tailscale
解决方案涉及一种在别处不太有文档记载的组合:
第一步:VPS代理设置。 用一台每月5美元的DigitalOcean VPS,不是用来托管服务,而是作为一个代理网关。这样就获得了一个能接收互联网流量的公网IP地址。
第二步:Tailscale网络桥接。 在VPS和家用服务器上都安装了Tailscale。Tailscale的advertise-routes功能让网络内的设备可以访问特定路由,但仍然有个问题:怎么把HTTP流量从VPS路由到家用服务器上的特定端口?
第三步:Nginx Proxy Manager的魔法。 这就是Nginx Proxy Manager成为关键转折点的地方。它跑在VPS上,可以接收进来的流量,再经Tailscale网络代理到家用服务器的特定端口。整个方案看起来是这样的:
Internet -> Cloudflare -> VPS (Nginx Proxy Manager) -> Tailscale Network -> Home Server
这套架构解决了好几个问题:
- 不受VPS存储限制,可以托管无限多个网站
- SSL证书自动处理
- 对家用服务器的资源拥有完全控制权
- 无论跑多少服务,VPS成本都保持不变
挑战二:游戏服务器与UDP流量
Nginx代理方案对网页流量非常好用,但Minecraft服务器用的是UDP,跟HTTP代理不太合拍。Tailscale的域名在经过其基础设施代理时,同样也没法处理UDP。
于是playit.gg登场了,一个专门为游戏服务器设计的隧道服务。它创建的隧道能完美处理UDP流量,而且设置起来也很直接。游戏方案变成了:
- Minecraft服务器跑在家用服务器上
- 用playit.gg隧道做外部访问
- 家人通过Tailscale网络连接以获得最佳性能
这种混合方案兼顾了两方面的优点:可靠的网页托管和流畅的游戏体验。
扩展规模:多个站点和服务
基础设施到位之后,扩展也随之而来。目前正在运行的有:
- 一个个人作品集
- 一位家人的网站(clofelmaecampugan.com)
- 一个家庭博客网站(doc-agnes.com)
- 一台供家人游戏的Minecraft服务器
每个站点都跑在自己独立的容器或虚拟环境里,通过Nginx Proxy Manager面板隔离并管理。
演进:摆脱VPS,实现纯粹的自托管
几个月之后,VPS开始感觉像是为一件本可以在本地跑的事情花钱找了个昂贵的中间商。转折点出现在向PLDT(当地ISP)申请公网IP地址的时候。
动态IP的挑战
拿到公网IP只是第一步。家用网络通常配的是会定期变化的动态IP,每次变化都会打断你的服务。
最初的解决方案:DDNS。 传统的动态DNS服务能用,但用起来挺笨拙,IP变化发生时偶尔还会有延迟。
目前的解决方案:MikroTik + 自定义自动化。 一台MikroTik路由器让一套更稳健的系统成为可能:
- MikroTik DDNS:负责主要的IP变化检测
- 自定义IP监控脚本:跑在服务器上负责检测变化
- 自动子域名更新:检测到IP变化时,脚本会自动更新Cloudflare的DNS记录
- Tailscale集成:更新Tailscale配置以维持网络连接
这套方案已经稳定运行了好几个月,IP变化期间零停机。
扩展homelab:Unraid与彻底去Google化
第一台服务器的成功带来了扩展。第二台运行Unraid的机器被搭建起来,专门用于:
- 文件存储与备份
- Immich(自托管的Google Photos替代品)
- 媒体流媒体播放
- 额外服务托管
去Google化之旅
从Google Photos迁移到Immich出乎意料地顺利。Immich提供:
- 手机自动上传照片
- 人脸识别与AI辅助整理
- 家庭共享相册
- 对数据的完全掌控
迁移只花了一个周末,现在照片和视频有了无限的存储空间,而且不用每月付订阅费。
真实成本与取舍
说说数字,因为这很重要:
每月成本:
- 电费增加:约500比索(大概9美元)
- 域名注册:每年约800比索(每年14美元)
- 再也不用付VPS费用:每年省下60美元
前期投入:
- Dell OptiPlex 7070 Micro:约15000比索
- MikroTik路由器:约3000比索
- Unraid服务器组件:约25000比索
电费的增加是真实且持续存在的。碰巧同一个月薪水涨了500比索,这算是完美的时机,还是宇宙级的讽刺,你自己判断吧。
学到的教训与技术心得
效果不错的地方:
- Tailscale在内部网络上的可靠性
- Nginx Proxy Manager在反向代理上的简单易用
- MikroTik强大的DDNS能力
- 基于容器的服务隔离
可以做得不一样的地方:
- 一开始就用更强力的路由器
- 更早规划电力消耗
- 一开始就搭好监控和告警
- 更彻底地记录配置文档
意外的收获:
- 对网络概念的深刻理解
- 排查复杂系统问题的信心
- 对数字基础设施的完全掌控
- 每个新服务都带来学习机会
目前的架构概览
现在的方案大概是这样的:
Internet
|
v
Cloudflare (DNS/CDN)
|
v
MikroTik Router
|
v
Home Network
|
+-- OptiPlex (Web services)
|
+-- Unraid Server (Storage/Media)
|
+-- Tailscale Network (Internal access)
正在运行的服务:
- 网页托管:多个WordPress站点和静态站点
- 文件存储:Immich、Nextcloud
- 游戏:Minecraft服务器
- 监控:在线率监控、系统指标
- 开发:Git仓库、CI/CD流水线
自托管值得吗?
就这套配置来说,绝对值得,但也有一些但书。
如果符合以下情况,可以考虑自托管:
- 你享受学习和排查问题的过程
- 你想完全掌控自己的数据
- 你运营着多个服务或网站
- 你有可靠的网络和电力
- 你不介意自己当系统管理员
如果符合以下情况,不妨继续用云托管:
- 你想要零维护负担
- 你需要企业级的正常运行时间保证
- 你运营着业务关键型服务
- 你经常出差,需要远程管理
接下来做什么?
homelab之旅还在继续,计划中的有:
- 用于容器编排的Kubernetes集群
- 向云存储自动备份
- 家庭自动化集成
- 更高效的硬件升级
学习永不停止,每一个挑战都会带来关于系统管理、网络和基础设施管理的新见解。
最后的感想
搭建homelab教会我的关于网络、系统管理和解决问题的东西,比任何教程或课程都多。是的,电费确实涨了;是的,偶尔也会在奇怪的时间段收到"网站挂了"的消息。但获得的知识以及对数字基础设施的完全掌控,让这一切都值得。
如果你在考虑类似的旅程,建议从小处开始,记录好一切,不要害怕去尝试。最有价值的学习往往发生在事情出问题、你不得不去搞清楚怎么修好它的时候。
运营自己的基础设施,不只是为了省钱,更是为了理解驱动我们数字世界的这些系统,并拥有自己动手构建、打破、再重建它们的能力。