周五晚上下班回家,翻柜子时无意中找到了去年换下来的一台小主机(N100 处理器,16G 内存,500G NVMe)。原本它被塞在角落里吃灰,插上电源按了开机键,风扇轻轻呼呼地转了起来。
看着这个小方盒子,突然来了兴致:何不趁着这个周末,给自己的开发与日常学习搭建一套完全受自己掌控的家庭轻量级 Homelab 呢?
周六上午:底层系统安装与 SSH 秘钥加固
对于家用低功耗微型服务器,我的首选依然是 Ubuntu 24.04 LTS Server。
- 做启动盘:在 Mac 上用 BalenaEtcher 烧录好 ISO 镜像,插到小主机上几分钟就装完了最小化系统;
- 固定内网 IP:登录路由器后台,在 DHCP 静态列表中把小主机的 MAC 地址绑定到
192.168.1.100; - 加固 SSH 访问:
既然要长期通电运行,安全基线绝不能偷懒。立刻把本地 Mac 的公钥传输过去:
随后登录主机,在ssh-copy-id -i ~/.ssh/id_ed25519.pub levi@192.168.1.100
/etc/ssh/sshd_config.d/safety.conf中直接写入:重启 sshd 守护进程。测试断开连接后重新用秘钥登录,确认密码登录被彻底封堵,这才算安下心来。PasswordAuthentication noPermitRootLogin noPubkeyAuthentication yes
周六下午:Docker 容器生态与网络隔离
用官方脚本一键安装上最新的 Docker Engine 和 Compose 插件,接下来就是最令人兴奋的“搭积木”时间。
我给自己规划了三个基础自托管服务:
- Uptime Kuma:实时监控博客站点
levifree.com、DNS 解析和各子服务的存活状态; - Vaultwarden:基于 Rust 轻量级实现的 Bitwarden 密码管理器后端,数据牢牢掌握在自己手里;
- Cloudflare Tunnel (cloudflared):无需公网 IP 和复杂的端口映射,直接通过 Cloudflare 边缘网络安全穿透,安全暴露需要远程访问的监控状态页面。
把它们组织进统一的 docker-compose.yml,设置独立的桥接网络(Bridge Network)进行服务隔离。当在终端敲下 docker compose up -d,看到一排绿色 Started 瞬间跳出时,那种由代码驱动现实世界的确定感真的太让人上瘾了。
周日折腾小插曲:一个关于 DNS 解析的乌龙
周日上午测试远程访问时,发现状态监控页始终无法通过外网域名连接。终端 ping 域名能通,但是 curl 接口总是卡在 TLS 握手阶段。
排查了整整一个半小时,排查了防火墙、检查了 Docker 的虚拟网桥路由,最后才发现罪魁祸首竟然是:我昨晚随手在主机的 resolv.conf 里配置了某个公共 DNS,而那个 DNS 恰好对我的内网泛域名做了解析截流!
把 DNS 改回本地网关和 1.1.1.1,重新拉取证书,一切瞬间顺畅通行。
这大概就是折腾技术的魅力所在吧:故障不会平白无故发生,每一个诡异的 Bug 背后,都是一条冰冷但遵循逻辑的计算机法则。解开谜题的那一刻,所有的疲惫都会烟消云散。
周末总结
周日傍晚,泡了一杯热茶。小主机静静地躺在路由器旁边,整机功耗只有不到 8W,温温的,几乎听不到一点噪音。
在被各类商业云服务包围的今天,亲手搭建一个不依赖任何第三方平台抽佣、数据完全归属于自己的微型节点,这种掌控感是无与伦比的。
下周准备把博客的定时自动化构建脚本也写一个心跳探针接入进来。下个周末,继续折腾!
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时


