本文以hugo为例,hexo同理 实现目的,
- 无服务器 如同本站
- 接近0费用 只有cdn和oss费用 cdn本身费用很低 oss 那边看cdn配置和文章更新频繁程度
- 搭建文章网站。实现博客或者帮助文档在线公开浏览。
- 国外访客直接走githubpage 国内访客 走腾讯-> 阿里云oss
.md原文件 不暴露到公网
部署到 oss 会增加大概100多秒的actions执行时间,也会导致oss那边产生一些写入费用。 我的actions 从一开始的18-25秒执行时间,变成2m30s左右。单独上传到alioss 差不多需要2分钟。
GitHub上部署hugo 或者mdbook hexo到私有库
hugo : https://dev.leiyanhui.com/mdbook/hugo-install-nolocal/
mdbook: https://dev.leiyanhui.com/mdbook/siyou/
hexo 已经弃用很久,自己搞定 都差不多。
在阿里云创建oss和相关key
详细步骤略,主要是 拿到 AccessKey ID 和 AccessKey Secret, 对应的Bucket 权限 应该是所有人可读
我创建了一个 青岛 mydev-bolg.oss-cn-qingdao.aliyuncs.com
在对应的Bucket的配置 域名配置 里面绑定一个临时域名 oss.dev.leiyanhui.com
然后在数据管理静态页面中设置 首页 index.html 打开子目录首页 Redirect 404页面 404.html
域名解析部分
- dev.leiyanhui.com 境外到xxx.gitHub.io
- dev.leiyanhui.com 境内到cdn,我这里到腾讯cdn
修改GitHub私有库上的自动部署脚本
以下操作在github的私有库上操作
先配置环境变量
依次点击 /settings/secrets/actions 添加变量OSS_ACCESS_KEY_ID OSS_ACCESS_KEY_SERCRET 对应阿里云的 AccessKey ID 和 AccessKey Secret
原来的变量FOR_PAGE_SSHKEY 参考上面私有库配置的文章。
这样做是为了防止在编译过程日志里面显示敏感信息
编辑github actions文件
/.github/workflows/deploy.yml 原始文件内容参考 https://github.com/joyanhui/file.leiyanhui.com/blob/main/github-actions/hugo/hugo-Private-to-public-whis-theme-deploy.yml
添加内容 就是增加一段到alioss的配置 我们用 actions 执行完成后,打开域名 没有买cos,感觉贵一些,所以这里没相关配置,实际和上面操作 大同小异 我这里cdn用的腾讯的,之所以套一个cdn 而不是直接用alioss 静态页面功能,当然是为了省钱。。。 阿里oss 删掉这个域名,或者直接添加一个 域名 dev.leiyanhui.com 在腾讯cdn 域名管理中 添加 回源地址 GitHub作为 热备源站,主站用 默认的情况是 当向master分支push代码或提交pull request的时候触发manyuanrong/[email protected] 这个
注意run 那行我们是 复制 public 文件到 oss://Bucket名称/(Bucket名称) 如果你用其他程序,需要自己修改以下代码 (32 行)
1
2
3
4
5
6
7
8
9
10
11
- name: setup aliyun oss
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-qingdao.aliyuncs.com
access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SERCRET }}
- name: cp files to aliyun
run: |
rm -rf .git*
rm -rf public/.git*
ossutil cp -rf public oss://mydev-bolg/ # 将mydev-bolg改为创建的Bucket名称,-rf表示覆盖
测试
mydev-bolg.oss-cn-qingdao.aliyuncs.com 测试,可以打开推送到腾讯cos的配置
配置cdn
oss-cn-qingdao.aliyuncs.com进阶
节省oss费用,降低写入次数。 设置为定时执行
| |
on: schedule: - cron: ‘30 5,17 * * *’
| |
on: workflow_dispatch:
| |
on: workflow_dispatch: schedule: # 第二位小时数,要北京时间-8 后输入 比如 2是10点 - cron: “16 5 */3 * *”
| |
- name: setup aliyun oss
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-qingdao.aliyuncs.com
access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SERCRET }}
- name: cp files to aliyun
run: |
#获取当前时间戳
current=
date "+%Y-%m-%d %H:%M:%S"timeStamp=date -d "$current" +%scurrentTimeStamp=$(((timeStamp1000+10#date "+%N"/1000000)/1000)) #将current转换为时间戳,精确到秒 #获取上次更新的时间戳到变量last_update curl -o last_update.txt https://你的地址.oss-cn-qingdao.aliyuncs.com/last_update.txt?$GITHUB_SHA source last_update.txt Time_over_val=expr $currentTimeStamp - $last_updateif [ “$Time_over_val” -ge “3600” ];then echo “阿里oss 记录时间” echo “last_update=$currentTimeStamp” > public/last_update.txt rm -rf .git rm -rf public/.git* ossutil cp -rf public oss://你的Bucket/ else echo “跳过更新阿里oss” fi
| |
on: workflow_dispatch: schedule: # 第二位小时数,要北京时间-8 后输入 比如 2是10点 - cron: “33 2 * * *” push: branches: [master] pull_request: branches: [master]
| |