興起這個念頭,也是因為自己在家部署了一大堆應用,而家裡的寬頻又是動態公網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都算是必須開銷,自己沒有辦法控制,而家庭資料中心內部是完全可控的,因此選的都是免費的。但免費不代表就沒品質,要用技術投入來取代金錢投入,最後一樣可以有好的體驗!
這一系列一起組成了整個家庭資料中心的解決方案(內容太多,後續我慢慢寫)。然後想想,專案文件的歸納整理也很重要,不然以後運維排錯很麻煩,所以乾脆搞個博客把所有涉及到的技術還有操作步驟都整理和記錄下來,於是才有了這個博客。