HomeLab物料清单-服务篇

本文将对我目前HomeLab中所架设的服务进行总结。

一、基础服务

DNS服务

在我的HomeLab中有三个DNS服务器,群辉NAS、iKuai主路由、OpenWrt旁路由。其中最为重要的是OpenWrt旁路由中的DNS服务,HomeLab中其他设备都是将OpenWrt作为内部首选DNS服务器,将iKuai作为备选DNS服务器。

OpenWrt DNS服务

OpenWrt中默认DNS服务监听53端口,将接收到的DNS查询请求转发到位于6053端口上运行的SmartDNS服务器上,而后进行国内外分流查询。SmartDNS也会对查询结果进行缓存。这里我没有设置任何的广告拦截服务,因为感觉没有这个必要,我不是很排斥精准投放的广告。

SmartDNS中上游服务器设置

同时某个叫Pass****的科学插件中的DNS也重定向到6053端口和7913端口。

相当于如果走6053则走cn组的DNS服务器查询。而走7913则走us组的DNS查询。

iKuai DNS服务

iKuai中DNS服务就没有啥可以讲的了,就是一个DNS代理加速+缓存。这里的首选DNS指向了群辉NAS,相当于首先去群辉上查询。

群辉DNS服务

群辉上的DNS服务是直接走的国内ISP分配的DNS服务器,暂时作为一个备用DNS服务器,后面打算将内部域名全部转移到群辉上。

UPS通知服务

UPS通知服务参考我的另外一篇文章 群辉连通UPS控制Esxi断电关机。这里简单画一下UPS通知服务的覆盖部分,这里的红色线表示使用UPS进行供电,而群辉和两台ESXi服务器在同一交换机下,同时该交换机也连到了UPS上,因此断电后群辉可以和服务器进行正常通讯,而此时群呼会通知ESXi服务器关机,而后自己关机并关闭UPS,这样电力恢复后由于所有机器都设置了来电自启所有服务都会自动上线。

Docker服务

Docker服务分为两部分,第一部分为群辉提供的Docker服务,第二部分为ESXi服务器上一个名为Docker的虚拟机提供的Docker服务。

群辉Docker服务

群晖上Docker我跑了很多比较重要的基础服务,服务类型主要分为以下几个方面:

  • UI类服务
  • 监控类服务
  • SCM服务
  • Automation服务
  • 跨设备文件传输服务
  • 密码服务
  • 通知服务
  • 远程服务类
  • License服务

UI类服务

UI类型服务是指在一个容器栈中提供UI访问和操纵的容器所提供的Web服务。我现在在群晖上跑的UI服务不是特别多。

  • Pterodactyl Panel
  • ParseDashboard
  • Kibana

PterodactylPanel翼龙面板是一个用于游戏服务器管理的应用,当前版本下的翼龙面板使用的是一个PterodactylPanel控制多个Wings游戏服务器节点的办法,这里我在群晖上运行的是翼龙面板,而Wings服务器则是运行在我的ESXi上。但因为暂时没有开服务器的需求,所以这个面板我也没有实际使用,一直处于关闭状态。但之前试用了一下,翼龙面板开设MC服务器确实非常的方便,这里面把对游戏服务器的配置称为egg,通过安装不同的egg可以使用不同游戏的服务器配置预设,可以非常方便的安装和配置MC服务器。如果想安装Mod也可以直接通过上面配置的ftp账户访问服务器程序根目录添加mod。

ParseDashboard是一个叫Parse的低代码后端API服务器,在上面可以非常方便的配置对于数据库操作的API,暂时我还没有在实际项目或者其他小东西中使用过,先放在这里。Parse服务分为三个部分前端ParseDashboard、后端Parse-Server、数据库MongoDB。这里我将ParseDashboard放到了群晖上

Kibana是我的ELK栈中的前端,但是我暂时还没有啥自己的数据需要存的,大部分都是服务器的syslog。这里就不放图了。但是有些时候我的ElasticSearch会抽疯,会把我的虚拟机IO占满,跑60MB/s,我猜可能是在reindex,但他这样也导致我的其他服务有时候会无法访问,因此我有些时候还是会把ELK栈关掉,后面应该会换为更加轻量级的Loki或者Grafana。

监控类服务

监控类服务我暂时只有UptimeKuma运行在群晖上,UptimeKuma上监控了我主要的几个服务和网络连通性。我在UptimKuma内将我大部分服务都做了监听。UptimeKuma是一个对于自建服务来说非常方便好用的服务监控应用,而且他在服务断开或者出现故障时可以通过多种通知提醒用户,这里我大部分时间都是通过Apprise集中传递消息到我的各个终端上。

SCM服务(SourcecodeManagement)

这里我的SCM是群辉上的GitLab套件,但由于实际他也是运行在Docker中,因此我这里也归纳为Docker的服务。

Automation服务

Automation服务主要指将某些网页操作自动化执行的服务,这里我群辉上只有三个相关的服务。

1.QingLong

青龙面板,应该很多人都用过的一个应用,主要是做Schedule任务的一个服务,可以用来自动签到或者薅羊毛。

