使用 Github actions 自动部署 Hexo blog 到个人VPS
在前几年,使用 Hexo
博客可以说是一种潮流,而现在转到 hugo
的人也越来越多。 简单研究了一下 hugo
,的确比 hexo
更轻,但还是有一定的学习成本。都只是静态页,没必要放弃 node
平台转到 golang
上 。
hexo 最大的弱点就是自动部署的问题,时常会遇到 nodejs
各种无厘头的错误。对环境依赖过重了。
幸好有了 Github actions
相当于有了 CI\CD
的支持,只需要把文章推到私有库中,就能实现全自动发布到个人博客服务上了,现在把脚本和实践汇总一下。
目标
实现从文章推到仓库的后半程发布自动化;
不是发布到 github page
是个人VPS!
前提条件
有一台私人博客服务器能使用 私钥
登录
创建配置客户端私钥
实现方式 VPS 搭建 Git 环境
# 创建用户
adduser git
# 切换用户
su git
cd ~
# 安装 git
apt install git-core
# 初始化仓库
git init --bare hexo.git
Github 后台配置 Github 私有仓库: blog
这里是存放 Hexo 博客源码
把本地id_rsa文件内容复制到 Github Actions secrets 中
路径:项目 Settings > Secrets > New repository secret
Name 使用 HEXO_DEPLOY_KEY
保持和下面的配置文件一致;
Github 代码配置 文件:.github/workflows/hexo.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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 name: Hexo Blog CI on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Repository master branch uses: actions/checkout@master - name: Setup Node.js 14. x uses: actions/setup-node@master with: node-version: "14.x" - name: Cache node modules uses: actions/cache@v2 with: path: node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install Dependencies if: steps.cache.outputs.cache-hit != 'true' run: | npm install hexo-cli -g npm install -f - name: Setup Deploy Private Key env: HEXO_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }} run: | mkdir -p ~/.ssh/ echo "$HEXO_DEPLOY_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan your-domain.com >> ~/.ssh/known_hosts - name: Setup Git Infomation run: | git config --global user.name '用户名' git config --global user.email '邮箱' - name: Deploy Hexo run: | hexo clean hexo generate hexo deploy
Hexo项目根目录配置文件 _config.yml
中配置
这样在github中提交的文章会自动执行 workflow 脚本。脚本实现了自动执行以下关键动作。
1 2 3 4 5 npm install hexo-cli -g npm install -f hexo clean hexo generate hexo deploy
后记: 这里还有一个小问题,为什么不直接通过 scp
把 public
文件远程复制到 VPS
的 Nginx
中呢?