首页 程序笔记 我如何使用开源技术构建我的家庭实验室

我如何使用开源技术构建我的家庭实验室

欢迎来到我的家庭技术的简单、最重要的部分——我的家庭实验室的引导探索!它有一些细致的设计和味道,证明了开源技术的力量。

出于不同的原因,使用您想要的技术堆栈构建家庭实验室可以证明是有益且有价值的努力:

  1. 实验和软件测试的理想选择:家庭实验室是试验新技术的更安全的空间。您可以轻松地破坏软件、服务器配置,甚至实际的硬件!
  2. 作为一种爱好和个人兴趣:对于某些人来说,建立和管理个人家庭实验室的旅程可以满足爱好。它可以是一种更深层次地接触技术、追求个人兴趣、同时享受从头开始构建一切的满足感的方式。
  3. 概念验证中心:如果不是家庭实验室,您还可以在哪里开发和测试技术相关想法或初创公司的概念验证?家庭实验室需要昂贵的商业资源。
  4. 用于构建定制解决方案:通过家庭实验室,您可以根据您的特定需求定制技术解决方案,无论是设置家庭安全和监控、用于远程访问的个人 VPN、娱乐媒体服务器、家庭自动化系统、私有云或您的海量数据存储解决方案。
  5. 学习和培养新技能:家庭实验室提供了学习新技术、尝试不同设置和获得实践经验的实践环境。这是了解网络、服务器管理、虚拟化、容器化、家庭自动化、网络安全和许多其他 IT 相关主题的绝佳方式。

我的家庭实验室网络架构(简单化设计)

家庭实验室的架构将取决于您的具体需求,例如您计划购买的设备,以及您通过实验室要实现的具体目标。这是我的家庭实验室网络的简单设计。

1. 互联网连接

  • 这是主要的互联网连接,主要由您的 ISP(互联网服务提供商)提供。
  • 它是网络的入口层
  • 如果您的家庭实验室很重要,例如外部使用的托管服务,您可以考虑使用辅助/备份互联网连接以实现冗余。
  • 我的主要互联网由 Safaricom(肯尼亚电信公司)提供。我计划获得 Starlink 互联网连接,并可能将其用作下行链路的主要连接,并使用 Safaricom 互联网进行远程访问和公开外部服务。
  • 我选择 Safaricom Fiber Internet for Business 连接包来获取公共 IP 地址并完全控制我的网络堆栈。
  • 路由器配置为桥接模式,使我能够在防火墙/外部路由器中配置公共 IP,而不是由 ISP 控制。
  • ISP 路由器负责将流量从内部网络路由到任何外部目的地。

