我最近決定在 GitHub 上利用 GitHub 的 Action 構建一個穩定且一直能存在的部落格,國內訪問不一定快,但勝在一直都有。
但是,如果採用傳統方法推送部落格到 GitHub 站點倉庫的話,這意味著我需要每次更新部落格都需要重新 Git 推送站點。
當然,這對於本地 md 文件寫部落格的人來說倒也沒什麼。但不幸的是,我自建了 Qexo 作為在線編輯器,顯然傳統的部署方式肯定是不行的。在之前,我一直發愁這個問題。
直到後來我在用 GitHub Action 來續訂微軟 e5 的時候突然才想起不是還有這東西嗎,於是去用它建立了一個全自動部署的 GitHub 托管站點
Step.1 本地運行檢查#
在進行部署之前,首先我們要確保站點本地是能順利運行並且能夠生成正常的靜態站點文件。
部署一個 Hexo 部落格(部署 Hexo 請參考 Hexo.io 的官方文檔)
部署完成後,在站點根目錄下運行如下指令(指令可簡寫為 hexo s)
hexo server
訪問http://localhost:4000 後,在確保站點能夠順利正常顯示內容並且運行正常後,再運行如下指令檢查站點靜態文件是否生成正常(hexo clean 不可簡寫,但 hexo generate 可簡寫為 hexo g)
hexo clean && hexo generate
如果能夠生成正常,再運行一次 hexo clean 清除靜態文件,本地運行檢查步驟就完成了。
Step.2 配置文件#
關於如何將倉庫上傳至 GitHub,請自行查詢資料,此處只介紹上傳後的相關配置
首先先確認 Hexo 的配置文檔 config.yml 有如下配置
deploy:
type: git
repository: [email protected]:yzsong06/Demo.git
branch: main
此處 Repository 請自行設置為你的 GitHub Pages 倉庫,例如 xxx.github.io 注意使用 SSH 地址!
Step.3 生成密鑰#
對於一些用戶……
- 對於 Windows10 用戶,可在 Store 商店安裝 Ubuntu
- 對於安卓用戶,可安裝 Termux 並安裝 OpenSSH
- 對於 Linux 用戶,呃…… 你都用 Linux 了應該懂(Doge)
ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key -N ""
這將會在當前目錄生成兩個文件:
github-deploy-key —— 私鑰
github-deploy-key.pub —— 公鑰
我們把私鑰放到我們存放 Hexo 原始文件的代碼倉庫裡面,用於觸發 Actions 時使用。
把公鑰放到 GitHub Pages 對應的倉庫裡面,並開啟 Action 的寫入權限,用於 Hexo 部署時的寫入工作。
配置私鑰:
- 在 GitHub 上打開保存 Hexo 的倉庫,訪問 Settings -> Secrets -> New secret
- 然後在名字(Name)部分填寫:HEXO_DEPLOY_KEY
,一定要注意大小寫,這個後面的 GitHub Actions 用的到,一定不能寫錯。 - 然後在 Value 的部分填入 github-deploy-key 中的內容
配置公鑰:
- 接下來我們需要訪問存放網頁的倉庫,也就是 Hexo 部署以後的倉庫,比如:Username.github.io 這種,訪問 Settings -> Deploy keys
- 按 Add deploy key 來添加一個新的公鑰
- 在 Title 中輸入:HEXO_DEPLOY_PUB 字樣,當然也可以填寫其它自定義的名字,這裡只是備註。
- 在 Key 中粘貼 github-deploy-key.pub 文件的內容
- 勾選 Allow write access 來打開寫權限,否則會無法寫入倉庫導致部署失敗
Step.4 建立 Workflow#
首先在 Hexo 的倉庫中創建一個新文件 .github/workflows/push.yml
,文件名可以自己取,但是一定要放在
.github/workflows目錄下,也可使用Action的新建功能建立文件,文件內容如下
name: 部署站點
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v1
- name: 設置為 Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: 配置環境變量
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "yzsong06"
git config --global user.email "[email protected]"
- name: 安裝部署時運行環境
run: |
npm i -g hexo-cli
npm i hexo-deployer-git --save
npm i
- name: 生成站點靜態文件
run: |
hexo clean && hexo generate
- name: 使用hexo-deployer部署站點
run: |
hexo deploy
Step.5 完成#
接下來保存文件後一般即可在倉庫的 Action 頁面看到反饋結果了,Job 出現綠色對號即為部署成功!