用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的內容貼上去。
![[add-key-to-gp]](/2024/03/12/hexo-google-indexing-script-github-actions/image.png)
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 |
![[result]](/2024/03/12/hexo-google-indexing-script-github-actions/image-1.png)
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的網址,然後點選驗證
,然後選擇一個方法來驗證。
![[verify]](/2024/03/12/hexo-google-indexing-script-github-actions/image-3.png)
驗證成功後,你就可以在Google Search Console裡面看到你的部落格的資訊。
![[gsc]](/2024/03/12/hexo-google-indexing-script-github-actions/image-4.png)
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的執行狀況。
![[result]](/2024/03/12/hexo-google-indexing-script-github-actions/image-8.png)
用Github Actions 和 GIS 來自動部署Hexo和建立網站索引
https://blog.ytli.tw/2024/03/12/hexo-google-indexing-script-github-actions/