Home Data Center Series Introduction to key applications involved in building a home data center
This article was last updated 191 days ago. The information in it may have developed or changed. If it is invalid, please leave a message in the comment section.

搭建家庭数据中心涉及到了众多的应用,本文就以我家的环境为例,将需要用到的应用进行一个梳理,供大家参考。

个人博客

我的家庭数据中心应用的发布是以个人博客为主体形成的群站,个人博客建站我选择的wordpress。wordpress是目前CMS中市场占有率最高的,其支持丰富的插件扩展,而且网上的教程也非常多,适合新手入门,现在这篇文章就是通过wordpress发布的。

参见文章:Docker series uses Docker to set up a blog slave site based on WordPress and implement regular backup of master-slave site configuration.

web server

Github上很多应用是以源码方式提供的,需要依托于web server进行发布。web server方案我选择的nginx(nginx的部署方式是docker还是自己手动编译安装还是用Linux面板提供的方式就看大家自己的喜好了)。选择的理由主要是反向代理我就用的nginx,也用得顺手了,另外,nginx还支持4层反向代理、负载均衡等扩展功能,还能做k8s的ingress等等,谁知道以后会不会用到,能支持总是好的。

参见文章:Docker series single container nginx, single container php (one version) multi-site sharing,Linux panel series based on Baota panel to deploy V free of charge in source codeas well asDocker series uses Docker to build a graphical nginx based on nginx Web UI.

php

根据应用需求来,可以使用docker的方式提供不同版本的php-fpm。

参见文章:Docker series single container nginx, single container php (one version) multi-site sharing.

缓存

使用的redis。这个主要是根据应用的需求来,目前看来,不少应用的部署都依托redis进行加速(wordpress,nextcloud,cryptgeon,onlyoffice,jumpserver等)。

图床

图床其实也有很多选择,网上提供图床服务的供应商不少,甚至各云供应商的COS也可以作为图床使用。不过,对于有IPv4和IPv6双栈公网地址的家庭宽带的我来说,自建图床才是最能发挥优势和省钱的方案,所以我选择了开源图床:chevereto——的免费版。其他的图床我还没有尝试过,目前而言,chevereto的免费版已经够我使用了。

参见文章:Docker series uses Docker to build your own image bed based on Chevereto.


另:我搭建家庭数据中心的一个大原则就是成本最低控制:在满足需求的前提下,能不给钱打死不给钱;迫不得已要给钱(备案、cdn解决443端口问题等)的,最低要给多少,就绝不多给一分。

所以我选择应用的大前提要么是全免费;要么是虽然有付费版(不管是综合第一还是综合倒数),但是免费版功能就可以满足我的需求。所以我的选择从总体上而言未必是最好的,只能说在不给钱范围内能满足我的需求。因此,对于有高要求的土豪朋友,不能完全参考我的方案,说到底,我这也就是屌丝解决方案而已。


阅后即焚

因为发送的一些文件或者信息有特定的安全需求,需要定义生效的时间或者可访问次数(只可访问1次就是阅后即焚)。这个需求的选择不少,不过一些复杂的还需要数据库,我对这个没有那么复杂的要求,最后选择了简单的加密鸽(cryptgeon)。它的内容只能保存在内存中,重启就没了,不支持认证,不需要数据库,只是需要redis。它的功能支持设置访问链接的生效时间和访问次数,也支持上传小文件。总而言之就是简单,架设的条件简单,功能也简单。

image.png

详细部署参考我另一篇文章:Docker series: Use Docker to build your own self-destructing application based on cryptgeon.

个人网盘

个人网盘其实没啥选择的余地,直接就使用nextcloud了。seafile也有社区版,但是社区版说实话和nextcloud不是一个档次的,我开始就是用的seafile社区版,企业版我没用过,不做评论,但是用了nextcloud才知道,原来网盘不只是个网盘那么简单。各种插件先不说,和onlyoffice一起提供文档在线编辑功能,支持各种格式,参见文章:docker系列 使用docker基于nextcloud搭建自己的个人网盘(补作业)andDocker series deploys onlyoffice container for nextcloud

image.png

通过插件将nextcloud变成一个音乐播放器;
image.png

