用Github Actions 和 GIS 來自動部署Hexo和建立網站索引
在用Hexo建立部落格之後,第一件重要的事情就是要減少除了寫文章以外的事情例如部屬等等,也會希望Google可以將自己的部落格建立索引 (index) 。這篇文章會介紹如何使用Hexo + Google Indexing Script + Github Actions來達成這個目標。
建立 Github Actions Workflow 來自動部署
Githuab Actions是一個可以自動化執行一些任務的工具,例如測試、部署等等。開發者可以自由設定任務的觸發條件,例如push到master branch後、每天定時執行等等。在這個例子裡面,我們會使用Github Actions來自動化執行部署和建立索引的任務。首先我們先專注在hexo部署的部分。
在我的例子裡面,我使用了Github Pages來部署我的部落格,也就是存放hexo產生後的靜態檔案的repo,是一個會叫做username.github.io的repo。我的Hexo Source Code則是存在另外一個private的repo,Github Actions就是要在這個repo裡面建立和執行的。在我每次 hexo new post
後並把文章寫好後,我會push到這個private repo,然後Github Actions就會自動執行部署的任務,產生靜態檔案,並且deploy到Github Pages的repo裡面。
要進行下面的步驟之前,請先確定你的hexo部署是正常的,也就是當你直接在local執行 hexo deploy
後,你的部落格是可以正常在Github Pages上面顯示的。
1. 取得 Deploy Key
首先在你的local端產生一個新的ssh key,並且將這個key加入到你的Github Pages repo的deploy key裡面。輸入以下指令:
1 | ssh-keygen -t ed25519 -C "<email>" -f ga-deploy |
你可以改變這個key的名稱,這個key是用來讓Github Actions可以push到你的Github Pages repo的。
你應該會獲得兩個檔案,一個是id_ed25ga-deploy519
,一個是ga-deploy.pub
。ga-deploy
是private key,ga-deploy.pub
是public key。接著你可以將ga-deploy.pub
的內容加入到你的Github Pages repo的deploy key裡面。這樣Github Actions就可以使用這個key來push到你的Github Pages repo。
2. 將Public Key加入到Github Pages repo的Deploy Key裡面
輸入cat /path/to/ga-deploy.pub
,然後複製這個public key的內容。接著到你的Github Pages repo的deploy key頁面,新增一個deploy key,並且將這個public key的內容貼上去。
3. 將Private Key加入到Source Code Repo 的 Github Actions 的 Secrets裡面
進入 Hexo Source Code的repo,然後點選Settings
-> Secrets and variables
-> Actions
,然後新增一個名為DEPLOY_KEY
的secret,並且將private key ga-deploy
的內容貼上去。
1 | cat /path/to/ga-deploy |
4. 在 Source Code Repo 建立一個新的 Github Actions workflow 檔案
首先在我的Github Repository裡面建立一個新的workflow檔案,檔案名稱為.github/workflows/google-indexing.yml
。
裡面要自動化的步驟如下:
- 取得source code (actions/checkout)
- 安裝node.js (actions/setup-node)
- 設定環境 (Configuration environment)
- 這裡會將
DEPLOY_KEY
的secret取出來,並且設定到HEXO_DEPLOY_PRI
的環境變數裡面。 - 同時設定git的使用者名稱和email等等。
- 這裡會將
- 還原檔案的修改時間 (Restore file modification time)
- 這是為了讓hexo deploy後的檔案的修改時間是正確的。否則checkout後的檔案的修改時間會是現在的時間。部落格的文章會根據修改時間來顯示和排序,所以很重要。
- 安裝hexo的相依套件 (Install dependencies)
- 部署hexo (Deploy hexo)
1 | name: HEXO CI |
5. Push到Github Source Code Repo
到這裡,將這個workflow檔案push到你的Github Source Code Repo裡面,然後Github Actions就會自動執行這個workflow。
你可以在Actions
頁面看到這個workflow的執行狀況。你可以隨便改一個文章來測試這個workflow是否正常執行。
加入 Google Indexing Script
我們開始寫部落格之後,也會希望Google可以將自己的部落格建立索引 (index) ,這樣別人搜尋的時候就可以找到你的部落格。這裡我們會使用Google Indexing Script來達成這個目標。
1. 先去Google Search Console 驗證你的部落格
你可以在右邊打上你github pages的網址,然後點選驗證
,然後選擇一個方法來驗證。
驗證成功後,你就可以在Google Search Console裡面看到你的部落格的資訊。
2. Google Indexing Script
在Google Search Console有個網址審查的功能,你可以將你的部落格url或是某篇文章的url進行審查,那麼過不久就可以在google search搜尋到,你可以在搜尋引擎打上site:your-blog-url
來看看你的部落格有沒有被建立索引。但因為文章很多的話,這樣一篇一篇點會很麻煩,所以我們使用Google Indexing Script 來自動化這個過程。他是利用Google Search Console的API來達成這個目標(應該),你可以看他的github頁面來了解更多。
使用這個script有幾個先決條件:
- 你的網站需要在google search console驗證過
- 你的網站需要有一個Sitemap
- 你需要在Google Cloud Platform建立一個新的Project並且取得一個Service Account的 API Key
- 你需要在google search console裡面加入這個API Key,並且給予他網站擁有者的權限
2.1. 取得網站的Sitemap
Site map是一個xml檔案,裡面包含了你部落格的所有文章的url和相關資訊,這樣google就可以從這個檔案裡面找到你的文章。
可以參考這篇
懶人包:
npm install hexo-generator-sitemap
- 在
_config.yml
裡面加入1
2sitemap:
path: sitemap.xml - 你可以在
your-blog-url/sitemap.xml
看到你的sitemap - 在google search console裡面加入sitemap
2.2. 在Google Cloud Platform建立一個新的Project
在https://console.cloud.google.com/ 建立一個新的Project,然後在這個Project裡面建立一個Service Account,並且取得一個API Key。
- 直接按左上角的Project欄位來新增一個新的Project
2.3. 建立服務帳戶 service account 並且取得API Key
點選左邊的
IAM & Admin
->服務帳戶 Service Accounts
->建立服務帳戶 Create Service Account
- 輸入名稱後直接點選
Save
就好
- 輸入名稱後直接點選
點選剛剛建立的服務帳戶,然後點選
金鑰 Keys
->新增金鑰 Create Key
->JSON
- 這樣你就會下載到一個json檔案,這個檔案就是你的API Key
- 把這個json檔案放到你的Github Source Code Repo的Secrets裡面,並且取名叫做
service_account.json
。
2.4. 在 Google Search Console 加入 API Key
打開你的service_account.json
,把裡面的client_email
複製下來,然後到Google Search Console裡面,點選左邊的設定
-> 使用者與權限
-> 新增使用者
,然後把剛剛複製下來的client_email
貼上去,並且選擇擁有者
的權限。
2.5. 在 Github Action 加入 Google Indexing Script
按照一樣的方式,將service_account.json的內容加入到你的Github Source Code Repo的Secrets裡面,並且取名叫做SERVICE_ACCOUNT_JSON
。然後新增一個流程到剛剛的workflow裡面。
gis
後面要加入你的部落格網址,再指定--path
參數為你的service_account.json
的路徑。
1 | - name: Google Indexing Script |
完整的workflow檔案如下:
1 | name: HEXO CI |
結果
到這裡,你的部落格就會在每次部署後自動建立索引了。你可以在Actions
頁面看到這個workflow的執行狀況。
用Github Actions 和 GIS 來自動部署Hexo和建立網站索引
https://blog.ytli.tw/2024/03/12/hexo-google-indexing-script-github-actions/