兴起这个念头,也是因为自己在家部署了一大堆应用,而家里的宽带又是动态公网ip地址,所以有时候朋友需要访问的时候,都只能用http://动态域名:端口
的方式临时发给别人。本来http的方式就是明文,而且又不是标准80端口,所以手机浏览器或者微信内部浏览器都会提示不安全,显得逼格非常之低。
所以我就琢磨干脆以此为契机把家里的应用梳理一下(部署方式最好也能统一一下),然后通过反向代理统一使用https对外发布。但是互联网又是不安全的,既然都有应用对外正式发布了,安全性什么的是不是必须考虑上啊?然后又想,安全都考虑上了,那运维是不是也得跟上?。。。。。到最后,我想既然都考虑得这么多了,干脆就以搭建家庭数据中心为最终目的得了~。
另:家庭数据中心另外的优势,就是可以用民用电费换性能:一般低端云服务器的性能(cpu 1核、2核;内存1G、2G)很不咋样,未必比得上自己家用设备的性能(甚至差很远),比如我现在的两台主力设备:M1 macmini 乞丐版和售价高达3000多元的inter 13代cpu+64G内存的mini主机,如果换算成同等性能的云服务器,每个月得多少钱??简直想都不敢想,而现在只需要每月几十元电费就能拥有,它不香吗?
至于稳定性问题….现在阿里、腾讯云故障率也不算低啊。
当然,家庭数据中心最怕的情况就是停电了,这个我也没辙。这个问题我是通过在云服务器(最便宜的就成,主要是为了备案)上搭建容灾站点,平时云服务器上定时(几分钟一次)运行检测脚本探测家里wordpress主站点的可用性,一旦发现主站点中断(不管是停电还是断网),容灾站点就自动变为主站点开始提供服务。
注:要实现上述功能,需要一系列的底层关键技术支撑。
如前文提到的,要想访问家庭数据中心内的应用有个好的体验(逼格要高),就要解决域名后面加端口的问题,那这样一来就必须使用80和443端口,而要使用80和443端口,只靠家庭宽带本身的公网IP是没有办法的,需要借助其他方式来实现,有2大类方式。
1、域名不备案,使用cloudflare(家庭宽带有无公网地址皆可)
这种方式其实就是白嫖cloudflare的free计划提供的服务,这种方式是我推荐的方式,优点非常多:
a、不用备案
b、有多种回源方式可以选择,不管家庭宽带有没有公网地址都行(但是尽量不要用公网回源,现在国内运营商对于非备案域名访问查得很严)
c、cloudflare是通过边缘网络提供的一条龙服务:建站、cdn、基本的ddos防护、WAF,所以基本上对于一般的个人站长可以一站式解决,啥都不用操心了(当然,前提是会自己进行合理的设置,默认这些功能都是关闭,并且,这些也只是最基本的)。
当然,这种方式也有很多缺点,且比较大:
a、如果不能科学或者魔法,cloudflare官网可能都访问不了(部分地区可以直接访问,主要还是看脸)
b、要合理配置cloudflare的诸多功能需要一定的技术基础,且学习需要付出不短的时间成本
c、要直接架设起来能访问不难,但是要优化到国内访问较快需要折腾
虽然门槛较高,但是我还是推荐这种方式,因为虽然要学习要折腾,但是搭建家庭数据中心,本来不就是要折腾吗?况且我已经写了cloudflare系列教程,只要沉得下心来认真看,跟着操作,再自己琢磨下,相信都可以折腾出成果。
2、域名备案,使用国内CDN(需要家庭宽带有公网地址)
相对第一种方式而言,这种方式的优点是没有多高的技术门槛,是个人都可以,算是节省了学习诸多前置技术的时间成本,并且访问体验对国内的访问者而言是最好的;但是缺点是需要付出被折腾的时间成本:备案,以及更多的金钱成本:购买云主机(因为备案需要你发布的资源落点在国内可控机构)。
a、备案
对个人而言,备案最方便的方式是购买云主机(腾讯云、阿里云、其他),然后通过云主机供应商提供的备案系统进行备案,这种方式的好处是云主机供应商的备案部门会帮你审核备案资料,会告诉你哪些地方需要修改,并且定期检查的时候有问题会告诉你,甚至会告诉你如何应对~。
b、购买云主机
购买云主机一般是腾讯云和阿里云,当然也有其他的,不过这2个规模最大,是主流选择,而在这2个云供应商购买主机以后备案也很方便,所以我就在腾讯云购买了最便宜的轻量服务器(2核2G内存,50g硬盘,4兆带宽,一个月300g流量,有新手优惠,便宜~,优惠下来差不多一个月9元,我勉强承受得起)。这个服务器性能一般,不太可能用来跑太耗资源的应用和数据库等,但是可以用来跑一些轻量级应用和演示内容。
c、选择合适的国内CDN
只要域名是备案的,就可以任意选择国内的CDN供应商了,而不是非要选择你购买云主机的供应商。
选择CDN的关键标准是家庭宽带公网地址的类型:如果是IPv4公网地址,则随便选择哪个都行,就看哪家流量价格低;如果是IPv6地址,只能选择支持IPv6回源的CDN厂家(例如阿里云CDN)。
注:其实还有一种刁钻的建站方式是把这个轻量服务器作为一级反代,上游服务器指向家里的二级反代,但是这种方式的访问体验会受限于服务器的上行带宽,且要求家庭宽带有公网地址。
不过也有变种方案:上游服务器是通过虚拟组网地址指向家里的设备,那么家庭宽带没有公网地址也可以;然后通过轻量服务器供应商的CDN服务(比如我就是使用的腾讯云的轻量服务器,就用腾讯云的CDN)来加速轻量服务器上网站的访问,这种方式就不受服务器上行带宽的限制(因为是同一个供应商的CDN来回源服务器,属于内部流量,没有带宽和流量的限制),但是受服务器下行带宽的影响(因为通过虚拟组网地址访问家里的二级反代,得到的相应内容对服务器而言是下行带宽,不过一般服务器下行带宽最少都有10兆,回个源足够了),适合想搭建家庭数据中心又没有公网IP又想使用国内CDN的朋友。
然后建议至少准备2个二级域名:
1、备案域名
用来给家庭数据中心应用对外(国内)发布使用(域名解析就放在腾讯云上),建议除非不得已,否则一切应用发布都通过CDN,家庭数据中心只是作为源站,这样可以隐藏家庭宽带真实的IP地址,毕竟国内CDN也可以通过一些简单的设置得到一定的安全性(高频访问限制、TLS版本限制等)。
2、未备案域名
再准备一个域名托管在cloudflare上,享受cloudflare的一条龙服务,同时也可以让备案域名通过自定义主机名来蹭cloudflare的服务。
注:未备案域名托管于cloudflare上时,备案域名的3级域名也可以通过"自定义主机名"的方式接入cloudflare,享受cloudflare的服务,只不过使用这种方式接入的域名cloudflare默认只给予3个月有效期,到期后cloudflare会检查接入域名本身的SSL证书是否依然有效,有效的话会自动延长3个月的有效期,然后如此循环。
准备2个域名还有一个好处,就是家庭数据中心可以有2个入口:一个专供国内使用(备案域名,国内CDN),一个专供国外使用(未备案域名,cloudflare),同时如果因为不可抗因素导致国内的不能用了(备案失效?),可以方便的将国内使用的域名迁移到cloudflare上继续生效(速度可能会慢点但是至少可以保证可以访问,当然,器大活好会折腾,速度也不会慢太多~)。
最后是家庭数据中心的核心部分:以家庭宽带为出口的数据中心。这部分涉及到软路由、虚拟机、LXC(linux容器)、多种docker应用的搭建、堡垒主机的配置、web应用防火墙的搭建、应用的健康检查和故障报警、应用的负载均衡、数据库、自建游戏平台、自建影音库、运维和故障排查等等多方面的内容。这部分有个很关键的点就是:花钱的统统不要!毕竟自己自己兴趣所致,而且又是一个灵活就业人员,所以要钱没有,要命有一条!前面的购买域名,购买云主机,购买cdn都算是必须开销,自己没有办法控制,而家庭数据中心内部是完全可控的,因此选的都是免费的。但是免费不代表就没品质,要用技术投入来代替金钱投入,最后一样可以有好的体验!
这一系列一起组成了整个家庭数据中心的解决方案(内容太多,后续我慢慢写)。然后想想,项目文档的归纳整理也很重要,不然以后运维排错很麻烦,所以干脆搞个博客把所有涉及到的技术还有操作步骤都整理和记录下来,于是才有了这个博客。