惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
L
LangChain Blog
I
InfoQ
D
Docker
F
Fortinet All Blogs
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
月光博客
月光博客
B
Blog
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
罗磊的独立博客
博客园_首页
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
IT之家
IT之家
V
V2EX

Halo - 强大易用的开源建站工具

使用 MCP,让 AI Agent 管理网站 商品询价、身份验证与编辑体验升级,Halo 2.26 发布 Halo 首个支持可视化编辑的主题,Publica 公共门户正式发布! 如何选择最佳网站搭建方案?2026年12款建站工具对比测评! Halo 和 WordPress 对比:开源 CMS 怎么选? Halo 和 Ghost 对比:博客、简报与会员订阅怎么选? Halo 和 Typecho 对比:现代 CMS 还是轻量博客? Halo 和 EmDash 对比:成熟 CMS 还是 Cloudflare 新方案? Halo 和 Hugo 对比:动态 CMS 还是静态网站生成器? Halo 和 Hexo 对比:动态 CMS 还是静态博客? Halo 和 Strapi 对比:全栈建站平台还是 Headless CMS? 在群晖 NAS 上用 Docker 部署 Halo 用 Obsidian 写文章,一键发布到 Halo 域名是什么?新手注册域名前要知道的 7 件事 虚拟主机、VPS 和云服务器有什么区别?建站服务器怎么选 建站需要准备什么?域名、服务器、备案和 SSL 的关系 域名解析:A 记录、CNAME、MX、TXT 分别怎么用 网站备案是什么?个人备案和企业备案有什么不同 SSL 证书和 HTTPS 是什么?免费证书够用吗 CDN 是什么?网站什么时候需要 CDN robots.txt 是什么?新手建站常见配置误区 Sitemap 是什么?它对网站收录有什么作用 SEO 写作基础:标题、描述、URL 和内链怎么做 301 和 302 重定向有什么区别?网站改版怎么降低排名风险 Google Analytics、Umami、Rybbit:流量统计工具怎么选 网站图片优化指南:格式、压缩和懒加载怎么做 网站安全基础:建站后必须做的 6 件事 Halo 如何定时发布文章 Halo 如何接入 Bing Webmaster Tools 支持优惠券和折扣码,Halo 2.25 发布
使用 Halo CLI + GitHub Actions 持续部署主题
Ryan Wang · 2026-04-16 · via Halo - 强大易用的开源建站工具

适合哪些场景?

在开始之前,请先确认这个方案是否适合你。它主要面向以下两类用户:

  1. 自研自用:主题由你自己开发并用于自己的网站,希望在每次推送代码后,主题能自动构建并更新到线上站点,省去手动上传的步骤。

  2. 开发测试:主题计划分享给他人使用,但需要在自己的站点上持续验证最新构建产物的效果。

如果你只是使用他人开发的主题,通过控制台的应用市场一键更新即可,不需要本文介绍的方案。

准备工作

  • 主题代码已托管在 GitHub 仓库

  • 主题具备完整的构建流程(例如使用 pnpm build 输出 dist/*.zip

  • Halo 站点可以通过公网访问,并已生成 API Token

推荐在主题的 package.json 的 build 脚本中引入 @halo-dev/theme-package-cli,自动构建一个 zip 包,并输出到 dist 目录,示例:

{
  "scripts": {
    "build": "vite build && npx @halo-dev/theme-package-cli"
  }
}

生成 API Token:

在 Halo 控制台进入个人中心 → 个人令牌,创建一个新的 Token,包含 主题管理 权限,并将其保存到 GitHub 仓库的 Settings → Secrets and variables → Actions 中,变量名设置为 HALO_TOKEN

注意:此操作需要升级到 Halo 2.24,否则 主题管理 权限可能无法调用升级主题的接口。

工作流说明

整个 CI/CD 流程分为以下几步:

  1. 推送代码到 main 分支

  2. GitHub Actions 自动触发,检出代码

  3. 使用短 commit SHA 更新 theme.yaml 中的版本号,便于追踪每次构建

  4. 安装依赖并执行构建,输出主题 zip 包

  5. 将构建产物上传为 Artifact 归档备份

  6. 安装 Halo CLI,使用 Bearer Token 完成登录认证

  7. 调用 halo theme upgrade 将新构建的主题包推送到 Halo 站点

GitHub Actions 配置

在仓库根目录创建 .github/workflows/deploy.yml 文件,内容如下:

name: Deploy theme

on:
  push:
    branches:
      - main
    paths:
      - "**"
      - "!**.md"

permissions:
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup pnpm
        uses: pnpm/action-setup@v5
        with:
          run_install: false

      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          node-version: "24"
          cache: "pnpm"

      # 更新主题版本号,便于在控制台中识别当前运行的具体版本
      - name: Update theme version
        run: |
          SHORT_SHA="${GITHUB_SHA::7}"
          sed -i "s/^  version: .*/  version: 0.0.0-${SHORT_SHA}/" theme.yaml
          grep '^  version:' theme.yaml

      - name: Install dependencies
        run: pnpm install

      - name: Build distribution
        run: pnpm build

      - name: Upload artifact
        uses: actions/upload-artifact@v7
        with:
          # 替换为你的主题名称(metadata.name)
          name: theme-foo
          path: dist/*.zip
          retention-days: 7

      - name: Install Halo CLI
        run: npm install -g @halo-dev/cli

      - name: Upgrade theme via Halo CLI
        env:
          HALO_CLI_CONFIG_DIR: ${{ runner.temp }}/halo-cli
          HALO_TOKEN: ${{ secrets.HALO_TOKEN }}
          # 替换为你的主题名称(metadata.name)
          THEME_NAME: theme-foo
          # 替换为你的 Halo 站点地址
          HALO_URL: https://www.halo.run
        run: |
          THEME_ZIP="$(echo dist/*.zip)"

          if [ ! -f "$THEME_ZIP" ]; then
            echo "Theme zip file not found in dist/"
            exit 1
          fi

          halo auth login \
            --profile ci \
            --url "$HALO_URL" \
            --auth-type bearer \
            --token "$HALO_TOKEN"

          halo theme upgrade "$THEME_NAME" \
            --profile ci \
            --file "$THEME_ZIP"

需要注意的是,此 Workflow 配置并不是固定的,这篇文章也只是提供一个思路,你可以根据自身需求进行调整,比如改为只有在创建新的 tag 时才部署。

需要根据实际情况修改的配置

配置项 说明
HALO_URL 替换为你的 Halo 站点地址,例如 https://www.example.com
THEME_NAME 替换为你的主题名称,需与 theme.yaml 中的 metadata.name 字段一致
path: dist/*.zip 如果你的构建产物路径不同,请相应修改
node-version 根据项目实际要求调整 Node.js 版本
version 中的前缀 0.0.0 随意填写,构建的时候会追加短 commit SHA 作为后缀

注意事项

  • HALO_TOKEN 是敏感信息,务必通过 GitHub Secrets 传入,不要硬编码在工作流文件中

  • 工作流中使用了 HALO_CLI_CONFIG_DIR 将 CLI 的配置目录隔离到 runner 临时目录,避免影响其他环境

  • 每次部署都会用 commit SHA 更新版本号,方便在控制台中识别当前运行的具体版本

  • 如果主题尚未安装到 Halo,需要先手动安装一次,后续再通过此工作流进行升级