跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.js大前端

火山引擎 GitHub Actions 结合对象存储与 CDN 部署静态网站

总结了基于火山引擎对象存储(TOS)与 CDN 的静态网站部署方案。通过 GitHub Actions 自动化构建并上传资源至 TOS 桶,同时配置静态网站托管。重点讲解了 Endpoint 与 Bucket 域名的区别,以及遇到 API 地址更新不生效时的排查思路,包括处理 Actions 缓存、浏览器缓存及 CDN 缓存刷新机制。

刀狂发布于 2026/3/25更新于 2026/7/758 浏览
火山引擎 GitHub Actions 结合对象存储与 CDN 部署静态网站

GitHub Actions

在项目的主目录中新建一个 .github/workflows/deploy.yml 文件,配置如下:

name: Deploy to Volcengine TOS
on:
  push:
    branches:
      - main
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    env:
      # Build-time env for Vite (optional)
      VITE_API_BASE_URL: ${{ secrets.VITE_API_BASE_URL }}
      # Volcengine TOS (S3-compatible) deploy config
      TOS_BUCKET: ${{ secrets.TOS_BUCKET }}
      TOS_REGION: ${{ secrets.TOS_REGION }}
      TOS_ENDPOINT: ${{ secrets.TOS_ENDPOINT }}
      # Credentials
      AWS_ACCESS_KEY_ID: ${{ secrets.VOLC_AK }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.VOLC_SK }}
      AWS_EC2_METADATA_DISABLED: "true"
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: "npm"
      - name: Install dependencies
        run: npm ci
      - name: Build project
        run: npm run build
        env:
          VITE_API_BASE_URL: ${{ secrets.VITE_API_BASE_URL }}
      - name: Sanity check build output contains API base
        run: |
          echo "Check if build still contains localhost:"
          grep -R "127.0.0.1:8080" -n dist/ && exit 1 || echo "OK: localhost not found"
      - name: Upload Vite build output (dist/) to TOS
        run: |
          aws s3 sync dist/ "s3://${TOS_BUCKET}/" \
            --endpoint-url "$TOS_ENDPOINT" \
            --region "$TOS_REGION" \
            --delete
      - name: Configure Static Website Hosting
        run: |
          aws s3 website "s3://${TOS_BUCKET}/" \
            --index-document index.html \
            --error-document index.html \
            --endpoint-url "$TOS_ENDPOINT" \
            --region "$TOS_REGION"

说明:

  • 环境变量需在 GitHub Secrets 中配置。VOLC_AK 为访问密钥 ID,VOLC_SK 为密钥。
  • 触发条件为推送到 main 分支时自动执行。
  • --delete 参数会删除远程桶中本地不存在的文件,确保完全同步。
  • 配置 TOS 桶为静态网站托管模式,index.html 作为默认首页和错误页面(适用于 SPA 应用路由)。

对象存储桶

创建一个桶(Bucket)作为对象存储。对象存储类似于网盘,存储的对象由 Key(名称)、Data(内容)和 Metadata 构成,通过 HTTP 访问。

  • Endpoint:S3 兼容 Endpoint,用于 AWS S3 CLI / SDK 连接。
  • Bucket 域名:用于浏览器访问或 CDN 回源。

CDN 配置

内容分发网络(CDN)将源站响应缓存至边缘节点,减少延迟。需配置回源 Host,即缓存未命中时请求源站的位置。

常见问题排查

若修改了后端 API 地址后刷新无效,可能是以下原因:

  1. GitHub Actions 缓存:直接重跑 Job 可能读取旧的环境变量。建议提交空 Commit(使用 --allow-empty)以触发新流程。
  2. 浏览器缓存:对比 curl 抓包与浏览器 Console 获取的资源,发现两者不一致。清除浏览器 Storage 无效。
  3. CDN 缓存:需手动在 CDN 控制台进行刷新预热操作。

缓存控制

  • 源站配置:在 YAML 中设置 --cache-control "no-cache, max-age=0",规定源站表现,禁止任何缓存。
  • CDN 配置:在 CDN 控制台单独配置缓存策略,覆盖 CDN 侧的缓存行为。

目录

  1. GitHub Actions
  2. 对象存储桶
  3. CDN 配置
  4. 常见问题排查
  5. 缓存控制
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Discord 机器人创建流程详解
  • 算法模拟专题:LeetCode 精选例题解析
  • 鸿蒙金融理财全栈:应用上线、运维监控与持续迭代实践
  • 字节跳动大模型工程师日常与 Top Seed 计划深度解析
  • 数据结构:二叉树与堆
  • 利用 GitHub Copilot 和 Figma MCP 还原设计稿生成前端代码
  • PyPy 生成器优化深度解析:JIT 加速下的 Python 性能提升
  • 2026 年医疗 AI 可信系统全栈实现(上)
  • 基于 C++ 与 SFML 的 2026 新春烟花模拟程序
  • Transformer 架构与大模型应用开发实战指南
  • Xiaomusic 让小爱音箱解锁本地曲库,内网穿透实现远程点歌
  • SpringBoot 使用 Spring AI 构建简单智能助手
  • C++ 哈希表封装:模拟实现 unordered_map 与 unordered_set
  • 拆解 Linux 中的 IP 协议与数据链路层:地址、路由与分片的底层逻辑
  • Ling Studio 实测:万亿参数模型如何重塑 AI 开发工作流
  • 2026 年十大 AI 编程工具推荐
  • JRebel 插件安装、激活与配置教程
  • YOLOv8 ROS 解决机器人视觉感知核心难题
  • OpenCLAW Linux 系统部署与配置指南
  • 视频理解技术产业实践:从算法选型到本地化部署

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online