创业日记 09:怎么给多个Hexo博客配置统一CI/CD自动部署

我们现在是一个主站 qinglu.online + 三个子站点(芦一号/青芦解梦/青芦AI启蒙),每个子站点都是独立的Hexo博客,对应不同的二级域名。

怎么用一个 GitHub/Gitee Actions 自动部署所有站点?我把方案分享给大家。

项目结构设计

我们采用单仓库多站点结构:

qinglu.online.gw/
├── sites/
│ ├── main/ # 主站 qinglu.online
│ ├── opclab/ # 芦一号 opclab.qinglu.online(Hexo)
│ ├── xiangcun/ # 青芦AI启蒙 xiangcun.qinglu.online(Hexo)
│ └── meng/ # 青芦解梦 meng.qinglu.online
├── deploy/
│ └── nginx/ # Nginx 配置文件
└── .github/
└── workflows/ # GitHub Actions 配置

这样做的好处:

  • 一个仓库管理所有站点,不用切来切去
  • 统一配置CI/CD,一次配置好,以后所有站点都自动部署
  • 每个站点独立生成静态文件,独立部署到对应目录

Nginx 配置思路

每个二级域名对应一个独立的 root 目录:

# 主站
server {
listen 80;
server_name qinglu.online;
root /var/www/qinglu.online/public;
...
}

# 芦一号
server {
listen 80;
server_name opclab.qinglu.online;
root /var/www/qinglu.online/opclab/public;
...
}

服务器上用 rsync 或者直接把整个 public 目录同步过去,Nginx 直接读就行,非常简单。

GitHub Actions 配置

关键就是在 Actions 里遍历所有站点,逐个生成:

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Build all sites
run: |
for site in sites/*/; do
if [ -f "$site/package.json" ]; then
echo "Building $site..."
cd "$site"
npm install
npx hexo generate
cd -
fi
done

- name: Deploy to server
# 这里用你喜欢的方式部署到服务器
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
script: |
cd /var/www/qinglu.online
git pull
# 把每个站点的 public 同步到对应目录
...

实际配置我们用的是 Gitee Actions,逻辑完全一样。

优缺点总结

优点

  • 统一管理,不用维护多个仓库
  • 配置一次,所有站点自动部署
  • 服务器端配置简单,Nginx 直接指向不同目录就行

缺点

  • 一次构建所有站点,如果站点多了,构建时间会长一点
  • 对服务器存储空间要求稍高,但静态文件本身很小,不是问题

适合谁用

如果你跟我一样:

  • 一人公司
  • 多个独立博客/站点
  • 想省事不想维护多仓库多配置

这个方案非常适合你,我现在用着没问题,推荐试试。