和elasticsearch一起提供全文内容检索功能。。。等等,各种平台的客户端也非常齐全。所以我说,其实个人网盘没啥可选择的余地。不过架设个人网盘的一个关键问题在于带宽问题,如果经常传送大文件,云主机那点带宽肯定不够使,所以最好还是有公网IP地址并且上行带宽大的家庭宽带为宜。

可视化docker管理

说到docker的可视化管理工具,macos上有docker desktop for mac,win上有docker desktop for win,linux上可以选择的有portainer和docker UI。我用的是portainer。相对docker desktop来说,portainer能实现的功能更多也更细致(比如在web界面上的对应容器中直接修改环境参数然后重新生成容器),具体参见文章:Docker series builds a graphical Docker management interface based on portainer.

image.png

另外,一些Linux面板也自带了简单的docker图形管理界面,例如宝塔Linux面板
image.png

苹果消息推送服务

因为我基本是全套苹果生态,所以最完美适配的消息推送就是bark-server了。自建的bark-server可以运行在家庭数据中心中,也可以运行在云服务器上,通过在ios、pados、macos上安装bark客户端,即可收到实时的消息推送,非常的方便。

参见文章:Docker series builds a message push server based on bark server

应用健康检查

我的应用健康检查主要依靠uptime-kuma来实现,分别部署在2个位置:家里的uptime用来检测部署在腾讯轻量服务器上的应用以及个人博客对应的国外访问域名,其通过cloudflare实现加速;腾讯云服务器上的uptime用来检测家庭数据中心的源站以及部署在腾讯cdn上的应用的健康情况。

参见文章:Docker series builds a real-time health monitoring and alarm system for applications based on uptime and bark.

网站访问流量监测

流量监测部分我使用umami来实现,功能部分如下图:

image.png

image.png

image.png

image.png

功能不算很多,但是小巧精干,对于个人站点而言已经算不错了,具体搭建参考文章:Docker series builds a website traffic monitoring system based on umami.

database

很多应用的部署都需要数据库的支持。自从mysql被oracale收购以后,开源的mariaDB就成了mysql的最强替代者(debian11的默认软件库已经用mariaDB替换了mysql,在我搭建Trinitycore 3.3.5版本魔兽世界服务端的时候,mariaDB和当时的22061服务端有兼容性问题,把我坑惨了,最后只能硬装mysql来解决),因此我也是用的mariaDB(docker方式部署),并采用了单数据库支持多应用的部署方式。正因为此,搭建的应用需要数据库支持的时候,我不会采用docker-compose的方式进行部署(除非没办法)。mariaDB数据库的搭建可以参考文章:Docker series uses Docker to set up a blog slave site based on WordPress and implement regular backup of master-slave site configuration.
此外,还需要搭建一个postgreSQL数据库作为补充,部分应用在采用这个数据库。postgreSQL数据库的搭建参考文章:Docker series builds a private video sharing platform based on peertube (Part 1)
.

长链转短链工具

其实长链转短链不是必须的,没这个也一样用。只是有时候需要在博客上引用链接或者给别人分享链接的时候,看到那一长串的乱码一样的链接非常的没有逼格,所以最终还是自己弄了一个。这种工具不少,经过比较,最终我选择了shlink。

参见文章:Docker series builds a long-chain to short-chain tool based on shlink.

对象存储COS

其实本来想直接用腾讯云的COS的,讲道理其实不算太贵。但是看那收费组成,想到如果以后播放视频比较多,那钱钱还是需要不少的,最终还是决定自己搭一个。

这个没有太多选择的空间,我采用了开源的minio,功能相对简单,分享的方式也比较简陋,不过也基本能完成我的要求。

参见文章:docker系列 搭建基于minio的私人COS平台 /technology/docker632/.

个人影音库

我几百T的资源,如何管理和发布对于我而言是个不可回避问题。如果没有一个好的方案,除了平时观看的时候不方便,我甚至连资源数量(电影,剧,卡通等)的统计都难。这类方案最好的就emby和plex,我最终选择了emby(Jellyfin是emby的开源版,如果大家不愿意花钱就只能选这个)。

参见文章:Why did I choose emby instead of plex?.

Linux面板

我也用过一段时间1panel,不过最终我还是选择了宝塔Linux面板。

参见文章:Linux Panel Series Pagoda Panel Introduction.

Virtual Networking

