惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Y
Y Combinator Blog
月光博客
月光博客
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
博客园 - 司徒正美
V
Visual Studio Blog
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
The Cloudflare Blog

优世界

OpenWrt 路由器改纯 AP 模式记录(Cudy TR3000 + 中兴 F50) Ubuntu 24.04 安装 Zabbix 8.0 全记录 我的静态博客动态化方案 Claude Code 启动脚本 我的5G路由器方案:中兴F50+cudy tr3000 256MB 还是弃用了使用多年的全拼输入法 临走前一份襄阳牛肉面 EdgeOne Pages 部署 Twikoo 评论 一个朋友圈风格 Hugo 主题 搓了一个仿朋友圈的Hugo主题 一个人烧烤被拒单了 周末闲暇时间翻修了一下博客 我把Vercel换成了EdgeOne Pages 博客友链实时健康监测方案 Artalk评论区接入AI摘要的尝试 给Hugo博客添加瀑布流相册功能 Hugo静态博客如何实现搜索功能 Artalk评论系统实现段落评论功能 为什么我觉得网页昼夜切换那么重要 博客六周年:从折腾到回归平淡 如何hugo静态实现友联朋友圈功能 脂溢性皮炎的烦恼 还是放弃了iPhone16e 米环勿扰同步问题 除草日记 迁移博客至hugo 添加ikun摆件 parsec远程软件报6023错误 win11右键菜单改回win10方法 主板电流声
Hugo使用GitHub Action自动刷新多吉云CDN缓存
2024-09-16 · via 优世界

博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github

大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便

这里特别感谢博友 永恒末匕 likaijian.com 提供的方案

原方案地址:https://blog.cpen.top/posts/6f7759e0.html

这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站

快速食用

在你的项目的根目录,新建一个RefreshCDN.py的文件,代码如下

from hashlib import sha1
import hmac
import requests
import json
import urllib
import os

def dogecloud_api(api_path, data={}, json_mode=False):
    """
    调用多吉云API。

    :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
    :param data: POST 的数据,字典格式。
    :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。

    :return dict: 返回的数据。
    """
    access_key = os.environ.get('DOGECLOUD_ACCESS_KEY')  # 从环境变量获取 AccessKey
    secret_key = os.environ.get('DOGECLOUD_SECRET_KEY')  # 从环境变量获取 SecretKey

    if not access_key or not secret_key:
        raise ValueError("Access Key or Secret Key is not set in environment variables.")

    body = ''
    mime = ''
    if json_mode:
        body = json.dumps(data)
        mime = 'application/json'
    else:
        body = urllib.parse.urlencode(data)
        mime = 'application/x-www-form-urlencoded'

    sign_str = api_path + "\n" + body
    signed_data = hmac.new(secret_key.encode('utf-8'), sign_str.encode('utf-8'), sha1)
    sign = signed_data.digest().hex()
    authorization = 'TOKEN ' + access_key + ':' + sign

    response = requests.post('https://api.dogecloud.com' + api_path, data=body, headers={
        'Authorization': authorization,
        'Content-Type': mime
    })
    return response.json()

# 从环境变量中获取 URL 列表,使用逗号分隔
url_list_env = os.environ.get('CDN_URL_LIST')
if not url_list_env:
    raise ValueError("CDN_URL_LIST is not set in environment variables.")

url_list = url_list_env.split(',')

api = dogecloud_api('/cdn/refresh/add.json', {
    'rtype': 'path',
    'urls': json.dumps(url_list)
})
if api['code'] == 200:
    print(api['data']['task_id'])
else:
    print("API failed: " + api['msg'])

创建你的 GitHub Actions 脚本,在项目根目录创建 .github/workflows 目录,如果有该目录请忽略

接下来在.github/workflows 目录下新建 RefreshCDN.yml文件

yml文件配置如下

name: Refresh CDN

on:
  push:
    branches:
      - main

jobs:
  refresh-cdn:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v2

      - name: 安装 Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: 安装依赖
        run: pip install requests

      - name: 等待源站部署
        run: sleep 1m  # 这里用了个笨办法,等待 1 分钟后进行刷新

      - name: 刷新 CDN
        run: python RefreshCDN.py
        env:
          DOGECLOUD_ACCESS_KEY: ${{ secrets.DOGECLOUD_ACCESS_KEY }}
          DOGECLOUD_SECRET_KEY: ${{ secrets.DOGECLOUD_SECRET_KEY }}
          CDN_URL_LIST: ${{ secrets.CDN_URL_LIST }}

然后在你的GitHub项目仓库页面

依次进入 Settings -> Secrets and variables -> Actions -> New repository secret

创建三个密钥键值对,分别为

CDN_URL_LIST:值为 URL 列表,使用逗号分隔

例如:https://usj.cc/,https://5b2.cn/

DOGECLOUD_ACCESS_KEY:填入你的 AccessKeys

DOGECLOUD_SECRET_KEY:填入你的 SecretKey

多吉云密钥获取请访问:https://console.dogecloud.com/user/keys

按照如上步骤,设置完毕,你的仓库得有如下三个字段

f2736183148b132aea6cb14908e8e86

执行git提交,脚本就可以自动刷新多吉云缓存了

48dad6112a4e2110c95b04111084309

去多吉云控制台看看刷新预热,这样就是成功了