文章

自动检测git推送后重新构建博客

自动检测git推送后重新构建博客

1. 概述

书接上回,你已经在【为jekyll-theme-chirpy添加docker镜像】中使用docker部署了自己的博客,本教程将指导你如何使用Python编写一个Flask应用,监听GitHub的Webhook,并在代码更新时自动重新部署你的博客。你还可以在这里学习【如何优雅的新增一篇博客】

2. 环境准备

确保你已经安装以下工具:

  • Python 3.x

  • Flask

    1
    
    pip install Flask
    
  • Docker

  • Git

3. 部署

3.1 编写Python代码

以下是一个简单的Python代码,用于监听GitHub的Webhook并执行部署脚本。如果你不需要通知或者没有苹果手机记得把代码里的那行删掉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask, request, jsonify
import subprocess
import requests

app = Flask(__name__)

@app.route('/redeploy_blog', methods=['POST'])
def webhook():
    if request.method == 'POST':
        # 验证请求(可选)
        # 执行脚本
        print("GitHub 更新检测到,执行脚本...")
        try:
            # 调用脚本文件
            subprocess.run(['./redeploy_blog.sh'], check=True)
            # 可选,苹果手机的一个通知软件,不需要就把这一行删掉,https://api.day.app/
            requests.get('https://api.day.app/你的barktoken/%E5%B7%B2%E9%87%8D%E6%96%B0%E6%9E%84%E5%BB%BA%E5%8D%9A%E5%AE%A2%E7%BD%91%E7%AB%99%EF%BC%81?isArchive=0')
            return jsonify({'status': 'success'}), 200
        except subprocess.CalledProcessError as e:
            return jsonify({'status': 'error', 'message': str(e)}), 500

if __name__ == '__main__':
    app.run(port=4001)

3.2 编写部署脚本

创建一个名为 redeploy_blog.sh 的Bash脚本,用于执行部署操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

# 进入到你的项目目录
cd /app/masterke2003.github.io/

# 执行 git pull
git pull

# 停止并删除现有的 Docker 容器
docker stop blog
docker rm blog

# 重新运行 Docker 容器
docker run -d \
-p 4000:4000 \
-v /app/masterke2003.github.io/:/app \
--name blog \
masterke2003/jekyll-theme-chirpy:latest

运行以下命令,使 redeploy_blog.sh 脚本可执行。

1
chmod +x redeploy_blog.sh

3.3 运行Python代码

使用以下命令在后台运行你的Python代码。

1
nohup python3 redeploy_blog.py > /tmp/redeploy.log 2>&1 &

3.4 配置GitHub Webhook

  1. 打开你的GitHub仓库,进入Settings -> Webhooks。
  2. 点击 “Add webhook”。
  3. 在 “Payload URL” 中填写你的服务器地址,例如 http://yourserver.com/redeploy_blog
  4. 选择 “application/json” 作为 “Content type”。
  5. 点击 “Add webhook” 保存配置。

3.5 配置Nginx路由

在Nginx配置文件中添加以下内容,以将请求路由到你的Flask应用。

1
2
3
4
5
6
7
8
9
10
11
12
server {
    listen 80;
    server_name yourserver.com;

    location /redeploy_blog {
        proxy_pass http://localhost:4001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

4. 测试

  1. 提交代码更改。
  2. 检查你的服务器日志 /tmp/redeploy.log,确认脚本是否被触发并执行。

5. 总结

通过以上步骤,你已经成功设置了一个自动部署博客的系统,当GitHub仓库有更新时,系统会自动拉取代码并重新部署。

本文由作者按照 CC BY 4.0 进行授权