虚拟组网的选择很多,有各种付费的方式,不过那肯定不是我的选择。现在选择虚拟组网技术,最好的就是基于wireguard的方式,可以直接使用wireguard自己搭建服务器端,不过那个配置相对繁琐,需要有一定的Linux基础。推荐另外一种基于wireguard的方式:tailscale,这个是客户端开源,服务器端不开源的方案。它最大的优势是把wireguard繁琐的服务端架设过程替你完成了,你要做的只是注册并登录各个客户端而已,并且tailscale还提供众多的功能,包括dns解析及安全(和nextdns无缝结合)、文件传送(各个tailscale客户端之间最高效的共享文件传送方式,不受限于网络)、不同tailscale账号之间的节点共享等等,同时支持多种平台(win,linux,macos),还有专用的nas客户端(群晖和威联通)。

虚拟组网是家庭数据中心解决方案中非常重要的一个组成部分,不管是在没有公网IP的家庭宽带架设源站、远程运维、云主机使用家里的魔法(参见文章:A powerful local proxy tool from the Qiji series: proxychains)、和其他朋友共享家里的资源等,都离不开虚拟组网技术的支持。

要说劣势,就是国内没有官方中继服务器,不过可以自己架设。参看文章:Debian series build tailscale DERP server (relay server).

WAF

家庭数据中心中所有需要对外发布的应用,都需要一个最基本的安全防护。因为应用基本都是http(s)的方式发布,所以一个WAF(WEB应用防火墙)是不可或缺的。免费的WAF其实没有太多挑选的余地,只是没想到还有一匹黑马:长亭雷池的社区版。

image.png

image.png

image.png

image.png

讲道理,免费版能做成这样已经很不错了,我之前为了找一个有GUI的免费的版本,在github上一顿找,后来找到了httpwaf。不过发现httpwaf默认只能添加一个站点,为了支持多站点还逼得我自己去找底层的配置去修改。。现在有了长亭雷池社区版,我终于松了一口气。

唯一有点限制的是社区版只能以反向代理的方式部署,不过这对我没什么影响。

Load Balancing

在我的家庭数据中心解决方案中,负载均衡并不是一个必须的组件,毕竟一般情况下,一个应用大家也不可能部署多套,但是我因为有两套环境,所以还是加入了负载均衡这个功能组件。一般而言,haproxy和nginx都是不错的选择,但是对我这个强迫症患者而言,没有好的gui实在是不可接受的事情。经过在开源负载均衡中的一番寻找,我最终找到了zevenet的社区版:

image.png

虽然社区版只是支持LSLB(local server load banlance),但是对我已经足够了。不过要吐槽的是,虽然语言选项支持中文,但是那个翻译真的是一言难尽,我觉得还不如直接用英文版。

所以我又找到了nginxWebUI,这个就轻量简单了许多:

image.png

image.png

Then set it in the reverse proxy menu:
image.png

具体选哪个就看大家喜欢了。

使用nginxWebUI搭建负载均衡参见文章:Docker series uses Docker to build a graphical nginx based on nginx Web UI.

远程运维

远程运维有2大类的方式可选。

其一是通过堡垒机的方式,目前开源的堡垒机方案不少,看来一圈下来,大而全的可以使用jumpserver,不过这个偏企业环境,个人使用上来说很多功能用不到;轻量简单的的是next terminal,比较适合个人使用(参见文章:Docker series builds an open source bastion machine based on next-terminal)。这种方式的好处是对客户端没啥要求,只要能通过网络登录堡垒机就成,网吧主机也行。其实吧,对个人用户而言,堡垒机最简单的实现方式,就是找个一直在线的内网的设备(虚拟机的win系统最好),在上面通过ssh客户端软件提前把所有设备的ssh访问配置好,然后通过浏览器把所有web登录设备的网址加入书签,最后只需要开通这个win设备的远程桌面访问,也算是最简单的堡垒机雏形了~。

其二是支持虚拟组网(参见:Application of virtual networking technology in home data center series)并已经提前配置完毕的专用客户端,比如手机,平板,笔记本等。这时候一个专业的SSH客户端软件(例如Termius),一个浏览器就可以实现在任何地点对所有虚拟组网内的设备进行直接访问(我现在正在尝试以ipad mini6为中心进行远程运维,再带一个折叠键盘,出门就不用带macbook了,实属装逼利器)。

邮件服务器

邮件服务器是使用poste搭建的,支持webmail、支持使用邮件客户端收发邮件、支持docker部署,对资源的消耗不大,功能上来说适合个人使用(参见文章:Docker series builds a mail server based on poste.io))。