下面两个是我不怎么常开的两个服务,第一个是Huggin,第二个是n8n。

2.Huginn

Huginn是一个IFTT类型的应用,在Huginn中用户可以定义自己的Agent用于监控或操纵网络资源,我还没有怎么使用过,但是看网上对他的评价都很不错。

3.n8n

n8n 也是一种IFTT类型的应用,但他拥有工作流式的图形化界面,但是n8n对国内的应用支持不是很多,大部分都是对国外的服务或者网站支持。

跨设备文件传输服务

跨设备文件传输服务我使用的是SnapDrop,一个和AirDrop高度相似的应用,使用WebRTC让打开SnapDrop网页的不同设备进行数据传输。我在手机上装了Snapdrop软件,而电脑上我则在我的主力浏览器Vivaldi上左侧面板上固定了一个直达按钮:

密码服务

密码管理工具我之前一直使用的是KeePass,但KeePass只能在本地存储,如果想要跨设备使用密码服务就只有到KeePass的设备上查看密码。因此我将密码管理工具更换为了BitWarden。BitWarden可以自建一个密码服务器,同时本地还会存一个密码数据库的副本,可以直接使用他的浏览器插件访问密码服务器,相对来说是非常方便的。而且他的服务器还支持Two-Factor Auth,安全性非常高。

拥有这么多服务的我是密码管理工具的重度使用者,很多服务就只有需要维护的时候才会需要查一下密码,而BitWarden就是一个非常适合我的密码管理工具,同时他还支持名为Send的文件安全分享服务,可以通过这项服务安全的向其他人分享敏感数据,在Send数据设置时可以设置最多被查看的次数,我觉得是非常有用的。

通知服务

通知类型的服务我在群辉上只有Apprise。

1.Apprise

Apprise是一个非常强大的通知中心化服务,他集成了非常多种类的通知触发器,他将每一种资源都定义为一种协议的URL,而后通过一个Apprise URL聚合起来,只要通过这个AppriseURL就可以向所有被聚合的通知资源发出通知信息。

远程服务类(Guacamole)

远程服务类容器主要是指提供VNC服务的容器应用,在我的群晖上我挂了一个Guacamole,用于在一个临时环境下可以通过远程VPN回到家庭环境然后通过Guacamole用Web浏览器的方式对服务器进行控制。在某些场景下我不想直接使用远程桌面登录而是通过设置一个ExpireTime很短的IPSecVPN账户在非安全场合使用,然后使用浏览器开启无痕模式用Guacamole使用VNC或RDP。

License服务

我有两个License服务,一个是KMS服务另一个是JetbrainsLicenseServer。这里没有啥可以截图的就不放图了。

Docker虚拟机

我出了在群辉里有Docker服务之外,还有一个专门用于运行比较重型或资源消耗比较大的容器的虚拟机,这个虚拟机我命名为Deck。这个虚拟机在我刚开始装ESXi时就已经开始使用,被我进行了无数次的摧残(我经常直接在上面装一些没用过的容器,然后他经常被我搞崩溃)。我在Deck上装了Portainer作为UI管理平台。

Portainer

Portainer是一个可以对Docker进行可视化管理的管理型容器,我除了Kubernetes外的所有Docker服务都安装了Portainer-Agent用于集中化管理。

这里的第一个是Crane其实就是Deck上的Docker服务,这里我把他命名为起重器也很明显,这个Docker服务就是用来吊重型容器的。第二个MechAuto是HomeAssistantOS内部的Docker服务,HomeAssistantOS中的OS、Supervisor、Addons都是使用的单独的容器组成。下面的Stheno、Euryale、Medusa是我另外三个测试用的虚拟机。我的三个Kubernetes节点虚拟机也叫戈尔工三姐妹。

导航服务

我一共有两个导航服务,Dashy和Heimdall。我比较常用的Dashy,因为Dashy是静态网页加载速度非常快,而Heimdall则可以使用一些Enchanced Apps。Heimdall的Enchanced Apps可以对某些类型的服务进行实时数据监控或操纵(这种功能也是我写的LinkCat想要做到的,但我希望更加灵活)。

归档服务

归档类型服务是指将网页资源下载整理存储起来的服务,这里我使用的是ArchiveBox作为归档服务,但其实我的使用频率不是很高。ArchiveBox作为网页归档类型的应用是非常好用的,可以将一些比较重要的网页保存到本地供以后浏览。

工具服务

这里工具类型服务就只有一个:Regexr。Regexr是一堆大佬写的一个Regex在线执行和可视化网站,但由于他的源站在国外,所以我在我的域名下也开一个,但我没有设置登录登数据存储功能,只能在线即用即弃。

1.Regexr

通知服务

通知服务只有Gotify一种,Gotify是一个自建推送服务器,在Windows、Android等主流平台上都有其客户端。是我最为常用的消息通知方式,我的备用机Pixel3 就一直挂着Gotify应用。同时Gotify的某些消息也会触发我在HomeAssistant上的NodeRed一些执行链。

