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

推荐订阅源

月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Register - Security
The Register - Security
IT之家
IT之家
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
博客园 - Franky
C
Check Point Blog
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
美团技术团队
The Cloudflare Blog
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
V
V2EX
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
G
Google Developers Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
罗磊的独立博客
量子位
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
D
Docker
人人都是产品经理
人人都是产品经理

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

如何选择最佳网站搭建方案?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 发布 AI Foundation:给 Halo 插件生态一层 AI 能力底座 Halo 应用市场已支持开发者入驻和创建应用 Halo 如何接入 Google Search Console 如何自动备份 Halo 网站 让 AI Agents 管理 Halo 网站内容 支持商城小程序,Halo 2.24 发布 如何在本地快速体验 Halo 使用页面缓存插件优化 Halo 网站速度 阿里云 ESA 接入 Halo 配置指南 在本地搭建 Halo 插件开发环境 七牛云 DCDN 接入 Halo 配置指南 如何一键更新 Halo 的主题和插件 又拍云 CDN 接入 Halo 配置指南 腾讯云 EdgeOne 接入 Halo 配置指南 Halo 网站加载慢?8 种原因排查与优化方法 Halo 导入 Word 文档教程:批量导入并保留图片 主题开发技巧:为 Halo 网站添加一个知识库样式的页面 Rybbit 接入 Halo 教程:开源隐私友好的流量分析工具 Umami 接入 Halo 教程:自托管网站流量统计 在 Halo 中使用 Markdown 写作的 6 种方式 如何从社区版切换到 Halo 付费版
使用 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,需要先手动安装一次,后续再通过此工作流进行升级