本文以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的配置 我们用manyuanrong/setup-ossutil@v1.0
这个
注意run 那行我们是 复制 public 文件到 oss://Bucket名称/
(Bucket名称) 如果你用其他程序,需要自己修改以下
|
|
测试
actions 执行完成后,打开域名mydev-bolg.oss-cn-qingdao.aliyuncs.com
测试,可以打开
推送到腾讯cos的配置
没有买cos,感觉贵一些,所以这里没相关配置,实际和上面操作 大同小异
配置cdn
我这里cdn用的腾讯的,之所以套一个cdn 而不是直接用alioss 静态页面功能,当然是为了省钱。。。
阿里oss 删掉这个域名,或者直接添加一个 域名 dev.leiyanhui.com
在腾讯cdn 域名管理中 添加 回源地址 GitHub作为 热备源站,主站用oss-cn-qingdao.aliyuncs.com
进阶
节省oss费用,降低写入次数。 设置为定时执行
默认的情况是 当向master分支push代码或提交pull request的时候触发
|
|
看手册 https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows 如果想要实现,push 并且距离上次时间 超过1小时,因为cron 不支持这个操作,而我们acions内的脚本 无法持久保存文件。所以不好实现。
schedule cron的方式
手册:https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
|
|
可以定时执行,但是也和我们预期效果不一样。因为我们不是每天或者每小时都要更新内容。
手动执行发方法
最简单 办法 是用 workflow_dispatch,想同步的时候,手动执行一次
|
|
定时和手动结合
手动加定时任务
|
|
手动触发 ,或者 每间隔3天的13点16分自动执行一次
完美:添加时间戳的方法
原理:在阿里云oss上创建一个文本记录上次同步到阿里云的时间戳,然后每次同步到阿里云之前比较一下时间戳,如果超过指定的时间3600
那么就同步一次,否则 不执行。
新建一个文件last_update.txt
内容last_update=0
手动上传到阿里云oss
|
|
同时 修改触发条件为,每次改动,或手动,并添加定时,防止最后一次push后未同步的情况下 不能自动提交给阿里云的情况。
|
|
最终文件 点击这里
小问题
manyuanrong/setup-ossutil@master
是从 http://gosspublic.alicdn.com/ossutil/1.7.7/ossutil64
下载安装,git去下载话 有时候偶尔抽风速度不是很理想。有时候需要4分钟。。占用actions时间。