自动化工具

AWX

AWX是Ansible的可视化配置平台,更加新的版本已经更名为Tower,但我的机子上不知道为啥装不上Tower所以就只有一直使用老版本的AWX了。这里我其实还没有怎么经常使用Ansible,就写了几个测试用的playbook。但以后再入手一台服务器就应该会主要使用Ansible进行服务器管理了。我感觉Ansible的学习成本还是有一些的,很多Ansible的概念我还不是能区分的非常清楚。

CI/CD

CI/CD我用的也不是很多,因为我的项目都比较零散,还暂时没有一个可以用来CI的长期项目,等LinkCat基础部分成型后应该会使用整套DevOps对LinkCat的编写流程进行自动化集成、部署、测试等。

CI/CD服务这里就只有Jenkins,但Jenkins上应该只跑过我之前的C++低代码服务器的CI/CD。

Jenkins

Jenkins是当前主流的CI/CD平台,拥有完善的插件生态和灵活的集成流程。我这里的Jenkins是临时重装的一个,之前那个Jenkins无法启动,日志也打不开,无法排查。

杂项

剩下的就是一些我到处搜集的一些比较小众的应用了。比如Nocodb、DopplerTask。

NocoDB

NocoDB是一个仿Airtable的一个Database as A Service的应用,他直接将数据表暴露成一个UI,用户通过Nocodb中的一些辅助差劲操纵数据库并与其他的一些服务、应用进行数据互通或通知,将数据直接作为一种服务提供给用户。但Nocodb的生态还不是很完善,和Airtable相比还有一定差距,但Mantainers一直在缩小这个差距。

到这里所有长期使用的Docker服务就介绍完了,其实还有一些我在尝试的开源项目比如DopplerTask、FreshRSS。但我还不知道怎么用或者还不会用就不贴出来了。

Kubernetes服务

我一共有三个Kubernetes节点,她们分别为Stheno、Euryale、Medusa。我是通过Rancher安装的RKE类型的Kubernetes,因为Rancher对于我这种Kubernetes新手更加友好。

在UserNamspace下我装了四个Charts,装的不是很多,因为我每个节点分的硬盘不是很大(我的DELL R720只能插2.5寸SAS盘,每GB价格比3.5寸高一些)。

暂时就这几个服务,但后面等服务器磁盘容量扩充之后应该会把WordPress和GitLab搬过来。同时在这上面架设Coder,组成整个DevOps体系。

还有一个想要吐槽的是Rancher自带的Prometheus我装上后IO就没有下过60MB/s,本来我就是捡的二手垃圾盘读写能力不是很强,他一个服务器就把我整个物理服务器上的所有IO都占了,让其他虚拟机也卡的不行,我就只有把Prometheus删了,甚至我连他的界面都没有进到过,直接一开机RancherUI就无法访问,SSH进去也没有响应。不知道是我的哪里有问题。

DevOps

Argo-CD

Argo-CD是一个面向Git的DevOps ContinousDelivery工具,只需要配置一次,后面所有的打包部署都自动执行,被打包好的容器镜像将自动将部署任务派遣到某一Kubernetes节点上。我还没有在项目中使用过,但我在学习他的教程的过程中感受到了他的强大。

自动拉取Git仓库上的配置文件后,从目标Registry上将镜像下载下来,然后再自动部署、自动划Service。然后我们每此构建完镜像后只需要触发一下Argo-CD或让他自动Sync,整个项目就开始自动在Kubernetes集群上部署。

Argo-Workflows

Argo-Workflows用于在Kubernetes中执行一些复杂的需要Orchestration的工作,比如你有一个需求,需要将ABC串行执行后再将DEF并行执行。如果不使用Argo-Workflows操作将会是一场噩梦,但只用Argo-Workflows后,只需要定义好每一个步骤的template和入参并将整个流程的入口确定好(构建一个有限状态机),就可以多次调用了。同时Argo-Workflows还支持CronJob,可以定时触发工作流执行。

我还没有怎么使用过Argo-Workflows,只是将教程跟着敲了一遍,但我认为Argo体系整体使用起来都是非常精炼和灵活的。

OpenFaas

OpenFaas作为开源的Function as a Service应用,是Serverless模式的基础。后面我也会考虑将LinkCat某些模块做成Severless类型。

这里我装了几个OpenFaas Store预设的函数,脸部识别、identicon生成、图片上色、Tesseract OCR、人脸打码。下面我简单使用一下部分函数,OpenFaas本身是没啥好说的就是一个函数部署平台。

1. Identicon

An Identicon is a visual representation of a hash value, usually of an IP address, that serves to identify a user of a computer system as a form of avatar while protecting the user’s privacy. The original Identicon was a 9-block graphic, and the representation has been extended to other graphic forms by third parties.

将ID生成一个对应的Icon,Github’等网站上默认头像就是用这种算法生成的。

2.FaceDetect

面部识别,会在识别出来的面部周围生成黄色方框

3.Colorise

颜色填充,这是给我带来最大震撼的一个函数。


v0.5wep 写了个大半

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注