2. 路由器/防火墙

  • 我从亚马逊购买了 Protectli Vault 4 端口迷你电脑。您可以单独购买 RAM 和磁盘以获得更好的规格。
  • Mini PC 有 4 个端口,为您提供连接方面的灵活性(WAN 或 LAN)

  • 然后我在硬件上安装了 pfSense,完整的指南可以在此链接中找到; https://techviewleo.com/install-pfsense-opnsense-on-protectli-vault/
  • pfSense 是一款基于 FreeBSD 的免费防火墙和路由器软件
  • OPNsense 是 pfSense 的替代品。我根本没有无缘无故地使用它。将来会尝试一下。
  • pfSense 配置了许多服务:用于负载平衡的 HAProxy、DHCP 服务(用于为设备分配动态 IP 地址)、用于时间同步的 NTP、Snort(IDS/IPS)、用于远程访问我的家庭实验室的 OpenVPN 和 Tailscale 客户端(网状 VPN:https://computingforgeeks.com/joining-pfsense-to-tailscale-headscale-vpn-mesh/)
  • pfSense 上也使用 VLAN 进行网络隔离。我有 4 个活动 VLAN – IOT 设备和设备、访客 WiFi、主 WiFi、服务器和虚拟机。
  • 配置防火墙规则以限制 VLAN 间连接。例如,访客 WiFi 只能访问服务器网络 VLAN 中的 DNS 和流量过滤服务。由于各种原因还存在许多其他规则。

3. 开关

  • 我使用 UniFi 托管交换机来获得更多控制和配置 VLAN(虚拟 LAN)的能力。
  • 主交换机为USW-24-POE以太网交换机

  • 我选择以太网供电 (PoE) 交换机,以避免在接入点或任何可通过以太网电缆供电的设备上使用 PoE 注入器。
  • 该交换机通过在 Ubuntu 20.04 VM 中运行的 UniFi 控制器(网络应用程序)进行管理:https://computingforgeeks.com/install-unifi-controller-network-application-on-ubuntu/
  • 另一个小开关专用于家庭安全

4. 接入点

  • 接入点用于扩展现有网络的无线覆盖范围并增加能够连接到该网络的用户数量
  • 我拥有两个 Ubiquiti Networks UniFi AP AC LR 接入点 – UAP-AC-LR(24V 无源 PoE 室内、2.4GHz/5GHz、802.11 a/b/g/n/ac、1x 10/100/1000)

  • 它们都使用 UniFi 网络应用程序进行管理
  • WiFi 接入点映射到 pfSense 中定义并在 UniFi Switch 中配置的 VLAN。

5. 主服务器(或多个服务器):

  • 主服务器运行虚拟化软件应用程序(管理程序)
  • 类型 2 和类型 1 虚拟机管理程序的混合
  • 由于功耗低,我更喜欢家庭实验室使用的迷你 PC 硬件
  • 在我的服务器机架中,我有4英特尔 NUC

  • 以及 7Lenovo ThinkCentre 硬件。

  • 大多数配备 Intel Core i7 CPU、DDR4 RAM 棒和 NVME SSD。

5.1 虚拟化堆栈

  • 这是用于创建和管理虚拟环境的软件组件的组合。
  • 虚拟化有助于优化 CPU、内存和存储等硬件资源。
  • 多个虚拟机可以共享底层物理硬件,从而更有效地利用资源
  • 在我的家庭实验室中,我使用各种虚拟化技术,即:
  1. 基于内核的虚拟机 (KVM) –2 个节点
  2. Proxmox VE 版本 8 – 2 个节点
  3. oVirt 在 Rocky Linux 操作系统上运行 – 1 个节点
  4. XCP-ng 与 Xen Orchestra 用于 UI 管理 – 1 个节点
  5. OpenStack 部署在 Rocky Linux 上作为基础操作系统。 – 1 个节点
  6. VMware ESXi 和 vCenter 版本 8 – 3 个节点
  7. HPE ProLiant DL380 Gen10 服务器非常耗电 – 仅根据需要运行

6. 服务

我在家庭实验室中运行相当多的服务来满足不同的个人需求。我将在这里列出一些:

6.1 Kubernetes集群

  • 我的 Kubernetes 集群由 Flatcar Container Linux 作为操作系统提供支持
  • 它使用 Kubespray 进行部署和管理
  • 具有 Nginx Ingress 和 Traefik Ingress 控制器
  • 集群负载均衡器是 MetalLB
  • 容器注册中心是Harbor
  • 容器存储:Rook
  • 云原生证书管理:cert-manager
  • 使用 ArgoCD 的 GitOps
  • API 访问通过 pfSense 使用 HAProxy 进行

6.2 OpenShift集群

  • 在操作系统层由 Fedora CoreOS 提供支持
  • 使用 OKD – 为 Red Hat OpenShift 提供支持的 Kubernetes 社区发行版
  • 大多数集群和其他应用程序都是使用 Operators 进行 OpenShift 本地部署
  • HAProxy 是 OpenShift 节点/API 的负载均衡器

6.3 基础设施管理和自动化

  • 服务代理管理:Nginx 代理管理器
  • 身份管理和 DNS:FreeIPA
  • ISO 安装工具:Ventoy
  • 由 Terraform 提供的 IaC
  • 使用 AWX 的 Ansible 自动化
  • 由 Gitea 提供支持的 Git 服务器
  • 现在和普鲁米一起玩

6.4 监控和仪表板

  • 普罗米修斯与 Grafana
  • Dashy 家庭实验室链接仪表板
  • 正常运行时间:Kuma 正常运行时间

6.5 家庭媒体/娱乐

  • 果冻
  • Plex 媒体服务器

6.6 数据同步

  • Syncthing 用于在我的系统/机器之间同步数据。

6.7 广告拦截器

  • 皮孔
  • 广告卫士主页

6.6 家庭自动化

  • 智能家居自动化:家庭助理
  • 物联网平台:ThingsBoard(正在进行中)

6.7 安全

  • SIEM:AlienVault OSSIM
  • 密码管理:Bitwarden
  • 入侵检测/预防:Snort IDS

6.8 日志记录

  • 部署了 Graylog 和 Grafana Loki。我根据应用程序需求和适用性进行切换。
  • 日志分析器:GoAccess

6.9 未来的软件实现(正在酝酿中;尚未实现)

  • CCTV NVR:护卫舰NVR
  • 具有可选 HTTP/S、FTP/S 和 WebDAV 的 SFTP 服务器:Sftpgo
  • 操作系统存储库同步:Katello 和 Foreman
  • 个人财务管家:Firefly III
  • 网站分析:Plainible Analytics 或 Matomo
  • 访问和远程桌面:Teleport 和 Rustdesk
  • 附加网络路由器/防火墙:Sophos Firewall Home Edition
  • SSO:奥瑟莉亚
  • 跳转服务器(如果需要):Jumpserver
  • 照片:光棱镜
  • 家庭 VoIP:Asterisk 和 FreePBX

一些安装链接:

  • https://computingforgeeks.com/creating-ubuntu-and-debian-os-template-on-proxmox-ve/
  • https://computingforgeeks.com/install-proxmox-ve-on-debian-12-bookworm/
  • https://computingforgeeks.com/deploy-product-kubernetes-cluster-with-ansible/
  • https://computingforgeeks.com/how-to-deploy-openshift-container-platform-on-kvm/
  • https://computingforgeeks.com/run-ansible-awx-on-kubernetes-openshift-cluster/
  • https://computingforgeeks.com/install-configure-traefik-ingress-controller-on-kubernetes/
  • https://computingforgeeks.com/deploy-nginx-ingress-controller-on-kubernetes-using-helm-chart/
  • https://computingforgeeks.com/deploy-metalb-load-balancer-on-kubernetes/
  • https://computingforgeeks.com/how-to-deploy-rook-ceph-storage-on-kubernetes-cluster/
  • https://computingforgeeks.com/install-freeipa-server-on-rocky-almalinux/
  • https://computingforgeeks.com/deploy-multi-node-okd-cluster-using-fedora-coreos/
  • https://computingforgeeks.com/deploy-xen-orchestra-appliance-on-xen-xcp-ng/
  • https://computingforgeeks.com/install-xen-orchestra-on-ubuntu-debian-linux/
  • https://computingforgeeks.com/how-to-install-ovirt-engine-on-rocky-almalinux/
  • https://computingforgeeks.com/installing-xcp-ng-virtualization-platform-steps-with-screenshots/
  • 以及更多信息,请访问computingforgeeks.com 和 techviewleo.com

2

站心网

欢迎来到我的家庭技术的简单、最重要的部分——我的家庭实验室的引导探索!它有一些细致的设计和味道,证明..

为您推荐

天天写业务代码,如何成为技术大牛?

不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己。然而"梦想是美好的,现实却是残酷的",很多..

程序员如何讲清楚技术方案

最近在评审技术方案,和代码review的时候,遇到刚入行的同学们,很多都讲不清楚技术方案。具体表现是:上来不说需求,直接说算法实现。台下一头雾水,根本不知道设计方案是否合理。描述完需求后,又直接看代码,看表..

如何学习新技术

我总是感觉自己在盲目的学习一些看上去很火热的技术。比如 React Native,Flutter 等等。我家里堆了各种编程语言的入门书籍,有 Go 的,有 Erlang 的,有 c++ 的,还有 JavaScript 和 CSS。我到现在都搞不懂这个事情..

码农晋升为技术管理者后,痛并快乐着的纠结内心

有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿、主动去选择管理岗的。这种被动的比例还不低,高达..

十年技术进阶路

前言该篇文章是我第一次跟DTCC合作编写的,整篇文章大概8000字,可能花您15分钟阅读。我和DTCC的韩楠老师,共花7了天时间,每天把该文章打磨到晚上12点,在这非常感谢编辑老师的负责与付出。这篇也是我分享里为数不..

传统线程技术中创建线程的两种方式

传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法;二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread。这两种方式大部分人可能都知道,但是为什么这样玩就..

一个技术管理者的苦逼【技术管理漫谈】

希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。角色转变 从工程师转技术管理这两年,好比头马变成车夫,除了角色认知的转变,还要看方向,定计划。不仅仅是自己拉好车的事情,..

技术团队管理者的问题视角

团队基建考虑的因素- 人心稳定性- 团队技能分布:(每个人熟悉的技术栈,技能)- 团队职业规范方向:(谁去当架构师、技术专家、技术经理、交互专家)- 合作意识:(工程师的积极性:主动问询,共同协商)- 团队规范..

成功运作一个开源项目的 15 个要点

运作开源项目很容易。所有你需要做的就是让你的源代码可用和开源,对吧?嗯,也许。其实,开源项目是否成功取决于你对项目成功的定义。且不论你是怎么定义的,创建开源项目需要大量的工作。如果你已经有了目标,那么..

NETworkManager 一个基于.NET的开源网络管理和问题排查工具

NETworkManager 是一个基于.NET开源(GPL-3.0 license)、免费、功能强大的开源工具,旨在帮助用户管理和解决网络问题。通过提供一系列网络连接和管理工具,NETworkManager 能够让用户轻松连接到远程系统,管理网络..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址:https://liningit.github.io/LnskyDB/开源地址:https://github.com/liningit/Ln..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

BotSharp 基于 .NET 平台的开源 AI 聊天机器人框架

BotSharp 是一个开源的、基于 .NET 平台的 AI 聊天机器人框架,旨在简化构建智能对话系统的过程。它主要通过自然语言处理(NLP)技术,帮助开发者构建具备语言理解和对话能力的应用。BotSharp 提供了丰富的功能和扩..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

C#中的线程安全的集合ConcurrentQueue使用示例

在多线程编程中,如何安全地在不同线程之间共享数据是一个非常重要的问题。C# 为我们提供了一些专门设计的线程安全集合,其中之一就是 ConcurrentQueue<T>。它是一种先进先出(FIFO)的数据结构,专门为多线程环境设..

CSS砌体布局示例和使用场景

CSS砌体布局(Masonry Layout)CSS砌体布局是一种网页布局技术,它的灵感来源于砖石墙的排列方式,类似于“拼图”或“拼砖”的效果。在砌体布局中,元素的排列并不完全遵循传统的网格布局规则,..

使用CSS columns-visibility实现砌体布局

CSS的 columns 属性(如 columns、column-count 和 column-width)通常用于多列文本布局,而不是直接用于砌体布局。然而,结合 columns 和 visibility 属性,可以在某些情况下实现类似砌体布局的效果,虽然它并不完..

发表回复

返回顶部