前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 Github Actions 自动部署 Hexo 博客

基于 Github Actions 自动部署 Hexo 博客

作者头像
晓晨
发布2022-09-07 15:27:40
9080
发布2022-09-07 15:27:40
举报
文章被收录于专栏:晓晨的专栏晓晨的专栏

前言

前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包、上传、解压和刷新 CDN,非常麻烦。我的服务器配置也不高 2C2G 无法安装 Jenkins,所以采用了比较简单和免费的 Github Actions 来进行打包、上传。然后我自己写了一个 Agent 来做解压和刷新 CDN 的工作,整套流程完全自动化。

如果 Hexo 博客是放在 OSS 存储里的,比如腾讯云 COS,可以不使用 Agent,直接通过 Github Actions 上传。

image-20220707130528538
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 方式运行

二进制
代码语言:javascript
复制
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
代码语言:javascript
复制
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

修改配置

代码语言:javascript
复制
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 配置

在你的博客根目录下新建文件夹

代码语言:javascript
复制
mkdir -p .github/workflows
cd .github/workflows

新建配置文件

代码语言:javascript
复制
touch deploy.yml

添加配置

代码语言:javascript
复制
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 部署包速度也是很快的

配置完成!

本地直接上传部署

用了两天,发现整个流程跑下来没问题,但是 Github Action Post 部署到到国内服务器还是很慢,所以写了个脚本,本地构建、打包、然后调用 Agent 接口上传,整个过程不到 5s 就完成了发布,分享一下脚本。

保存在博客根目录

代码语言:javascript
复制
set -e

hexo clean

hexo deploy

rm -rf tmp
mkdir tmp

cd public

zip -r ../tmp/site.zip ./*
cd ../

curl -X POST -F "f=@tmp/site.zip" http://<Agent 地址>/deploy/upload

hexo clean

rm -rf tmp

echo 'Complete!'

其他项目

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Hexo Deploy Agent
  • 快速开始
    • 部署 Agent
      • 二进制
      • Docker
    • 修改配置
    • Github Actions 配置
    • 本地直接上传部署
    • 其他项目
    相关产品与服务
    内容分发网络 CDN
    内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档