Hexo + GitHub Actions 部屬網站遷移全紀錄
Mac 放上 GitHub Repo 後,從 Windows 的 WSL 透過 git clone 拉回來嘗試 Generate 也成功。
但每次都要下 hexo deploy(因為我是用 Git Deploy),而且不同環境可能 .deploy_git 不同步而導致 Deploy 錯誤。
其實想想,最後的 Deploy 可以直接丟給 GitHub Actions 完成就好,本機只要測試 hexo generate 有沒有把最新文章產生成功就好。
梗圖 Meme

架構圖 Architecture

Hexo 上的 GitHub Actions 是 Source 跟 GitHub Pages 是同一個 Repo 但不同分支上(Source 在 main/master 分支,GitHub Pages 在 gh-pages 分支)。
本次示範的 Source 跟部屬的 GitHub Pages 將會是不同 Repo 底下。
Hexo Source:blog-source
GitHub Pages:blog
設定 GitHub Actions Setting GitHub Actions
1. 準備 Deploy key
要準備 Deploy key 就要用 ssh-keygen 生成公鑰私鑰
ssh-keygen -t ed25519 -C "<YOUR_EMAIL>" -f deploy
<YOUR_EMAIL> 可以替換成你的 GitHub Email 或者照下面填寫 GitHub Action Bot 的 Email。
1 | |
Enter passphrase 就直接按下 Enter 鍵跳過。
之後就會生成 deploy.pub 跟 deploy 兩個檔案。
deploy.pub 是公鑰deploy 是私鑰

2. GitHub Pages 專案中放上公鑰
點到要部屬的 GitHub Pages 的 Repo(本範例為 blog)
Setting $\rightarrow$ Deploy keys $\rightarrow$ Add deploy key

Title:打上你想取的名字。
Key:將 deploy.pub 公鑰內容貼到這裡。
Allow write access 打勾,這樣才能給 GitHub Actions 部屬。
完成就按下 Add key。

這樣就新增放上公鑰了。
3. Hexo Source 專案中放上私鑰
點到放 Hexo Source 的 Repo(本範例為 blog-source)
Setting $\rightarrow$ Secrets $\rightarrow$ Actions $\rightarrow$ New repository secret

Name:DEPLOY_KEY
Value:將 deploy 私鑰內容貼到這裡。
完成就按下 Add secret。

這樣就新增放上私鑰了。
4. 設定 GitHub Actions
點到放 Hexo Source 的 Repo(本範例為 blog-source)
按下 Actions 裡面 set up a workflow yourself

貼上下面的內容
1 | |
大概解釋一下這個 .yaml 在做什麼
Line 3:Push 的時候觸發下面這些 Jobs
Line 5-6:設定環境變數 Timezone 為 Asia/Taipei(為什麼要寫後面我會解釋)
Line 13-16:把此專案 Checkout 下來。
Line 17-18:設定 Timezone 為 Asia/Taipei。
Line 19-22:套件管理我習慣用 yarn,執行 yarn install,這裡你也可以替換成 npm 相關的 Steps。
Line 23-29:這裡我使用 sma11black/[email protected] 幫我完成自動化部屬 Hexo。
如果前面產生的 Deploy key 是用自己的 Email,那麼這裡的 user_name 和 user_email 分別填寫上你的 GitHub Username 跟 Email。
如果是用 GitHub Actions Bot 來產生的 Deploy key,可以直接把 Line 27 & 28 刪除。
Line 30-32:取得部屬狀況。
小陷阱 Little trap
當初沒有改 Timezone 的時候,跑了 Actions 沒有問題,但是……

因為 GitHub Actions 的 Runner server 都在國外,通常國外預設的時間都是 UTC 或者美洲時間,如果想要以台灣時間為準,就必須要對 Runner 設定 Timezone 為 Asia/Taipei。
其實我有發現 GitHub Actions 如果你步驟有使用 uses,它就會跑在 Docker container 裡面,Container 時間通常也是 UTC,所以這也是為什麼要在 Line 5-6 設定 TZ。
改完後就全部校正回歸了,可喜可賀!

至於什麼 SEO 優化,就暫時不想管了,感覺好麻煩 T_T。
