本文介紹如何基於各種雲服務優雅且低成本地搭建個人網站,涉及的雲產品有云伺服器、SSL、企業郵箱、物件儲存、CDN、雲函式、API閘道器、雲監控等。
概述
如今雲服務提供商們提供了大量涵蓋計算、網路、儲存等方面的雲服務,其中一些雲產品功能強大,如果能善加利用可以大幅降低開發和運維的成本。下面以基於騰訊雲搭建的個人網站為例,對網站整體的架構進行介紹。
網站目前的主要功能是個人部落格,後續可以擴充套件如個人網盤等其他應用。當前架構圖如下:
一、基礎設施
1.雲伺服器CVM
雲伺服器使用的是CVM,1核2G,下行頻寬1Mbps,這個配置用來搭建起步階段的個人部落格是完全夠用了,購買學生機或者在活動時購買價格也比較便宜。
有了伺服器資源就可以開始部落格搭建,我選的部落格系統是極簡主義的Typecho,安裝過程可以參考這篇博文,主要是在伺服器上安裝nginx、mysql、php以及typecho的原始碼。
2.域名
註冊 - 備案 - 解析
伺服器建立後同時會分配一個公網ip,但是為了便於分享和傳播,建議進行域名註冊。註冊後需要進行備案,現在的備案流程也已經簡化為在小程式上操作,省去了原有的幕布拍照環節,前後大概1-2周時間就可以完成備案。之後在控制檯進行域名解析,即繫結域名和伺服器ip,注意對帶或不帶www字首的域名都要進行解析,完成解析後就可以在瀏覽器通過域名來訪問網頁了。
主域名的確定
為了便於SEO,建議根據個人喜好確定一個主域名,因為搜尋引擎對於帶www和不帶www字首的地址是當成兩個網站分開計算權重的。國內網站一般帶www,而國外網站(如github、stackoverflow、leetcode)等是不帶www的。我這裡是選擇不帶www的地址(zhayujie.com),並在nginx中配置對帶www的訪問301重定向到不帶www上,以集中權重。
企業郵箱
擁有域名後,還可以註冊以自己域名為字尾的企業郵箱,基礎版免費使用且賬號數量無上限,再也不用擔心郵箱號不夠用了(如微信公眾平臺註冊),郵箱格式類似於 zyj@zhayujie.com
。
3.全站HTTPS
為了網站安全以及利於SEO,建議支援https協議訪問網站。可以申請免費的SSL證照,將證照和私鑰放置到伺服器,並在nginx中開啟並配置SSL。同樣為了避免分散權重,可以把http訪問的請求301重定向到https上。以我的網站為例,帶不帶www以及是否使用https都會統一訪問https://zhayujie.com/。
二、基於COS和CDN的圖床
1.物件儲存COS
由於伺服器下行頻寬有限,如果圖片儲存於我們自己的伺服器,出現併發訪問時可能導致頻寬超限,訪問速度下降。所以可以把圖片儲存到 COS(Cloud Object Storage)中,搭建自己的圖床,這樣當部落格同步到其他部落格平臺時,也便於對圖片資源進行統一管理。
COS的使用比較簡單,類似於網盤,在儲存桶中可以建立樹狀目錄結構,每個儲存桶(bucket)會分配一個公網域名,其下的檔案通過https://{bucket}/{dir}/{filename}
的形式進行訪問。但在部落格中直接使用該連結是不妥的,因為一旦我們遷移到其他雲服務商或者切換其他的儲存方式了,原有的連結就失效了,一一修改成本太高。好在cos支援配置自定義域名,可以通過類似http://{domain}/{dir}/{filename}
的地址進行訪問。
2.內容分發網路CDN
COS的自定義源站域名不支援https訪問,為了不影響我們的全站https,並且同時提升訪問速度和減少流量成本,可以配合CDN服務,開啟自定義CDN加速域名,具體步驟見文件。
可以選取一個子域名作為cdn自定義域名,新增CNAME解析,這樣通過自定義域名會首先訪問cdn邊緣伺服器,如果未命中則回源到cos。例如上面的圖片我配置的地址是https://blog.cos.zhayujie.com/web/blog-cloud-arch.jpg。
三、基於Serverless的訊息服務
1.雲函式SCF
在部落格開發過程中會遇到一些傳送訊息的功能,比如讀者回覆文章時給筆者傳送通知,筆者回複評論時給讀者傳送通知,博文釋出時給訂閱的讀者傳送通知等等。這種訊息通知的功能是很適合單獨拆分出來形成一個訊息服務的,如果寫在部落格原始碼中則複用性差(網站下其他應用要傳送訊息時需要重寫),而單獨部署服務又會增加運維的成本(如果服務掛掉怎麼辦),這時候可以考慮serverless(無伺服器)的架構,僅將我們的核心程式碼片段託管給雲服務商。
騰訊雲提供了雲函式SCF(Serverless Cloud Function),是一種FaaS技術。對於訊息通知這種非同步、無狀態的功能,很適合使用雲函式編寫,比如接收到請求後向指定接收人傳送一封郵件。
2.API閘道器
雲函式的觸發方式有多種,最常用的有定時任務和API閘道器。由於訊息通知是通過事件觸發而不是定時觸發,所以選擇API閘道器,建立了觸發器後便可從公網直接訪問該函式,與Nginx反向代理的作用類似。
API閘道器的域名是隨機生成的,不利於對未來變化的擴充套件,故同樣繫結自定義域名,使用https://{domain}/{function}
形式的地址觸發函式。例如我的郵件傳送函式地址配置為https://apigw.zhayujie.com/commentNotice
,在業務程式碼中只需向該地址傳送POST請求即可觸發郵件投遞。
四、監控、快照和統計
1.監控告警
伺服器的監控和告警同樣很重要,有助於我們及時發現並排查問題。監控部分一般直接在控制檯的 雲伺服器 - 例項 - 監控 中進行檢視,有對不同時間週期和時間粒度下的CPU、記憶體、頻寬、磁碟等的詳細資料。
告警部分則在雲監控中配置,可以配置多種報警策略如對cpu、記憶體、頻寬等指標超出閾值後進行告警,以及一些機器故障事件(如ping不可達、機器重啟等)。對COS的報警同樣可以在此配置。告警渠道可以是微信、郵件和簡訊。
2.快照
為了防止伺服器硬碟中的資料遭到攻擊或被誤刪,可以在 雲伺服器 - 快照 控制檯中設定進行快照備份,並且支援定期快照策略,設定每隔一段時間自動建立新的快照。
3.訪問統計
對網站的訪問情況進行統計分析有利於我們優化網站內容和體驗。對於訪問資料統計使用的是百度統計,使用埋點方式接入,可以檢視每一個訪客的地域,來源,搜尋詞,轉化等資訊,統計訪問量趨勢。
對於搜尋引擎工具使用的是百度站長工具,用於提交頁面收錄,檢視索引量、抓取頻次等資料。
總結
以上就是一個功能齊全的個人部落格的搭建過程,大致計算一下成本,雲伺服器活動期購買一百一年,域名一般幾十塊一個,而COS、CDN、SCF等產品都有大量的免費額度,且在建站初期流量費用同樣是微乎其微,所以總體算下來成本是極低的。個人開發者可以把個人網站當做一個產品來做,思考如何利用好公有云的各種雲產品資源來提升使用者體驗,提高開發效率,降低運維成本。