9.16
This commit is contained in:
1 parent
8fe8ed0037
commit
bbf6e45204
85 files changed
+1281
-378
No files matched your search
@@ -0,0 +1,153 @@
|
||||
---
|
||||
title: "Hugo使用GitHub Action自动刷新多吉云CDN缓存"
|
||||
date: "2024-09-16T14:48:42+08:00"
|
||||
draft: false
|
||||
categories: []
|
||||
tags: []
|
||||
author: "小赵同学"
|
||||
layout: "post"
|
||||
status: "public"
|
||||
categories: ["教程"]
|
||||
tags: []
|
||||
---
|
||||
|
||||
博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github
|
||||
|
||||
大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便
|
||||
|
||||
这里特别感谢博友[永恒末匕](https://likaijian.com/)提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html
|
||||
|
||||
这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站
|
||||
|
||||
## 快速食用
|
||||
|
||||
在你的项目的根目录,新建一个`RefreshCDN.py`的文件,代码如下
|
||||
|
||||
```python
|
||||
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文件配置如下
|
||||
|
||||
```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`:填入你的 AccessKey。
|
||||
|
||||
`DOGECLOUD_SECRET_KEY`:填入你的 SecretKey。
|
||||
|
||||
多吉云密钥获取请访问:https://console.dogecloud.com/user/keys
|
||||
|
||||
按照如上步骤,设置完毕,你的仓库得有如下三个字段
|
||||
|
||||

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

|
||||
|
||||
去多吉云控制台看看刷新预热,这样就是成功了
|
||||
@@ -79,6 +79,17 @@
|
||||
var option;
|
||||
var dataMap = new Map();
|
||||
|
||||
var key = "2024-09-16";
|
||||
var value = dataMap.get(key);
|
||||
var link = "/post/dogeyun-auto-refresh-cdn/";
|
||||
var title = "Hugo使用GitHub Action自动刷新多吉云CDN缓存";
|
||||
|
||||
|
||||
if (value == null) {
|
||||
dataMap.set(key, [{link, title}]);
|
||||
} else {
|
||||
value.push({link, title});
|
||||
}
|
||||
var key = "2024-08-11";
|
||||
var value = dataMap.get(key);
|
||||
var link = "/post/migrate-to-hugo/";
|
||||
|
||||
@@ -83,6 +83,28 @@
|
||||
|
||||
|
||||
|
||||
<h3 class="diy-h3" uk-scrollspy="cls: uk-animation-slide-bottom-small; repeat: false" data-toggle="collapse"
|
||||
data-target="#collapse202409" aria-expanded="false"
|
||||
aria-controls="collapse202409">
|
||||
09月
|
||||
</h3>
|
||||
<div class="collapse" id="collapse202409"
|
||||
uk-scrollspy="cls: uk-animation-slide-bottom-small; repeat: false">
|
||||
|
||||
|
||||
<li data-date="20240916">
|
||||
<span class="articles_date_time">09/16</span>
|
||||
<a class="a-archives" uk-scrollspy="cls: uk-animation-slide-bottom-small; repeat: false"
|
||||
href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<h3 class="diy-h3" uk-scrollspy="cls: uk-animation-slide-bottom-small; repeat: false" data-toggle="collapse"
|
||||
data-target="#collapse202408" aria-expanded="false"
|
||||
aria-controls="collapse202408">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
+12
-12
@@ -6,7 +6,18 @@
|
||||
<description></description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>zh-cn</language>
|
||||
<lastBuildDate>Sun, 11 Aug 2024 20:52:39 +0800</lastBuildDate><atom:link href="https://usj.cc/categories/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<lastBuildDate>Mon, 16 Sep 2024 14:48:42 +0800</lastBuildDate><atom:link href="https://usj.cc/categories/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>教程</title>
|
||||
<link>https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml</link>
|
||||
<pubDate>Mon, 16 Sep 2024 14:48:42 +0800</pubDate>
|
||||
|
||||
<guid>https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml</guid>
|
||||
<description></description>
|
||||
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="教程" />]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>生活</title>
|
||||
<link>https://usj.cc/categories/%E7%94%9F%E6%B4%BB/rss.xml</link>
|
||||
@@ -18,17 +29,6 @@
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="生活" />]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>教程</title>
|
||||
<link>https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml</link>
|
||||
<pubDate>Fri, 01 Mar 2024 22:12:00 +0000</pubDate>
|
||||
|
||||
<guid>https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml</guid>
|
||||
<description></description>
|
||||
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="教程" />]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>相册</title>
|
||||
<link>https://usj.cc/categories/%E7%9B%B8%E5%86%8C/rss.xml</link>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
@@ -6,7 +6,138 @@
|
||||
<description></description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>zh-cn</language>
|
||||
<lastBuildDate>Fri, 01 Mar 2024 22:12:00 +0000</lastBuildDate><atom:link href="https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<lastBuildDate>Mon, 16 Sep 2024 14:48:42 +0800</lastBuildDate><atom:link href="https://usj.cc/categories/%E6%95%99%E7%A8%8B/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Hugo使用GitHub Action自动刷新多吉云CDN缓存</title>
|
||||
<link>https://usj.cc/post/dogeyun-auto-refresh-cdn/</link>
|
||||
<pubDate>Mon, 16 Sep 2024 14:48:42 +0800</pubDate>
|
||||
|
||||
<guid>https://usj.cc/post/dogeyun-auto-refresh-cdn/</guid>
|
||||
<description>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github 大概一分钟GitHub Action自动部署完成,还需要去</description>
|
||||
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="Hugo使用GitHub Action自动刷新多吉云CDN缓存" /><p>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github</p>
|
||||
<p>大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便</p>
|
||||
<p>这里特别感谢博友
|
||||
<a
|
||||
|
||||
href="/tiaozhuan/index.html?target=aHR0cHM6Ly9saWthaWppYW4uY29tLw%3d%3d"
|
||||
|
||||
target="_blank"
|
||||
>
|
||||
永恒末匕</a>提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html</p>
|
||||
<p>这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站</p>
|
||||
<h2 id="快速食用">快速食用</h2>
|
||||
<p>在你的项目的根目录,新建一个<code>RefreshCDN.py</code>的文件,代码如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">from</span> <span style="color:#000">hashlib</span> <span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">sha1</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">hmac</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">requests</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">json</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">urllib</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">os</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">def</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{},</span> <span style="color:#000">json_mode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">False</span><span style="color:#000;font-weight:bold">):</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">"""
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> 调用多吉云API。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param data: POST 的数据,字典格式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :return dict: 返回的数据。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> """</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_ACCESS_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 AccessKey</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">secret_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_SECRET_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 SecretKey</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">access_key</span> <span style="color:#204a87;font-weight:bold">or</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">secret_key</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"Access Key or Secret Key is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">json_mode</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/json'</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">urllib</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">parse</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">urlencode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/x-www-form-urlencoded'</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign_str</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">api_path</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">"</span><span style="color:#4e9a06">\n</span><span style="color:#4e9a06">"</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">body</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">signed_data</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">hmac</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">new</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">secret_key</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sign_str</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sha1</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">signed_data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">digest</span><span style="color:#000;font-weight:bold">()</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">hex</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">authorization</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'TOKEN '</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">':'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">sign</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">response</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">requests</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">post</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'https://api.dogecloud.com'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">body</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">headers</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Authorization'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">authorization</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Content-Type'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">mime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">return</span> <span style="color:#000">response</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">json</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 从环境变量中获取 URL 列表,使用逗号分隔</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list_env</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'CDN_URL_LIST'</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">url_list_env</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"CDN_URL_LIST is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">url_list_env</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">split</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">','</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">api</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'/cdn/refresh/add.json'</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'rtype'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">'path'</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'urls'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">url_list</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'code'</span><span style="color:#000;font-weight:bold">]</span> <span style="color:#ce5c00;font-weight:bold">==</span> <span style="color:#0000cf;font-weight:bold">200</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'data'</span><span style="color:#000;font-weight:bold">][</span><span style="color:#4e9a06">'task_id'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"API failed: "</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'msg'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span></code></pre></div><p>创建你的 GitHub Actions 脚本,在项目根目录创建 <code>.github/workflows</code> 目录,如果有该目录请忽略</p>
|
||||
<p>接下来在<code>.github/workflows</code> 目录下新建 <code>RefreshCDN.yml</code>文件</p>
|
||||
<p>yml文件配置如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Refresh CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">push</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">branches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">main</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">jobs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">refresh-cdn</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">runs-on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ubuntu-latest</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">steps</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">检出代码</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/checkout@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装 Python</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/setup-python@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">with</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">python-version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">'3.x'</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装依赖</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">pip install requests</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">等待源站部署</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sleep 1m </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># 这里用了个笨办法,等待 1 分钟后进行刷新</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">刷新 CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">python RefreshCDN.py</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_ACCESS_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_ACCESS_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_SECRET_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_SECRET_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">CDN_URL_LIST</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.CDN_URL_LIST }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span></code></pre></div><p>然后在你的GitHub项目仓库页面</p>
|
||||
<p>依次进入 <code>Settings</code> -> <code>Secrets and variables</code> -> <code>Actions</code> -> <code>New repository secret</code></p>
|
||||
<p>创建三个密钥键值对,分别为</p>
|
||||
<p>CDN_URL_LIST:值为 URL 列表,使用逗号分隔。</p>
|
||||
<pre tabindex="0"><code>https://usj.cc/,https://5b2.cn/
|
||||
</code></pre><p><code>DOGECLOUD_ACCESS_KEY</code>:填入你的 AccessKey。</p>
|
||||
<p><code>DOGECLOUD_SECRET_KEY</code>:填入你的 SecretKey。</p>
|
||||
<p>多吉云密钥获取请访问:https://console.dogecloud.com/user/keys</p>
|
||||
<p>按照如上步骤,设置完毕,你的仓库得有如下三个字段</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/f2736183148b132aea6cb14908e8e86.png" alt="f2736183148b132aea6cb14908e8e86" class="lazyload"></p>
|
||||
<p>执行git提交,脚本就可以自动刷新多吉云缓存了</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/48dad6112a4e2110c95b04111084309.png" alt="48dad6112a4e2110c95b04111084309" class="lazyload"></p>
|
||||
<p>去多吉云控制台看看刷新预热,这样就是成功了</p>
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>访客体验优化</title>
|
||||
<link>https://usj.cc/post/1279/</link>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
+13
-11
@@ -73,6 +73,19 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="new-post-message"></span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -115,17 +128,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
+11
-11
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -115,17 +126,6 @@
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -73,6 +73,17 @@
|
||||
<div class="posts">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
@@ -0,0 +1,268 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
|
||||
<head>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Hugo使用GitHub Action自动刷新多吉云CDN缓存</title>
|
||||
<link rel="alternate" type="application/rss+xml" title="优世界" href="/rss.xml">
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<link rel='stylesheet' href='/css/main.css'>
|
||||
<link rel="stylesheet" href="/css/normalize.css">
|
||||
<link rel="stylesheet" href="/css/remixicon.css">
|
||||
<link rel="stylesheet" href="/css/uikit.min.css">
|
||||
<link rel="stylesheet" href="/css/nprogress.min.css">
|
||||
<link rel="stylesheet" href="/css/Artalk.css"/>
|
||||
<script src="/js/jquery.min.js"></script>
|
||||
<script src="/js/barrage.min.js"></script>
|
||||
<script src="/js/jquery.scrollUp.min.js"></script>
|
||||
<script src="/js/instantpage.min.js" type="module" defer></script>
|
||||
<script src="/js/pjax.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/css/mywaline.css" />
|
||||
|
||||
<script>console.log("\n %c Amigo Theme %c https://usj.cc \n", "color: #fadfa3; background: #030307; padding:3px; font-size:12px;", "color: #ffffff;background: #16171a; padding: 3px; font-size: 12px;");</script>
|
||||
<meta name="keywords" content="大学,教程,blog,优世界,优设计,博客,大学生博客,生活,文案," />
|
||||
<meta name="template" content="Amigo" />
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="main">
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<div class="head_author_img load-memos-editor">
|
||||
<img src="/image/avatar.jpg" class="blog-img" width="80" height="80" alt="优世界" />
|
||||
</div>
|
||||
<div class="site-description">
|
||||
<h2><span class="uk-invisible">风吹云散,云卷云舒</span></h2>
|
||||
<nav class="nav social uk-visible@m">
|
||||
<ul class="flat">
|
||||
|
||||
|
||||
<a href="https://pan.usj.cc" title="GitHub" target="_blank"><i class="ri-cloudy-2-line"></i></a>
|
||||
|
||||
<a href="https://space.bilibili.com/525472039" title="Twitter" target="_blank"><i class="ri-bilibili-line"></i></a>
|
||||
|
||||
<a href="https://github.com/imzql" title="LinkedIn" target="_blank"><i class="ri-github-fill"></i></a>
|
||||
|
||||
|
||||
</ul>
|
||||
<div class="yiyandes">风吹云散,云卷云舒</div>
|
||||
</nav>
|
||||
</div>
|
||||
<nav class="nav">
|
||||
<ul class="flat">
|
||||
<li class="active"><a href="/">首页</a></li>
|
||||
<li class="active"><a href="/about/">关于</a></li>
|
||||
<li class="active"><a href="/ly/">留言</a></li>
|
||||
<li class="active"><a href="/archives/">归档</a></li>
|
||||
<li class="active"><a href="/links/">友链</a></li>
|
||||
<li class="active"><a href="/circles/">友圈</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="pjax-container">
|
||||
<article style="margin-bottom: 3.5em;">
|
||||
<h1 class="post-title" itemprop="name headline">Hugo使用GitHub Action自动刷新多吉云CDN缓存</h1>
|
||||
<div class="meta">
|
||||
作者: 小赵同学 浏览: <span id="busuanzi_value_page_uv"></span> 字数: 994 分类:
|
||||
|
||||
<a href="%e6%95%99%e7%a8%8b">教程</a>
|
||||
|
||||
</div>
|
||||
<div class="post-content" id="post-writing" itemprop="articleBody" uk-scrollspy="target: > hr,h2,p,pre; cls: uk-animation-slide-bottom-small; delay: 0">
|
||||
<p>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github</p>
|
||||
<p>大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便</p>
|
||||
<p>这里特别感谢博友
|
||||
<a
|
||||
|
||||
href="/tiaozhuan/index.html?target=aHR0cHM6Ly9saWthaWppYW4uY29tLw%3d%3d"
|
||||
|
||||
target="_blank"
|
||||
>
|
||||
永恒末匕</a>提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html</p>
|
||||
<p>这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站</p>
|
||||
<h2 id="快速食用">快速食用</h2>
|
||||
<p>在你的项目的根目录,新建一个<code>RefreshCDN.py</code>的文件,代码如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">from</span> <span style="color:#000">hashlib</span> <span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">sha1</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">hmac</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">requests</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">json</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">urllib</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">os</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">def</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{},</span> <span style="color:#000">json_mode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">False</span><span style="color:#000;font-weight:bold">):</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">"""
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> 调用多吉云API。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param data: POST 的数据,字典格式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :return dict: 返回的数据。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> """</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_ACCESS_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 AccessKey</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">secret_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_SECRET_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 SecretKey</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">access_key</span> <span style="color:#204a87;font-weight:bold">or</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">secret_key</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"Access Key or Secret Key is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">json_mode</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/json'</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">urllib</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">parse</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">urlencode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/x-www-form-urlencoded'</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign_str</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">api_path</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">"</span><span style="color:#4e9a06">\n</span><span style="color:#4e9a06">"</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">body</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">signed_data</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">hmac</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">new</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">secret_key</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sign_str</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sha1</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">signed_data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">digest</span><span style="color:#000;font-weight:bold">()</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">hex</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">authorization</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'TOKEN '</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">':'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">sign</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">response</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">requests</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">post</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'https://api.dogecloud.com'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">body</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">headers</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Authorization'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">authorization</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Content-Type'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">mime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">return</span> <span style="color:#000">response</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">json</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 从环境变量中获取 URL 列表,使用逗号分隔</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list_env</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'CDN_URL_LIST'</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">url_list_env</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"CDN_URL_LIST is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">url_list_env</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">split</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">','</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">api</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'/cdn/refresh/add.json'</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'rtype'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">'path'</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'urls'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">url_list</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'code'</span><span style="color:#000;font-weight:bold">]</span> <span style="color:#ce5c00;font-weight:bold">==</span> <span style="color:#0000cf;font-weight:bold">200</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'data'</span><span style="color:#000;font-weight:bold">][</span><span style="color:#4e9a06">'task_id'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"API failed: "</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'msg'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span></code></pre></div><p>创建你的 GitHub Actions 脚本,在项目根目录创建 <code>.github/workflows</code> 目录,如果有该目录请忽略</p>
|
||||
<p>接下来在<code>.github/workflows</code> 目录下新建 <code>RefreshCDN.yml</code>文件</p>
|
||||
<p>yml文件配置如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Refresh CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">push</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">branches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">main</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">jobs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">refresh-cdn</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">runs-on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ubuntu-latest</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">steps</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">检出代码</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/checkout@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装 Python</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/setup-python@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">with</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">python-version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">'3.x'</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装依赖</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">pip install requests</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">等待源站部署</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sleep 1m </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># 这里用了个笨办法,等待 1 分钟后进行刷新</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">刷新 CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">python RefreshCDN.py</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_ACCESS_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_ACCESS_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_SECRET_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_SECRET_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">CDN_URL_LIST</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.CDN_URL_LIST }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span></code></pre></div><p>然后在你的GitHub项目仓库页面</p>
|
||||
<p>依次进入 <code>Settings</code> -> <code>Secrets and variables</code> -> <code>Actions</code> -> <code>New repository secret</code></p>
|
||||
<p>创建三个密钥键值对,分别为</p>
|
||||
<p>CDN_URL_LIST:值为 URL 列表,使用逗号分隔。</p>
|
||||
<pre tabindex="0"><code>https://usj.cc/,https://5b2.cn/
|
||||
</code></pre><p><code>DOGECLOUD_ACCESS_KEY</code>:填入你的 AccessKey。</p>
|
||||
<p><code>DOGECLOUD_SECRET_KEY</code>:填入你的 SecretKey。</p>
|
||||
<p>多吉云密钥获取请访问:https://console.dogecloud.com/user/keys</p>
|
||||
<p>按照如上步骤,设置完毕,你的仓库得有如下三个字段</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/f2736183148b132aea6cb14908e8e86.png" alt="f2736183148b132aea6cb14908e8e86" class="lazyload"></p>
|
||||
<p>执行git提交,脚本就可以自动刷新多吉云缓存了</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/48dad6112a4e2110c95b04111084309.png" alt="48dad6112a4e2110c95b04111084309" class="lazyload"></p>
|
||||
<p>去多吉云控制台看看刷新预热,这样就是成功了</p>
|
||||
|
||||
</div>
|
||||
<div class="post-tags" style="margin-top: -30px;">
|
||||
<nav class="nav tags">
|
||||
<ul class="flat">
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</article>
|
||||
<hr class="uk-divider-icon">
|
||||
<div id="comments" class="comments-area">
|
||||
|
||||
|
||||
|
||||
<link href="/css/Artalk.css" rel="stylesheet" />
|
||||
|
||||
<div id="Comments" uk-scrollspy="target: div,span,img> ; cls: uk-animation-slide-bottom-small;"></div>
|
||||
|
||||
<script src="/js/Artalk.js"></script>
|
||||
<script>
|
||||
if (document.querySelector("#Comments")) {
|
||||
Artalk.init({
|
||||
el: '#Comments',
|
||||
server: 'https://artalk.5b2.cn',
|
||||
site: '优世界',
|
||||
flatMode: true
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
</div>
|
||||
<script async src="/js/bsz.js"></script>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<nav class="nav" style="clear: both;">
|
||||
© 2019 - 2024
|
||||
<br>
|
||||
<a href="https://beian.miit.gov.cn/" target="_blank"><span style="color:#999999;">鄂ICP备2022015735号-1</span></a>
|
||||
<br>
|
||||
本站由<a href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral" target="blank" title="又拍云"
|
||||
style="display:inline-block;text-decoration:none;height:20px;line-height:20px;">
|
||||
<span style="color: var(--contentColor);font-weight: 700;">又拍云CDN</span>
|
||||
</a>提供CDN加速服务
|
||||
<br>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/iconfont.js"></script>
|
||||
<script src="/js/lightgallery.umd.min.js"></script>
|
||||
<script src="/js/uikit.min.js"></script>
|
||||
<script src="/js/EasyLazyload.min.js"></script>
|
||||
<script src="/js/view-image.min.js"></script>
|
||||
<script src="/js/Artalk.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/mypjax.js"></script>
|
||||
<script src="/js/nprogress.js"></script>
|
||||
<script src="/js/echarts.min.js"></script>
|
||||
<script src="/js/tiaozhuan.js"></script>
|
||||
<script async src="/js/bsz.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -91,11 +96,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -71,6 +71,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
+132
-1
@@ -6,7 +6,138 @@
|
||||
<description></description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>zh-cn</language>
|
||||
<lastBuildDate>Sun, 11 Aug 2024 20:52:39 +0800</lastBuildDate><atom:link href="https://usj.cc/post/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<lastBuildDate>Mon, 16 Sep 2024 14:48:42 +0800</lastBuildDate><atom:link href="https://usj.cc/post/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Hugo使用GitHub Action自动刷新多吉云CDN缓存</title>
|
||||
<link>https://usj.cc/post/dogeyun-auto-refresh-cdn/</link>
|
||||
<pubDate>Mon, 16 Sep 2024 14:48:42 +0800</pubDate>
|
||||
|
||||
<guid>https://usj.cc/post/dogeyun-auto-refresh-cdn/</guid>
|
||||
<description>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github 大概一分钟GitHub Action自动部署完成,还需要去</description>
|
||||
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="Hugo使用GitHub Action自动刷新多吉云CDN缓存" /><p>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github</p>
|
||||
<p>大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便</p>
|
||||
<p>这里特别感谢博友
|
||||
<a
|
||||
|
||||
href="/tiaozhuan/index.html?target=aHR0cHM6Ly9saWthaWppYW4uY29tLw%3d%3d"
|
||||
|
||||
target="_blank"
|
||||
>
|
||||
永恒末匕</a>提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html</p>
|
||||
<p>这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站</p>
|
||||
<h2 id="快速食用">快速食用</h2>
|
||||
<p>在你的项目的根目录,新建一个<code>RefreshCDN.py</code>的文件,代码如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">from</span> <span style="color:#000">hashlib</span> <span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">sha1</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">hmac</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">requests</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">json</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">urllib</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">os</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">def</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{},</span> <span style="color:#000">json_mode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">False</span><span style="color:#000;font-weight:bold">):</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">"""
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> 调用多吉云API。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param data: POST 的数据,字典格式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :return dict: 返回的数据。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> """</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_ACCESS_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 AccessKey</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">secret_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_SECRET_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 SecretKey</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">access_key</span> <span style="color:#204a87;font-weight:bold">or</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">secret_key</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"Access Key or Secret Key is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">json_mode</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/json'</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">urllib</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">parse</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">urlencode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/x-www-form-urlencoded'</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign_str</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">api_path</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">"</span><span style="color:#4e9a06">\n</span><span style="color:#4e9a06">"</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">body</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">signed_data</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">hmac</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">new</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">secret_key</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sign_str</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sha1</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">signed_data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">digest</span><span style="color:#000;font-weight:bold">()</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">hex</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">authorization</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'TOKEN '</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">':'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">sign</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">response</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">requests</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">post</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'https://api.dogecloud.com'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">body</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">headers</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Authorization'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">authorization</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Content-Type'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">mime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">return</span> <span style="color:#000">response</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">json</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 从环境变量中获取 URL 列表,使用逗号分隔</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list_env</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'CDN_URL_LIST'</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">url_list_env</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"CDN_URL_LIST is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">url_list_env</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">split</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">','</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">api</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'/cdn/refresh/add.json'</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'rtype'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">'path'</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'urls'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">url_list</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'code'</span><span style="color:#000;font-weight:bold">]</span> <span style="color:#ce5c00;font-weight:bold">==</span> <span style="color:#0000cf;font-weight:bold">200</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'data'</span><span style="color:#000;font-weight:bold">][</span><span style="color:#4e9a06">'task_id'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"API failed: "</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'msg'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span></code></pre></div><p>创建你的 GitHub Actions 脚本,在项目根目录创建 <code>.github/workflows</code> 目录,如果有该目录请忽略</p>
|
||||
<p>接下来在<code>.github/workflows</code> 目录下新建 <code>RefreshCDN.yml</code>文件</p>
|
||||
<p>yml文件配置如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Refresh CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">push</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">branches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">main</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">jobs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">refresh-cdn</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">runs-on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ubuntu-latest</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">steps</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">检出代码</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/checkout@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装 Python</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/setup-python@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">with</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">python-version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">'3.x'</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装依赖</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">pip install requests</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">等待源站部署</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sleep 1m </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># 这里用了个笨办法,等待 1 分钟后进行刷新</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">刷新 CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">python RefreshCDN.py</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_ACCESS_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_ACCESS_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_SECRET_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_SECRET_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">CDN_URL_LIST</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.CDN_URL_LIST }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span></code></pre></div><p>然后在你的GitHub项目仓库页面</p>
|
||||
<p>依次进入 <code>Settings</code> -> <code>Secrets and variables</code> -> <code>Actions</code> -> <code>New repository secret</code></p>
|
||||
<p>创建三个密钥键值对,分别为</p>
|
||||
<p>CDN_URL_LIST:值为 URL 列表,使用逗号分隔。</p>
|
||||
<pre tabindex="0"><code>https://usj.cc/,https://5b2.cn/
|
||||
</code></pre><p><code>DOGECLOUD_ACCESS_KEY</code>:填入你的 AccessKey。</p>
|
||||
<p><code>DOGECLOUD_SECRET_KEY</code>:填入你的 SecretKey。</p>
|
||||
<p>多吉云密钥获取请访问:https://console.dogecloud.com/user/keys</p>
|
||||
<p>按照如上步骤,设置完毕,你的仓库得有如下三个字段</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/f2736183148b132aea6cb14908e8e86.png" alt="f2736183148b132aea6cb14908e8e86" class="lazyload"></p>
|
||||
<p>执行git提交,脚本就可以自动刷新多吉云缓存了</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/48dad6112a4e2110c95b04111084309.png" alt="48dad6112a4e2110c95b04111084309" class="lazyload"></p>
|
||||
<p>去多吉云控制台看看刷新预热,这样就是成功了</p>
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>迁移博客至hugo</title>
|
||||
<link>https://usj.cc/post/migrate-to-hugo/</link>
|
||||
|
||||
+132
-1
@@ -6,7 +6,138 @@
|
||||
<description></description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>zh-cn</language>
|
||||
<lastBuildDate>Sun, 11 Aug 2024 20:52:39 +0800</lastBuildDate><atom:link href="https://usj.cc/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<lastBuildDate>Mon, 16 Sep 2024 14:48:42 +0800</lastBuildDate><atom:link href="https://usj.cc/rss.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Hugo使用GitHub Action自动刷新多吉云CDN缓存</title>
|
||||
<link>https://usj.cc/post/dogeyun-auto-refresh-cdn/</link>
|
||||
<pubDate>Mon, 16 Sep 2024 14:48:42 +0800</pubDate>
|
||||
|
||||
<guid>https://usj.cc/post/dogeyun-auto-refresh-cdn/</guid>
|
||||
<description>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github 大概一分钟GitHub Action自动部署完成,还需要去</description>
|
||||
|
||||
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="Hugo使用GitHub Action自动刷新多吉云CDN缓存" /><p>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github</p>
|
||||
<p>大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便</p>
|
||||
<p>这里特别感谢博友
|
||||
<a
|
||||
|
||||
href="/tiaozhuan/index.html?target=aHR0cHM6Ly9saWthaWppYW4uY29tLw%3d%3d"
|
||||
|
||||
target="_blank"
|
||||
>
|
||||
永恒末匕</a>提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html</p>
|
||||
<p>这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站</p>
|
||||
<h2 id="快速食用">快速食用</h2>
|
||||
<p>在你的项目的根目录,新建一个<code>RefreshCDN.py</code>的文件,代码如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">from</span> <span style="color:#000">hashlib</span> <span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">sha1</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">hmac</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">requests</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">json</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">urllib</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">os</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">def</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{},</span> <span style="color:#000">json_mode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">False</span><span style="color:#000;font-weight:bold">):</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">"""
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> 调用多吉云API。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param data: POST 的数据,字典格式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :return dict: 返回的数据。
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> """</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_ACCESS_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 AccessKey</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">secret_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'DOGECLOUD_SECRET_KEY'</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 SecretKey</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">access_key</span> <span style="color:#204a87;font-weight:bold">or</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">secret_key</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"Access Key or Secret Key is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">''</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">json_mode</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/json'</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">urllib</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">parse</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">urlencode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'application/x-www-form-urlencoded'</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign_str</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">api_path</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">"</span><span style="color:#4e9a06">\n</span><span style="color:#4e9a06">"</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">body</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">signed_data</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">hmac</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">new</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">secret_key</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sign_str</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'utf-8'</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sha1</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">sign</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">signed_data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">digest</span><span style="color:#000;font-weight:bold">()</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">hex</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">authorization</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">'TOKEN '</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">':'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">sign</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000">response</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">requests</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">post</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'https://api.dogecloud.com'</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">body</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">headers</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Authorization'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">authorization</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'Content-Type'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">mime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">return</span> <span style="color:#000">response</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">json</span><span style="color:#000;font-weight:bold">()</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 从环境变量中获取 URL 列表,使用逗号分隔</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list_env</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'CDN_URL_LIST'</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">url_list_env</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"CDN_URL_LIST is not set in environment variables."</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">url_list</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">url_list_env</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">split</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">','</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000">api</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">'/cdn/refresh/add.json'</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'rtype'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">'path'</span><span style="color:#000;font-weight:bold">,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">'urls'</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">url_list</span><span style="color:#000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">})</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'code'</span><span style="color:#000;font-weight:bold">]</span> <span style="color:#ce5c00;font-weight:bold">==</span> <span style="color:#0000cf;font-weight:bold">200</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'data'</span><span style="color:#000;font-weight:bold">][</span><span style="color:#4e9a06">'task_id'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"API failed: "</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">'msg'</span><span style="color:#000;font-weight:bold">])</span>
|
||||
</span></span></code></pre></div><p>创建你的 GitHub Actions 脚本,在项目根目录创建 <code>.github/workflows</code> 目录,如果有该目录请忽略</p>
|
||||
<p>接下来在<code>.github/workflows</code> 目录下新建 <code>RefreshCDN.yml</code>文件</p>
|
||||
<p>yml文件配置如下</p>
|
||||
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Refresh CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">push</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">branches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">main</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">jobs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">refresh-cdn</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">runs-on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ubuntu-latest</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">steps</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">检出代码</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/checkout@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装 Python</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/setup-python@v2</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">with</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">python-version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">'3.x'</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装依赖</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">pip install requests</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">等待源站部署</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sleep 1m </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># 这里用了个笨办法,等待 1 分钟后进行刷新</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">刷新 CDN</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">python RefreshCDN.py</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_ACCESS_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_ACCESS_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_SECRET_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_SECRET_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">CDN_URL_LIST</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.CDN_URL_LIST }}</span><span style="color:#f8f8f8;text-decoration:underline">
|
||||
</span></span></span></code></pre></div><p>然后在你的GitHub项目仓库页面</p>
|
||||
<p>依次进入 <code>Settings</code> -> <code>Secrets and variables</code> -> <code>Actions</code> -> <code>New repository secret</code></p>
|
||||
<p>创建三个密钥键值对,分别为</p>
|
||||
<p>CDN_URL_LIST:值为 URL 列表,使用逗号分隔。</p>
|
||||
<pre tabindex="0"><code>https://usj.cc/,https://5b2.cn/
|
||||
</code></pre><p><code>DOGECLOUD_ACCESS_KEY</code>:填入你的 AccessKey。</p>
|
||||
<p><code>DOGECLOUD_SECRET_KEY</code>:填入你的 SecretKey。</p>
|
||||
<p>多吉云密钥获取请访问:https://console.dogecloud.com/user/keys</p>
|
||||
<p>按照如上步骤,设置完毕,你的仓库得有如下三个字段</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/f2736183148b132aea6cb14908e8e86.png" alt="f2736183148b132aea6cb14908e8e86" class="lazyload"></p>
|
||||
<p>执行git提交,脚本就可以自动刷新多吉云缓存了</p>
|
||||
<p>
|
||||
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/48dad6112a4e2110c95b04111084309.png" alt="48dad6112a4e2110c95b04111084309" class="lazyload"></p>
|
||||
<p>去多吉云控制台看看刷新预热,这样就是成功了</p>
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>迁移博客至hugo</title>
|
||||
<link>https://usj.cc/post/migrate-to-hugo/</link>
|
||||
|
||||
+9
-6
@@ -3,13 +3,19 @@
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>https://usj.cc/categories/</loc>
|
||||
<lastmod>2024-08-11T20:52:39+08:00</lastmod>
|
||||
<lastmod>2024-09-16T14:48:42+08:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/post/dogeyun-auto-refresh-cdn/</loc>
|
||||
<lastmod>2024-09-16T14:48:42+08:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/post/</loc>
|
||||
<lastmod>2024-08-11T20:52:39+08:00</lastmod>
|
||||
<lastmod>2024-09-16T14:48:42+08:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/</loc>
|
||||
<lastmod>2024-08-11T20:52:39+08:00</lastmod>
|
||||
<lastmod>2024-09-16T14:48:42+08:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/categories/%E6%95%99%E7%A8%8B/</loc>
|
||||
<lastmod>2024-09-16T14:48:42+08:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/categories/%E7%94%9F%E6%B4%BB/</loc>
|
||||
<lastmod>2024-08-11T20:52:39+08:00</lastmod>
|
||||
@@ -40,9 +46,6 @@
|
||||
</url><url>
|
||||
<loc>https://usj.cc/post/1284/</loc>
|
||||
<lastmod>2024-03-16T15:24:55+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/categories/%E6%95%99%E7%A8%8B/</loc>
|
||||
<lastmod>2024-03-01T22:12:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://usj.cc/post/1279/</loc>
|
||||
<lastmod>2024-03-01T22:12:00+00:00</lastmod>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 16, 2024</div>
|
||||
<a href="https://usj.cc/post/dogeyun-auto-refresh-cdn/">Hugo使用GitHub Action自动刷新多吉云CDN缓存</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 11, 2024</div>
|
||||
<a href="https://usj.cc/post/migrate-to-hugo/">迁移博客至hugo</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1279/">访客体验优化</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 3, 2023</div>
|
||||
<a href="https://usj.cc/post/1243/">家乡随拍</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 16, 2023</div>
|
||||
<a href="https://usj.cc/post/1223/">襄阳唐城</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/1043/">近来二三事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 7, 2022</div>
|
||||
<a href="https://usj.cc/post/92/">记录篇:将笔记本联想小新pro13网卡由螃蟹网卡换成AX210网卡</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 22, 2022</div>
|
||||
<a href="https://usj.cc/post/87/">生活篇:温馨提示假期余额不足,浅浅总结一下这个暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/75/">2022,除夕过后的那些事</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">February 22, 2022</div>
|
||||
<a href="https://usj.cc/post/74/">2022,致我的春节回忆录</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 22, 2021</div>
|
||||
<a href="https://usj.cc/post/40/">放假之前最后一次的照片合集,再见啦!理工</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/12/">我为什么要写博客?这位博主给了我答案</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2021</div>
|
||||
<a href="https://usj.cc/post/11/">我想,这是一个我人生中最特殊的中秋国庆节</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">September 4, 2021</div>
|
||||
<a href="https://usj.cc/post/4/">2021暑假总结,记录一下这个充实的暑假</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/70/">一把过,科二结束!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">August 16, 2021</div>
|
||||
<a href="https://usj.cc/post/69/">再次投资科目二,科目二花了400,希望19号一把过吧</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">May 16, 2021</div>
|
||||
<a href="https://usj.cc/post/45/">双休日襄阳游记,与朋友一起,终究还是遗憾而归</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/61/">新春快乐!牛年大吉!</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">January 15, 2021</div>
|
||||
<a href="https://usj.cc/post/60/">祝母校越办越好</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">December 27, 2020</div>
|
||||
<a href="https://usj.cc/post/57/">期末倒计时开始</a>
|
||||
@@ -89,11 +94,6 @@
|
||||
<a href="https://usj.cc/post/52/">军训太痛苦了,希望早点结束</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
<ul class="pagination">
|
||||
|
||||
@@ -69,6 +69,11 @@
|
||||
<div class="post-list section">
|
||||
|
||||
|
||||
<div class="post">
|
||||
<div class="time">October 1, 2020</div>
|
||||
<a href="https://usj.cc/post/51/">双节快乐!家与国撞了个满怀</a>
|
||||
</div>
|
||||
|
||||
<div class="post">
|
||||
<div class="time">July 7, 2020</div>
|
||||
<a href="https://usj.cc/post/50/">高考加油,相信自己</a>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
Reference in new issue
Block a user