我的混合云 Homelab
Homelab 对我来说,不只是一项技术爱好,它更是一个充满乐趣、低压力的实验场,让我能够在其中探索对系统、应用和新技术的无限热情,每解决一个问题,每集成一个新组件,都能带来实实在在的成就感。更重要的是,它为我提供了一个动手的平台,让我能将理论知识转化为实际可验证的技能,这对于职业发展而言是无价的。
Introduction
最近升级了我的 Homelab, 主要是为了更好地支持远程办公和学习。主要把原来的 Docker Compose + Traefik 的方式升级为了 K3S,我的 Homelab 现在能够提供更稳定的服务和监控,并且可以更好地管理和部署应用程序。以下是我 Homelab 的一些关键组件和配置:
一、 Homelab 设备
- 本地环境(家庭)
- 小主机 N5105 CPU,16GB RAM,运行 Proxmox VE
- OpenWRT(拨号 + DNS + DHCP)
- Ubuntu-Server(K3S Master node)
- 群晖 NAS
- 终端设备:MacBook Pro, PC(Windows 11 + Ubuntu Desktop 双系统),macmini
- 小主机 N5105 CPU,16GB RAM,运行 Proxmox VE
- 远程环境(共有云)
- 有公网 IP
二、网络安全层
- 核心互联网络:
- WireGuard: 在家庭与公有云之间建立的安全的加密隧道
- 本地网络:
- OpenWRT: 负责家庭网络的路由、DNS 和 DHCP 服务
- 入站访问控制:
- Cloudflare Tunnel: 通过 Cloudflare 的网络安全地暴露本地服务,主要用作 WireGuard 的备用方案,防止 WireGuard 连接失败时仍能访问关键服务
- Nginx Ingress Controller: 管理和路由所有内网服务的统一入口
- Pocket ID:用户管理和所有的认证服务均需要使用 Pocket ID,Pocket ID 提供 OAuth2.0 和 OIDC 认证服务,同时很激进的选择了只能通过 Passkey 进行登录,提升安全性
- TinyAuth:如果自部署应用不提供认证功能,则通过 Nginx Ingress 使用 TinyAuth 进行认证
- mkcert: 用于生成自签名证书,并使操作系统和浏览器信任这些证书,从而确保内网流量的加密安全 。
- AdguardHome:作为本地 DNS 服务器,分配自定义域名,并与 mkcert 自签证书配合使用,实现 HTTPS 和自定义域名的访问。
三、容器编排、服务管理、数据备份与恢复
- K3S容器集群: 轻量级的 Kubernetes 发行版,作为容器编排和服务管理平台,使用 Git 来管理 K3S 的配置文件和部署脚本
- 核心应用服务
- 监控和日志:
- Prometheus + Grafana: 监控系统性能和资源使用情况
- Kite & Portainer:K3S Dashboard 和集群管理
- Uptime kuma: 监控服务可用性
- Pulse: Proxmox VE 监控
- Beszel-Hub: 集中服务器监控
- 备份和恢复:
- TimeMachine: 定期备份 macOS 到群晖 NAS
- Synology Active Backup for Business: 备份Ubuntu Desktop 到群晖 NAS
- Proxmox VE Backup: 备份 Proxmox VE 的虚拟机
- 其他服务:
- Home Assistant: 智能家居管理(集成 Apple HomeKit 并控制智能家居)
- Vaultwarden: 密码管理
- Postgres 和 Redis:后端数据库,为其他服务提供数据库和缓存支持 。
- Drizzle-Gateway: 作为数据库查看器
- DDNS: 通过 Cloudflare API 动态更新域名解析
- 异常通知:
- 我将通知等级分为2个等级:
- ⚠️ 一般通知: 例如备份失败,服务重启,服务宕机,新的系统更新可用等使用 Telegram Bot 进行通知
- 🚨 重要通知: 例如系统宕机、服务不可用等,通过 Bark 进行 Critical Alert 通知,iPhone 的Critical Alert 会绕过免打扰模式,确保通知可达
- 监控和日志:
远程开发和办公
我在 PC 安装了 Windows 11 和 Ubuntu Desktop 双系统,使用 Grub 进行引导,默认启动 Ubuntu,对于远程启动,我给主板配置了 Wake on LAN 和 PCIE HomeKit 开机卡。多重保障,防止单一设备故障无法启动机器。 由于 Grub 的原因,所以也可以在 Ubuntu 下直接启动 Windows 11。
远程连接 & 访问 & 开发
- WireGuard: 主要的远程连接方式,通过加密隧道安全地连接到家庭网络
- Cloudflare Tunnel: 备用的远程连接方式,防止 WireGuard 连接失败时仍能访问关键服务
- RDP & Windows App: 远程桌面协议,用于连接 Windows 11 和 Ubuntu Desktop
- VSCode & Zed: 通过 SSH 连接到 Ubuntu 进行远程开发
- Screen Sharing.app: macOS 自带的屏幕共享工具,用于远程访问 macmini
结语
通过这次 Homelab 的升级,我只需要在终端上配置 WireGuard,就可以轻松地实现远程访问和管理。
- 对公网的端口只需要开启 51020 UDP (用于 WireGuard 的端口)即可。只需要确保 WireGuard 私钥不会泄露,远程连接是非常安全的。
- 通过 WireGuard 链接后,即可通过 *.example.com 的自定义域名即可访问所有内网服务
- 所有服务均通过 Nginx Ingress 进行统一管理和路由,并使用 TinyAuth 和 Pocket ID 进行认证,再次确保安全性。
此外,在关键的部分我都配置的多重保障,防止因为单点故障导致服务不可用:
- WireGuard + Cloudflare Tunnel 保障远程连接的稳定性
- Proxmox VE + K3S 多云多节点保障服务的高可用性
- HomeKit 开机卡 + Wake on LAN 保障远程开机的可靠性
- 所有数据服务器、开发机均有备份,保障数据的安全性。
- 同时 NAS 也配置了 UPS 保障断电时数据的安全性 总的来说,这次升级大大提升了我的 Homelab 的功能和稳定性,使其更好地支持我的远程办公和学习需求。