基於 Github Actions 自動部署 Hexo 部落格

曉晨Master發表於2022-07-07

前言

前不久使用了 Hexo 搭建獨立部落格,我是部署在我的騰訊雲輕量應用伺服器上的,每次都需要 hexo deploy 然後打包、上傳、解壓和重新整理 CDN,非常麻煩。我的伺服器配置也不高 2C2G 無法安裝 Jenkins,所以採用了比較簡單和免費的 Github Actions 來進行打包、上傳。然後我自己寫了一個 Agent 來做解壓和重新整理 CDN 的工作,整套流程完全自動化。

如果 Hexo 部落格是放在 OSS 儲存裡的,比如騰訊雲 COS,可以不使用 Agent,直接通過 Github Actions 上傳。

image-20220707130528538

Hexo Deploy Agent

Hexo 部署 Agent,基於 Github Actions 可實現完全自動化部署 Hexo 部落格,每次提交都會自動打包、部署、更新和重新整理 CDN 快取。

特性:

  • Golang 編寫,資源佔用低,能適應低配伺服器

  • 支援 Github Action 或者 Jenkins 等自動化工具

  • 通過 CURL 上傳部署包

  • 解壓、動態更新網站檔案

  • 目錄級別重新整理 CDN(目前僅支援騰訊雲)

  • 支援部署訊息推送(目前僅支援釘釘)

Demo: https://xcmaster.com/

開源地址:https://github.com/stulzq/hexo-deploy-agent

重新整理 CDN 的目的:因為 hexo 是以生成靜態檔案部署的,CDN 預設是全部快取了的,如果有變更需要主動重新整理,一般採用目錄重新整理的方式。

快速開始

部署 Agent

部署 Agent 需要虛擬機器或者輕量應用伺服器,支援二進位制和 Docker 方式執行

二進位制


export agent_version=v0.2.0

wget https://github.com/stulzq/hexo-deploy-agent/releases/download/$hexo_version/hexo_deploy_agent_$(agent_version)_linux_amd64.tar.gz

tar -xzvf hexo_deploy_agent_$(agent_version)_linux_amd64.tar.gz

cd hexo_deploy_agent_$(agent_version)_linux_amd64

# 修改配置 conf/config.yml

chmod +x hexo_deploy_agent
./hexo_deploy_agent

Docker

mkdir -p /data/hexo-deploy-agent/conf

curl https://raw.githubusercontent.com/stulzq/hexo-deploy-agent/main/conf/config.yml -o /data/hexo-deploy-agent/config.yml

# 修改配置 /data/hexo-deploy-agent/config.yml

docker run --name hexo-deploy-agent \
  -v /data/hexo-deploy-agent/conf:/app/conf \
  -v /data/hexo-deploy-agent/logs:/app/logs \
  -d stulzq/hexo-deploy-agent:v0.2.0

修改配置

log:
  level: Debug # 日誌級別

deploy:
  blog_dir: /wwwroot/blog # 網站根目錄
  cdn:
    enable: false # 是否啟用騰訊雲 cdn 目錄重新整理 https://console.cloud.tencent.com/cdn/refresh
    accessKey: # 騰訊雲 ak & sk https://console.cloud.tencent.com/cam/capi
    secretKey:
    flushType: flush
    refreshPaths:
      - https://xcmaster.com/ # 重新整理路徑
  dingtalk:
    enable: false # 是否傳送釘釘機器人訊息
    url: # 釘釘機器人 url

Github Actions 配置

在你的部落格根目錄下新建資料夾

mkdir -p .github/workflows
cd .github/workflows

新建配置檔案

touch deploy.yml

新增配置

name: Deploy

on:
  push:
    branches:
      - master

jobs:
  build:
    name: build and package
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          registry-url: https://registry.npmjs.org/
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Deploy
        run: npm run deploy
      - name: Package
        run: |
          mkdir /home/runner/work/release
          cd public
          zip -r /home/runner/work/release/site.zip ./*
          cd ../
      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: site
          path: /home/runner/work/release
      - name: Clean
        run: |
          rm -rf public
          rm -rf /home/runner/work/release

  publish:
    name: publish blog
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Download build artifacts
        uses: actions/download-artifact@v1
        with:
          name: site
      - name: upload
        env:
          UPLOAD_URL: ${{ secrets.UPLOAD_URL }}
        run: curl -X POST -F "f=@site/site.zip" $UPLOAD_URL

該配置依賴 Github Action Secret

進入專案倉庫的 Settings -> Secrets -> Actions 新建一個 Secret:

  • 名稱: UPLOAD_URL
  • 值:http://<agentIp>:<agentPort>/deploy/upload 示例:http://127.0.0.1:9190/deploy/upload

可以直接使用國內雲伺服器,POST 部署包速度也是很快的

配置完成!

其他專案

相關文章