如何将 Astro 部署在对象存储上

如何将 Astro 部署在对象存储上

Wed Nov 06 2024
4 分钟

前言#

最近重新调整了一下 Web,最初是 Hexo 框架,通过插件,将 Web 直接部署到腾讯 COS 上。后来看上了 Astro 框架,感觉不错,打算换个玩玩。不过在迁移找教程的时候,发现那些教程都是将代码托管到国外平台,我个人是不太喜欢国外平台那时不时犯病的网络,而 Astro 官方也没有适配国内环境的教程,那就自己写一个吧。

实现过程#

在 Hexo 中可以装对应的腾讯 COS 插件,可以一键部署,但是我在 Astro 没找到类似的功能。

其实部署静态网站,最简单的方法就是先本地部署,生成一个 dist 文件夹,这个文件夹内就是生成静态网站源码。然后再将该文件夹放到对象存储里,对象存储开启静态网站,就能直接访问。不过这个方法不够优雅,而且对于我来说,有点麻烦了。后来看着 Github 发呆,突然想起来 Github 有个 Acitoon 可以自动化执行命令。那么这就简单了。把代码放 Github 上,然后设置 Aciton 代码,每次同步都会执行 Acition,把代码部署,传给对象存储。

Github 项目拉取#

首先创建 Github 仓库,在”我的仓库”这里,创建新的仓库

来到这里

这里注意,我们不是要创建一个 Github Page 网站,而是单纯的一个代码仓库。新建好后,根据给的代码,把你的项目部署到仓库里。

之后你的项目就会拉到 Github 上了

对象存储设置#

这里使用的是腾讯 COS。首先创建一个桶子

创建后你会得到

  • 桶名(BUCKET)
  • 所属地域(REGION)

之后我们来到访问管理,找到 API 密钥管理

创建一个密钥,这样我们就得到了

  • 桶名
  • 所属地域
  • SecretId
  • SecretKey

Github Action#

在 Github仓库里找到设置,设置中我们可以设置 Acition 密钥

我们新建这几个密钥

  • BUCKET
  • REGION
  • SECRETID
  • SECRETKEY

这一步的目的是避免下面 Action 脚本里出现明文密钥。我们之后点击 Action,创建一个新的工作流程

文件名随意,脚本这里我写了一个经过测试能用的

YML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
name: Upload to COS

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install Node.js
        uses: actions/setup-node@v2
        with:
          node-version: "20"

      - name: Install dependencies
        run: npm install

      - name: Build Astro project
        run: npm run build

      - name: Install coscmd
        run: sudo pip install coscmd

      - name: Configure coscmd
        env:
          SECRET_ID: ${{ secrets.SecretId }}
          SECRET_KEY: ${{ secrets.SecretKey }}
          BUCKET: ${{ secrets.BUCKET }}
          REGION: ${{ secrets.REGION }}
        run: coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION

      - name: Upload to COS
        run: coscmd upload -r -f --delete ./dist/ / --ignore "./.git/*"

代码很简单,我这里是用 npm 去 bulid 项目,然后调用 coscmd 去把 dist 文件夹上传到对应的存储桶里。将代码粘贴上去后,保存,你就可以看到你的脚本开始运行了

使用演示#

我们在修改内容后,直接 VScode 推给 Github 就行

然后在 Action 里就会有新的工作出现

然后等着就可以啦。