Hexo一鍵部署到阿里雲OSS並設置瀏覽器快取

自建部落格地址://bytelife.net,歡迎訪問! 本文為部落格自動同步文章,為了更好的閱讀體驗,建議您移步至我的部落格👇

本文作者: Jeffrey
本文鏈接: //bytelife.net/articles/52761.html
版權聲明: 本部落格所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!


現在用Hexo來搭建靜態站點的人越來越多了,很多人會選擇試用Github Pages服務來部署自己的靜態站,但Github Pages中國訪問速度實在無法接受,本文介紹一下如何一鍵使用阿里雲OSS對象存儲服務部署Hexo站點,同時解決一個瀏覽器快取的坑。

加速方案

  • Netlify:與Github配合使用很方便,但中國訪問速度不佳,需要搭配中國CDN使用
  • Vercel:與Netlify類似,中國訪問速度不錯,域名沒有備案的話是個不錯的選擇
  • 對象存儲:使用阿里雲OSS或類似的對象存儲服務,中國訪問速度不錯,也可搭配中國CDN使用,速度最好,但要求你的域名有備案號
  • 境內對象存儲+境外Vercel/Netlify:我所採用的方案,應該是最佳的方案了

創建Bucket

首先要做的事情就是去阿里雲(//aliyun.com)創建一個Bucket:

  • Bucket名稱:隨便起,只要不重複就行
  • 地域:按你的需求,阿里雲的節點中國訪問速度都可以,如果你不打算使用CDN服務的話,可以選擇華東節點,全國訪問速度都能兼顧。如果使用CDN服務的話,那就沒區別了,選哪都行。
  • 存儲類型:一般選擇標準存儲就可以了,當然如果訪問量很小的話,選擇低頻訪問存儲也可以,可以省一點錢。
  • 同城冗餘存儲:不需要
  • 版本控制:不需要
  • 讀寫許可權:這裡要注意,我們選擇公共讀,切記不能選擇私有,一方面如果不開啟CDN的話,私有許可權無法在公網訪問。另一方面,如果開啟CDN,阿里雲的CDN私有回源功能與OSS的靜態頁面功能衝突(別問我是怎麼知道的,都是坑)
  • 服務端加密方式:無
  • 實時日誌查詢:看需求,有免費7天的實時日誌查詢,但有900GB/天的限制
  • 定時備份:不開通

開啟靜態頁面功能

進入Bucket的配置頁面,選擇「基礎設置-靜態頁面」:

按照圖中的內容進行配置:

  • 默認首頁:index.html
  • 默認404頁:404.html(按照你實際的404頁面地址填寫)
  • 子目錄首頁:開通,這裡由於Hexo的分類、標籤等頁面,都是子目錄的形式(例如:/tags/),如果不開通這個功能,不會自動定位到對應目錄的index.html
  • 文件404規則:Index

創建AccessKey並授權

其實現在就可以在阿里雲的管理頁面上傳文件部署網站了,但實在是太麻煩,我們希望的是一個自動化的方案。這裡我們需要創建一個API的授權AccessKey:

阿里雲現在開啟了子賬戶授權的功能,因此我們可以選擇跳轉到子賬戶管理的頁面:

首先創建一個子賬戶:

這裡注意,由於我們這個賬戶是給API使用的,所以必須開啟編程訪問許可權:

返回以後,點擊剛創建的賬戶右側的「添加許可權」:

這裡搜索「OSS」,選擇添加AliyunOSSFullAccess許可權:

返回列表,點擊剛創建的賬戶名稱,創建一個AccessKey,這裡要注意,創建完AccessKey後,會顯示一個AccessKey和一個SecretKey,一定要保存好,只會顯示一次:

安裝一鍵部署腳本

我編寫了一個可以一鍵部署Hexo到阿里雲OSS的hexo插件,並支援配置瀏覽器快取HTTP響應頭。
源碼地址://github.com/huzhanfei/hexo-deployer-ali-oss-extend

使用很簡單,在hexo項目下執行安裝命令:

npm i hexo-deployer-ali-oss-extend

在hexo項目配置文件_config.yml中添加如下配置:

deploy:
- type: ali-oss
  region: "<您的oss 區域程式碼>"
  accessKeyId: "<您的oss  accessKeyId>"
  accessKeySecret: "<您的oss accessKeySecret>"
  bucket: "<您的bucket name>"
  cacheControl:
    images: "<圖片文件HTTP響應頭Cache-Control>,留空為no-cache"
    css: "<CSS文件HTTP響應頭Cache-Control>,留空為no-cache"
    js: "<JS文件HTTP響應頭Cache-Control>,留空為no-cache"
    html: "<HTML文件HTTP響應頭Cache-Control>,留空為no-cache"
    other: "<其它文件HTTP響應頭Cache-Control>,留空為no-cache"

其中區域程式碼,可以在OSS的Bucket概覽當中找到,如下圖所示:

另外,這裡增加Cache-Control功能,是由於OSS對象存儲並沒有針對常見的網頁文件(如css、js、圖片等)進行默認HTTP響應頭的設置,這些不常更新的文件不快取,會導致流量大量浪費,後面如果使用CDN的時候,CDN獲取不到快取配置也會進行不斷的回源,產生回源流量浪費。

配置就這麼簡單,然後執行部署命令:

hexo d

即可將項目部署到OSS中,默認情況下將文件上傳到bucket的根目錄下,如果需要部署到其他目錄,請在deploy下添加remotePath選項進行指定

    remotePath: "<您要部署的目錄>"

當然,如果你使用了GitHub的Actions功能,可以配置自動執行hexo d,提交源碼的時候自動執行部署腳本,簡直不要太方便,具體配置方式不是本文討論的重點內容,可自行研究。

配置自定義域名

其實做到這一步,就已經可以訪問你的網站了,可以在Bucket概覽頁面找到你的訪問域名,當然我們大概率需要使用自己的域名訪問,如果你的域名已經進行了備案,可以添加自定義域名。

可以在「傳輸管理-域名管理」中配置域名:

點擊「綁定域名」,在如圖所示的內容中填入自己的域名,如果你的域名解析伺服器是阿里雲的話,可以點擊「自動添加CNAME記錄」快速設置域名解析:

如果你的域名不在阿里雲解析的話,請根據頁面提示手動設置域名解析。

後話

到此,就可以通過你的域名訪問站點了,你也可以上傳SSL證書以開啟HTTPS訪問。
當然,如果你有更高的要求,也可以選擇更多的優化:

  • 開啟CDN服務:開啟CDN服務後,相當於在全國多地部署你了的鏡像站,以獲取更快的訪問速度,同時可以通過CDN服務開啟圖片壓縮、頁面優化等等功能
  • 分區域解析:設置DNS解析將中國解析到阿里雲OSS或CDN,國外解析到Netlify、Vercel甚至直接解析到GitHub Pages服務