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

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 部署包速度也是很快的
配置完成!
其他项目
- hexo-statistics Hexo 博客统计
基于 Github Actions 自动部署 Hexo 博客的更多相关文章
- 用GitHub Actions自动部署Hexo
什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...
- 使用Travis CI自动部署Hexo博客
自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...
- github travis-ci持续部署hexo博客
引言 目前我的博客源码是在coding上的,因为有很方便的持续部署,但是coding目前还不提供push文件的开放API. 因为最近做了一个一键分发平台,将博客分发到简书.CSDN等等的平台,但是我的 ...
- 在腾讯云上部署Hexo博客
推荐理由 ----搭建个人的空间博客目前深受个人开发者的追捧,然而博客的种类和平台有很多,Hexo是一个开源的静态博客生成器.相比于其他博客而言它只要是web容器就能用.除了闷头专研技术之外,程序员还 ...
- 在 Ubuntu 14.04 服务器上部署 Hexo 博客
版权声明:本文由宋秉金 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/241080001487926962 来源:腾云阁 ...
- 码云上部署hexo博客框架
title: 码云上部署hexo博客框架 Hexo框架在码云上实现个人博客 本文受 https://www.jianshu.com/p/84ae2ba1c133 启发编写 本地调试 安装完Node.j ...
- 让搭建在 Github Pages 上的 Hexo 博客可以被 Google 搜索到
title: 让搭建在Github Pages上的Hexo博客可以被Google搜索到 date: 2019-05-30 23:35:44 tags: 配置 --- 准备工作 搭建好的博客 npm & ...
- 使用GitHub Actions自动编译部署hexo博客
前言 使用hexo博客也挺久的,最开始是本地hexo clean && hexo g,最后hexo d推送到服务器.后来是本地hexo clean && hexo g, ...
- 使用 Azure 静态 Web 应用服务免费部署 Hexo 博客
一.前言 最近在折腾 Hexo 博客,试了一下 Azure 的静态 Web 应用服务,发现特别适合静态文档类型的网站,而且具有免费额度,支持绑定域名.本文只是以 Hexo 作为示例,其他类型的框架也是 ...
随机推荐
- MQTT物联网通讯协议入门
目录 一.MQTT协议概念 发布/订阅机制 MQTT客户端 Broker代理(服务器) MQTT消息结构 二.MQTT协议实现原理 MQTT连接 MQTT消息发布 MQTT订阅机制 MQTT订阅确认 ...
- python代码统计核酸检测结果截图
#QQ:502440275@qq.com#本截图适合安康码截图,如需其他地区截图统计,可与我QQ或QQ邮箱联系#1.在当前文件夹下创建imgs文件夹用于存放图片,图片格式.jpg#2.在当前文件夹下创 ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
- XCTF练习题---MISC---倒立屋
XCTF练习题---MISC---倒立屋 flag:flag{9102_cCsI} 解题步骤: 1.观察题目,下载附件 2.打开发现是个倒立的屋子,并没有发现啥东西,拿StegSolve看看 3.查了 ...
- vue实例vm的方法
import wbMessage from './wb-message' let Constructor = Vue.extend(wbMessage) let vm = new Constructo ...
- 《Mybatis 手撸专栏》第8章:把反射用到出神入化
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么,读不懂框架源码? 我们都知道作为一个程序员,如果想学习到更深层次的技术,就需 ...
- 干掉RedisHelper,请这样用分布式缓存
前言 我们在项目中使用Redis时通常是写一个单例模式的RedisHelper静态类,暴露一些常用的Get.Set等操作,在需要使用地方直接RedisHelper.StringGet(xx,xx)就可 ...
- 796. Rotate String - LeetCode
Question 796. Rotate String Solution 题目大意:两个字符串匹配 思路:Brute Force Java实现: public boolean rotateString ...
- 好客租房15-jsx中的条件渲染
jsx中的条件渲染 场景:loding效果 条件渲染:根据条件渲染特定的jsx结构 可以使用if/else或者三元运算符和逻辑和运算符实现 //导入react import React from &q ...
- 深度学习可视化工具--tensorboard的使用
tensorboard的使用 官方文档 # writer.add_scalar() # 添加标量 """ Args: tag (string): Data identif ...