Giter Site home page Giter Site logo

aliyun-oss-website-action's Introduction

aliyun-oss-website-action

deploy website on aliyun OSS(Alibaba Cloud OSS)

将静态网站部署在阿里云OSS

概览

  • 在阿里云OSS创建一个存放网站的bucket
  • 准备一个域名, 可能需要备案(bucket选择非大陆区域, 可以不备案, 但是如果CDN加速区域包括大陆, 仍然需要备案)
  • 在你的网站repo中, 配置github action, action 触发则增量上传网站repo生成的资源文件到bucket中
  • 通过阿里云OSS的CDN, 可以很方便地加速网站的访问, 支持HTTPS

阿里云HTTPS免费证书停止自动续签, 但是可以自己申请免费的证书, 具体解决方案参考该公告

Usage

    - name: upload files to OSS
      uses: fangbinwei/aliyun-oss-website-action@v1
      with:
          accessKeyId: ${{ secrets.ACCESS_KEY_ID }}
          accessKeySecret: ${{ secrets.ACCESS_KEY_SECRET }}
          bucket: your-bucket-name
          # use your own endpoint
          endpoint: oss-cn-shanghai.aliyuncs.com
          folder: your-website-output-folder

如果你使用了environment secret请查看这里

配置项

  • accessKeyId: 必填
  • accessKeySecret: 必填
  • endpoint: 必填, 支持指定protocol, 例如https://example.org或者http://example.org
  • folder: 必填, repo打包输出的资源文件夹
  • bucket: 必填,部署网站的bucket, 用于存放网站的资源
  • indexPage: 默认index.html.网站首页(用于静态页面配置)
  • notFoundPage: 默认404.html.网站404页面(用于静态页面配置)
  • incremental: 默认true. 使用增量上传.
  • skipSetting: 默认false, 是否跳过设置静态页面配置
  • htmlCacheControl: 默认no-cache
  • imageCacheControl: 默认max-age=864000
  • pdfCacheControl: 默认max-age=2592000
  • otherCacheControl: 默认max-age=2592000
  • exclude: 不上传folder下的某些文件/文件夹
  • cname: 默认false. 若endpoint填写自定义域名/bucket域名, 需设置为true. (使用CDN的场景下, 不推荐使用自定义域名)

incremental

开启incremental 上传文件到OSS后, 还会将文件的ContentMD5Cache-Control收集到名为.actioninfo的私有文件中. 当再次触发action的时候, 会将待上传的文件信息与.actioninfo中记录的信息比对, 信息未发生变化的文件将跳过上传步骤, 只进行增量上传. 且在上传之后, 根据.actioninfo和已上传的文件信息, 将OSS中多余的文件进行删除.

.actioninfo 记录了上一次action执行时, 所上传的文件信息. 私有, 不可公共读写.

关闭incremental 或 OSS中不存在.actioninfo文件

会执行如下步骤

  1. 清除所有OSS中已有的文件
  2. 上传新的文件到OSS中

计划未来优化这个步骤, 优化后, 先上传新的文件到OSS中, 再diff删除多余的文件.

Cache-Control

为上传的资源默认设置的Cache-Control如下

资源类型 Cache-Control
.html no-cache
.png/jpg...(图片资源) max-age=864000(10days)
other max-age=2592000(30days)

静态页面配置

默认的, action会将阿里云OSS的静态页面配置成如下 2020-08-06-03-18-25

若不需要action来设置, 可以配置skipSettingtrue

exclude

如果folder下的某些文件不需要上传

    - name: exclude some files
      uses: fangbinwei/aliyun-oss-website-action@v1
      with:
        folder: dist
        exclude: |
          tmp.txt
          tmp/
          tmp2/*.txt
          tmp2/*/*.txt
      # match dist/tmp.txt
      # match dist/tmp/
      # match dist/tmp2/a.txt
      # match dist/tmp2/a/b.txt, not match dist/tmp2/tmp3/a/b.txt

不支持**

或者

- name: Clean files before upload
  run: rm -f dist/tmp.txt

Docker image

直接使用已经build好的docker image

    - name: upload files to OSS
      uses: docker://fangbinwei/aliyun-oss-website-action:v1
      # 使用env而不是with, 参数可以见本项目的action.yml
      env:
          ACCESS_KEY_ID: ${{ secrets.ACCESS_KEY_ID }}
          ACCESS_KEY_SECRET: ${{ secrets.ACCESS_KEY_SECRET }}
          BUCKET: your-bucket-name
          ENDPOINT: ali-oss-endpoint
          FOLDER: your-website-output-folder

Demo

部署VuePress项目

name: deploy vuepress

on:
  push:
    branches:
      - master

jobs:
  build:

    runs-on: ubuntu-latest
    steps:
      # load repo to /github/workspace
    - uses: actions/checkout@v2
      with:
          repository: fangbinwei/blog
          fetch-depth: 0
    - name: Use Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '12'
    - run: npm install [email protected] -g
    - run: yarn install
    # 打包文档命令
    - run: yarn docs:build
    - name: upload files to OSS
      uses: fangbinwei/aliyun-oss-website-action@v1
      with:
          accessKeyId: ${{ secrets.ACCESS_KEY_ID }}
          accessKeySecret: ${{ secrets.ACCESS_KEY_SECRET }}
          bucket: "your-bucket-name"
          endpoint: "oss-cn-shanghai.aliyuncs.com" 
          folder: ".vuepress/dist"

