diff --git a/content/post/hugo-backup-alioss.md b/content/post/hugo-backup-alioss.md new file mode 100644 index 00000000..cf4f14e6 --- /dev/null +++ b/content/post/hugo-backup-alioss.md @@ -0,0 +1,101 @@ +--- +title: "Hugo自动化备份至阿里云oss(GitHub->阿里云)" +date: "2024-10-06T15:49:58+08:00" +slug: "20241006-hugo-backup-alioss" +draft: false +categories: [] +tags: [] +author: "小赵同学" +layout: "post" +status: "public" +categories: ["生活"] +tags: [] +--- + +Hugo的整个构建流程需要搭配GitHub Action使用 ,但是GitHub网络在大陆访问并不是很好 + +大部分地区无法打开,国庆回家想把博客仓库拉下来,更新一篇文章,拉了几次都失败了 + +渐渐意识到了多端备份的重要性,在搜索引擎找了一圈基本上都是腾讯云oss的教程,没有找到自己想要的 + +我比较喜欢使用阿里云oss,于是打算自己写一个,期间也遇到点问题,不过还好有chatgpt帮忙 + +试了下效果不错,分享出来并作备份 + +## 创建阿里云oss Bucket + +登录阿里云控制台,搜索oss,创建一个新的Bucket,按照以下配置即可 + +![image-20241006160517132](/pics/hugo/hugo-backup-alioss/image-20241006160517132.png) + +操作完此步骤后,请记录你创建好的Bucket名称和Endpoint域名 + +## 创建阿里云 AccessKey + +访问以下地址创建自己的AccesKey值,并做记录 + +https://ram.console.aliyun.com/profile/access-keys + +## Github仓库配置 + +以上几个步骤所记录的值都是一些敏感的数据,暴露在GitHub仓库是非常危险的 + +我们将其保存为GitHub Action Secret,这样流水线在工作的时候会自动读取配置好的值 + +![setup-secrets](/pics/hugo/hugo-backup-alioss/setup-secrets.png) + +对于Bucket的访问你需要在仓库上配置以下四个数据: + +- OSS_BUCKET: Bucket的名称 +- OSS_ENDPOINT: 上面提到的和区域相关的Endpoint +- OSS_ACCESS_KEY_ID: AccessKey的ID +- OSS_ACCESS_KEY_SECRET: AccessKey的Secret + +## GitHub Action创建文件 + +[Github Actions](https://github.com/features/actions)是Github推出的自动化工作流工具,主要用来完成CI/CD + +它的工作流是通过yaml文件定义的,放在仓库的.github/workflow目录下 + +这里我把文件命名为`aliyun-backup.yml`,这里作一下配置文件说明 + +因为备份没必要提交一次commit备份一次,备份周期设置的每周日的凌晨0点自动备份 + +采用的是增量备份模式,只有文件修改或新增才上传,缩短了上传时间 + +```yaml + +name: 备份到阿里云oss + +on: + schedule: + - cron: "0 0 * * 0" # 每周日的00:00执行一次 + workflow_dispatch: # 手动触发工作流 + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: 下载代码 + uses: actions/checkout@v4 + with: + submodules: true + fetch-depth: 0 + + - name: 配置阿里云OSS + uses: manyuanrong/setup-ossutil@v3.0 + with: + endpoint: ${{ secrets.OSS_ENDPOINT }} + access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }} + access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }} + + - name: 增量上传资源(排除 public 文件夹) + run: | + # 查找所有文件,排除 public 文件夹 + find . -path ./public -prune -o -type f -print | xargs -I {} ossutil cp {} oss://${{ secrets.OSS_BUCKET }}/{} --update +``` + diff --git a/static/pics/hugo/hugo-backup-alioss/image-20241006160517132.png b/static/pics/hugo/hugo-backup-alioss/image-20241006160517132.png new file mode 100644 index 00000000..8dfe9a44 Binary files /dev/null and b/static/pics/hugo/hugo-backup-alioss/image-20241006160517132.png differ diff --git a/static/pics/hugo/hugo-backup-alioss/setup-secrets.png b/static/pics/hugo/hugo-backup-alioss/setup-secrets.png new file mode 100644 index 00000000..e9027eac Binary files /dev/null and b/static/pics/hugo/hugo-backup-alioss/setup-secrets.png differ