Command Palette

Search for a command to run...

我的混合云 Homelab

Homelab 对我来说,不只是一项技术爱好,它更是一个充满乐趣、低压力的实验场,让我能够在其中探索对系统、应用和新技术的无限热情,每解决一个问题,每集成一个新组件,都能带来实实在在的成就感。更重要的是,它为我提供了一个动手的平台,让我能将理论知识转化为实际可验证的技能,这对于职业发展而言是无价的。

Homelab Network Diagram

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
  • 远程环境(共有云)
    • 有公网 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 的功能和稳定性,使其更好地支持我的远程办公和学习需求。