具体可以参考本项目的workflow, npm/yarn配合action/cache加速依赖安装

Vue

see here

- name: upload files to OSS
      uses: fangbinwei/aliyun-oss-website-action@v1
      with:
          accessKeyId: ${{ secrets.ACCESS_KEY_ID }}
          accessKeySecret: ${{ secrets.ACCESS_KEY_SECRET }}
          bucket: website-spa-vue-demo
          endpoint: oss-spa-demo.fangbinwei.cn
          cname: true
          folder: dist
          notFoundPage: index.html
          htmlCacheControl: no-cache
          imageCacheControl: max-age=864001
          otherCacheControl: max-age=2592001

FAQ

配合CDN使用时, OSS更新后, CDN未刷新

开启OSS提供的CDN缓存自动刷新功能, 将触发操作配置为PutObject, DeleteObject.

2020-12-13-23-51-28

2020-12-13-23-51-55

endpoint使用自定义域名, 但是无法上传

  1. 如果endpoint的域名CNAME记录为阿里云CDN, CDN是否配置了http强制跳转https? 若配置了, 需要在endpoint中指定https, 即endpointhttps://example.org

  2. 如果endpoint的域名CNAME记录为阿里云CDN, 在CDN为加速范围为全球时有遇到过如下报错The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint., 则endpoint不能使用自定义域名, 使用OSS源站的endpoint.

配置了environment secret怎么不生效

2021-05-21-16-47-59

如果使用environment secret, 那么需要如下类似的配置

jobs:
  build:
    runs-on: ubuntu-latest
+    environment: your-environment-name

aliyun-oss-website-action's People

Contributors

fangbinwei avatar jeffreys-cat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

aliyun-oss-website-action's Issues

请教个问题,我每次上传到oss 里面总是会有一个默认的dist 文件夹

请教个问题,我每次上传到oss 里面总是会有一个默认的dist 文件夹,但是我希望,直接上传文件本身,而不用带这个dist 文件夹可以吗?我build完之后是会有一个dist文件夹的,但是我希望上传时,直接上传dist里面的文件,而不是dist 本身,尝试了好多方法都不行,特来求教。

[docs] 阿里云OSS的CDN缓存自动刷新功能

补充一个场景文档。

阿里云 OSS 有个功能「CDN 缓存自动刷新」,支持针对指定操作触发。

如果使用阿里云的CDN并绑定加速域名回源到OSS,就可以使用OSS的CDN缓存自动刷新功能,此功能在覆盖写的情况下(包括覆盖一个已有的文件,删除一个已有的文件),OSS会主动刷新CDN,回源到OSS获取覆盖后的文件,不需要显式调用CDN的刷新接口。

所以,当触发操作仅配置为「PutObject」时,先删除再上传的方式并不会触发刷新,可以将「DeleteObject」也配置为触发操作。

每次触发时会清空 oss bucket 的镜像回源配置

因为我部署的是 Vue 项目,使用的是 Vue-router 的 history 模式。需要配置阿里云 OSS 镜像回源规则来避免刷新之后 404 的问题。
然而,每次调用 aliyun-oss-website-action 之后,都会将我的 bucket 配置的镜像回源规则清空。

附使用的 GitHub Action 配置:

name: Deploy

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      
    - name: Use Node.js 12.x
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'

    - name: Build project
      run: |
        echo install dependencies
        npm i
        echo build project
        npm run build

    - name: upload files to OSS
      uses: fangbinwei/aliyun-oss-website-action@v1
      with:
          accessKeyId: ${{ secrets.ACCESSKEYID }}
          accessKeySecret: ${{ secrets.ACCESSKEYSECRET }}
          bucket: ncuos-fe
          endpoint: oss-cn-hangzhou.aliyuncs.com
          folder: dist

希望可以增加静态页面的"文件 404 规则"配置

首先感谢作者,这是个非常棒的动作。我希望可以增加静态页面的"文件 404 规则"配置,目前动作无法设置"文件 404 规则",默认是Redirect。对于大部分静态页面,我认为该值设置为Index更为合理。

查找了下文档,该值可在PutBucketWebsite请求的IndexDocumentType的参数进行配置
参考:https://www.alibabacloud.com/help/zh/object-storage-service/latest/putbucketwebsite

再次感谢

大佬帮忙看一下,删除步骤一直报错返回400状态码

current directory: /github/workspace
endpoint: oss-cn-hangzhou.aliyuncs.com
bucketName: webpage-hz
folder: public
exclude: []
indexPage: index.html
notFoundPage: 404.html
isCname: false
skipSetting: true
HTMLCacheControl: no-cache
imageCacheControl: max-age=864000
otherCacheControl: max-age=2592000
skip setting static pages related configuration
---- delete start ----
occurred error: oss: service returned error: StatusCode=400, ErrorCode=InvalidArgument, ErrorMessage="Authorization header is invalid.", RequestId=60A4BCF86E537B39375FE2E7

400错误

重复检查了配置没有问题,是阿里云的SDK有修改吗

Cannot exclude files / folder

In my project, webpack bundles are created along with a json file (stats.json 24MB). The json file should not be uploaded.

But there is no configuration property to set files to exclude.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.