以上是我目前在搭建家庭数据中心的过程中涉及到的关键的应用,后续我会随时根据需求进行添加。

不过后来我发现自己建邮件服务器完全是吃力不讨好,所以改成了使用cloudflare提供的电子路由功能,如果只是用来收邮件,比自建邮件服务器轻松不知道多少,参见文章:Home Data Center Series Use Cloudflare to create a small mailbox with your own domain suffix.

DNS服务器

DNS服务器是通过webmin上的bind来实现的,其实直接装bind也行,但是源于我对GUI的执念,所以选择了通过webmin来实现,不过用起来是一样的(参见文章:Docker series builds a DNS server based on bind9).

另外,如果只是作为内网的dns转发器,ADguard home更合适,还附带提供广告过滤等功能(参见文章:Docker series uses Docker to build its own ad-free, pollution-free and DOH (DOT)-supported DNS server based on ADguard home).

Reverse Proxy

反向代理作为家庭数据中心应用对外发布的统一且唯一的入口,是非常重要的。实现的方式也很多:各种面板的nginx,例如宝塔面板、1panel面板,还有npm等。我是使用的宝塔linux面板来实现反向代理,不过也能使用其他的方式,比如NPM、nginxWebUI来实现,具体可以参看文章:Linux panel series configure reverse proxy and use non-443 port for publishingandDocker series uses Docker to build its own reverse proxy based on NPMas well asDocker series uses Docker to build a graphical nginx based on nginx Web UI.

视频分享平台

如果要将视频托管在各大平台,比如B站,抖音,优酷甚至油管等,是要花钱的,并且,还有还有内容审核的问题,那比如自己建设一个类油管的视频平台,然后自己的博客引用自己视频平台的视频,岂不妙哉?这就是peertube了,具体搭建的过程,参看:Docker series builds a private video sharing platform based on peertube (Part 1).

轻型文件共享平台

如果只是简单的分享一般的不大的文件,对象存储的方式显得较为低效且不方便,这个时候可以使用pingvin-share,其除了搭建方便,文件存储结构简单,嵌入式数据库也减少了初始化的麻烦,最关键的是,一个链接就可以分享整个目录,且还能够随时更新目录里的文件而不用重新生成分享链接。其“反向共享”功能,能通过一个链接让其他人进行文件的上传,这在有些场合也有奇效。具体搭建和使用效果,参看:Docker series uses Docker to deploy a lightweight file sharing platform based on pingvin-share.

SSL证书一站式管理

随着我使用SSL证书的数量和部署位置的增加,如何减少管理维护成本是个问题:在腾讯云的CDN上多个加速域名采用了上传的Let’s Encrypt的证书,同时家里和腾讯云的轻量云主机的宝塔面板上都部署了多个站点,同时也采用了Let’s Encrypt的证书(还是多个主域)。通过一站式解决方案OHTTPS,可以成功解决多站点多位置部署的SSL证书自动更新及一站式管理,具体使用教程请参看:Home Data Center Series SSL Certificate One-Stop Management Tool OHTTPS Usage Tutorial.

集中式运维平台

虽然uptime-kuma能够实现简单的应用健康检查和外部探测式的故障通知,但是很多时候,我们需要集中式平台来统一观测到所有的主机、应用的实时资源消耗以及一些不能通过外部探测方式检查的应用的健康情况(例如127.0.0.1上的应用)。所以,我们需要一个集中式的运维界面,并且能支持agent-server的方式来部署,wgcloud恰好能满足我们的要求。

具体搭建和使用参见:Home Data Center Series Deploy Your Own Operation and Maintenance Monitoring System Through wgcloud (Part 1): ConstructionandHome data center series deploys its own operation and maintenance monitoring system through wgcloud (Part 2): Functional part.

The content of the blog is original. Please indicate the source when reprinting! For more blog articles, you can go toSitemapUnderstand. The RSS address of the blog is:https://blog.tangwudi.com/feed, welcome to subscribe; if necessary, you can joinTelegram GroupDiscuss the problem together.
No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠(ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ°Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Emoticons
Emoji
Little Dinosaur
flower!
Previous
Next
       

This site has disabled the right mouse button and various shortcut keys. The code block content can be copied directly by clicking the copy button in the upper right corner

en_US