最近重灌了電腦,近幾年內每次重灌也好,裝備新電腦也好,越來越覺得我的部落格是令我比較頭疼的事
因為前幾年從 WordPress
遷移到了 Hexo
,雖然變成了純靜態,訪問速度上提高了。但本地檔案的維護、文章的釋出就變得很繁瑣
比如
- 重灌必須備份
- 多臺電腦必須同步最新的
- 釋出文章需要在本地跑三條命令
多臺電腦同步的問題,我在家裡樹莓派上建了個 git
倉庫,專門同步文章。不過大部分時間都會忘記,並且配置檔案、主題的配置檔案都不在文章目錄,所以沒法同步
最近一次重灌我依然是手動備份,重灌後看著這個備份,覺得這樣下去不行,得趕緊拿出個更完美(懶)的方案
想起之前在一個瀏覽器外掛的倉庫看到了自動釋出指令碼,我有個瀏覽器外掛每次釋出都很繁瑣,因此早就想研究一下自動化
所以這次第一個念頭也是自動化:Github Actions
按照之前手動擋的流程是這樣的
- 清除快取
hexo clean
- 生成靜態檔案
hexo g
- 部署
hexo d
(執行一次git
推送) - 遠端倉庫
hooks
被觸發,自動去網站根目錄,git pull
最後網站根目錄拉取到文章,部署成功
其中 3
之前你需要在本地手動執行的,而且重灌或者換電腦意味著需要在遠端伺服器配置新的公鑰
新的半自動擋解決了 1-3
,你只需要進行一次 git 提交
其他的事情交給 Github Actions
整個流程是
- 建立金鑰,用於連線部落格伺服器
- 安裝
hexo
- 安裝
hexo
外掛 - 拉取主題
- 安裝主題依賴包
- 檢查主題目錄
- 配置
git
- 生成靜態檔案
- 部署!
name: publish
on:
push:
branches:
- master
jobs:
publish-blog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 14
registry-url: https://registry.npmjs.org/
- name: create keys
run: |
mkdir -p ~/.ssh
echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts
ls -l -a ~/.ssh
- name: install hexo-cli
if: steps.cache.outputs.cache-hit != 'true'
run: npm i -g hexo-cli
- name: install hexo dependencies
run: npm i
working-directory: hexo
- name: pull themes
run: |
mkdir -p hexo/themes
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git hexo/themes/butterfly
echo 'themes config'
cp hexo/themes_butterfly_config.yml hexo/themes/butterfly/_config.yml
echo 'background image'
cp hexo/images/bg.png hexo/themes/butterfly/source/img/bg.png
- name: install themes package
run: npm i
working-directory: hexo/themes/butterfly
- name: check themes package
run: ls -l
working-directory: hexo/themes/butterfly
- name: git config
run: |
git config --global user.name imba97
git config --global user.email mail@imba97.cn
git config --global init.defaultBranch master
working-directory: hexo
- name: hexo generate
run: |
hexo clean
hexo g
working-directory: hexo
- name: deploy!
run: |
git init
git add .
git commit -m "deploy!"
git remote add origin root@1.2.3.4:/git/blog.git
git push --force origin master
working-directory: hexo/public
經過了大概 40
次左右的測試,最後終於是成功部署
主要問題
期間主要解決 git push
不成功,私鑰問題
問題的關鍵是,你不但需要在 ~/.ssh/
下建立私鑰,還需要建立一個 known_hosts
,記錄已知的伺服器 IP
私鑰建立流程,我是在我本地建立了一對金鑰,把私鑰複製出來放到倉庫配置中
工作流使用的時候就把它寫入到檔案
echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa
記錄已知的伺服器 IP
也就是工作流的這一步
ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts
其他小問題
主要是主題,主題自定義的配置檔案和圖片,解決方案是直接放在倉庫,複製過去
所以如果你打算用以上工作流,還得根據自己的主題去改改
至此,我本地將不在管理部落格的任何東西,甚至寫部落格都可以隨時開啟 Github
來寫,比如現在
而且依然也可以在本地寫,如果換主題肯定還是要本地跑一下測一下的
總之,爽到了
為啥說是半自動擋呢,因為我感覺伺服器部分也需要繼續最佳化,不能透過 git hooks
的方式部署,這樣的話遷移到另一臺伺服器還得配置一遍,也是很麻煩的
之後考慮在工作流中用 sftp
直接上傳的方式部署,需要解決的問題是生成靜態檔案數量非常多,目前考慮可以先壓縮,再上傳,再給部落格伺服器傳送解壓命令
等不懶了搞一搞,再水一篇文章 ( ´_ゝ`)
本作品採用《CC 協議》,轉載必須註明作者和本文連結