如何实时拉取github项目到网站上进行更新?

如何实时拉取github项目到网站上进行更新?

本次拉取的是一个私有的github项目,需要访问权限,目前我已经获取到了访问权限,现在教大家如何来做?

image

 

一、创建 GitHub Token 文件(访问权限文件token创建),并将token写入root/.github_token文件

1.首先,创建并保存 GitHub Personal Access Token:

设置——开发——经典——创建token
2. 创建 Token 文件,将 YOUR_ACTUAL_TOKEN 替换为真实的 Token
echo “YOUR_ACTUAL_TOKEN” > /root/.github_token

(1)设置文件权限,确保只有 root 可以读取
chmod 600 /root/.github_token

(2) 验证文件内容(不显示完整内容)
echo “Token 文件已创建,前几个字符:”
head -c 10 /root/.github_token && echo “…”

二、脚本创建

文件位置:  /www/scripts/update_website.sh

脚本内容:

#!/bin/bash

WEB_ROOT="/www/wwwroot/glb"
LOG_FILE="/www/wwwroot/glb/update.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
    echo "$1"
}

main() {
    log "=== 开始网站更新 ==="
    
    # 检查 Token 文件
    if [ ! -f "/root/.github_token" ]; then
        log "错误:Token 文件不存在 /root/.github_token"
        exit 1
    fi
    
    GITHUB_TOKEN=$(cat "/root/.github_token")
    if [ -z "$GITHUB_TOKEN" ]; then
        log "错误:Token 文件为空"
        exit 1
    fi
    
    # 创建临时目录
    TEMP_DIR=$(mktemp -d)
    cd "$TEMP_DIR" || exit 1
    
    log "下载项目..."
    
    # 下载项目
    if curl -L -H "Authorization: token $GITHUB_TOKEN" -f -o project.zip \
       "https://github.com/yanbo8991/keyboard-simulator/archive/main.zip"; then
        
        log "下载成功,解压文件..."
        
        # 解压文件
        if unzip -o project.zip; then
            # 查找项目目录
            PROJECT_DIR=$(find . -maxdepth 1 -type d -name "keyboard-simulator-*" | head -1)
            
            if [ -n "$PROJECT_DIR" ] && [ -d "$PROJECT_DIR" ]; then
                log "找到项目目录: $PROJECT_DIR"
                
                # 备份现有网站
                if [ -d "$WEB_ROOT" ] && [ "$(ls -A "$WEB_ROOT" 2>/dev/null)" ]; then
                    BACKUP_DIR="/tmp/glb_backup_$(date +%Y%m%d_%H%M%S)"
                    log "备份现有网站到: $BACKUP_DIR"
                    cp -r "$WEB_ROOT" "$BACKUP_DIR" 2>/dev/null || true
                fi
                
                # 清空网站目录(但保留目录本身)
                mkdir -p "$WEB_ROOT"
                find "$WEB_ROOT" -mindepth 1 -delete 2>/dev/null
                
                # 复制文件
                log "复制文件到网站目录..."
                cp -r "$PROJECT_DIR"/* "$WEB_ROOT"/ 2>/dev/null
                
                # 设置权限
                log "设置文件权限..."
                chown -R www:www "$WEB_ROOT" 2>/dev/null
                find "$WEB_ROOT" -type d -exec chmod 755 {} \; 2>/dev/null
                find "$WEB_ROOT" -type f -exec chmod 644 {} \; 2>/dev/null
                
                log "网站更新成功完成!"
                
                # 显示关键文件
                log "关键文件:"
                ls -la "$WEB_ROOT"/*.html >> "$LOG_FILE" 2>/dev/null
                
            else
                log "错误:未找到项目目录"
                exit 1
            fi
        else
            log "错误:解压失败"
            exit 1
        fi
    else
        log "错误:下载失败"
        exit 1
    fi
    
    # 清理
    cd /tmp
    rm -rf "$TEMP_DIR"
    unset GITHUB_TOKEN
    
    log "=== 更新完成 ==="
}

# 运行主函数
main

三、设置脚本权限

# 保存脚本
cat > /www/scripts/update_website.sh << 'EOF'
#!/bin/bash

WEB_ROOT="/www/wwwroot/glb"
LOG_FILE="/www/wwwroot/glb/update.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
    echo "$1"
}

main() {
    log "=== 开始网站更新 ==="
    
    if [ ! -f "/root/.github_token" ]; then
        log "错误:Token 文件不存在 /root/.github_token"
        exit 1
    fi
    
    GITHUB_TOKEN=$(cat "/root/.github_token")
    if [ -z "$GITHUB_TOKEN" ]; then
        log "错误:Token 文件为空"
        exit 1
    fi
    
    TEMP_DIR=$(mktemp -d)
    cd "$TEMP_DIR" || exit 1
    
    log "下载项目..."
    
    if curl -L -H "Authorization: token $GITHUB_TOKEN" -f -o project.zip \
       "https://github.com/yanbo8991/keyboard-simulator/archive/main.zip"; then
        
        log "下载成功,解压文件..."
        
        if unzip -o project.zip; then
            PROJECT_DIR=$(find . -maxdepth 1 -type d -name "keyboard-simulator-*" | head -1)
            
            if [ -n "$PROJECT_DIR" ] && [ -d "$PROJECT_DIR" ]; then
                log "找到项目目录: $PROJECT_DIR"
                
                if [ -d "$WEB_ROOT" ] && [ "$(ls -A "$WEB_ROOT" 2>/dev/null)" ]; then
                    BACKUP_DIR="/tmp/glb_backup_$(date +%Y%m%d_%H%M%S)"
                    log "备份现有网站到: $BACKUP_DIR"
                    cp -r "$WEB_ROOT" "$BACKUP_DIR" 2>/dev/null || true
                fi
                
                mkdir -p "$WEB_ROOT"
                find "$WEB_ROOT" -mindepth 1 -delete 2>/dev/null
                
                log "复制文件到网站目录..."
                cp -r "$PROJECT_DIR"/* "$WEB_ROOT"/ 2>/dev/null
                
                log "设置文件权限..."
                chown -R www:www "$WEB_ROOT" 2>/dev/null
                find "$WEB_ROOT" -type d -exec chmod 755 {} \; 2>/dev/null
                find "$WEB_ROOT" -type f -exec chmod 644 {} \; 2>/dev/null
                
                log "网站更新成功完成!"
                
                log "关键文件:"
                ls -la "$WEB_ROOT"/*.html >> "$LOG_FILE" 2>/dev/null
                
            else
                log "错误:未找到项目目录"
                exit 1
            fi
        else
            log "错误:解压失败"
            exit 1
        fi
    else
        log "错误:下载失败"
        exit 1
    fi
    
    cd /tmp
    rm -rf "$TEMP_DIR"
    unset GITHUB_TOKEN
    
    log "=== 更新完成 ==="
}

main
EOF

# 设置脚本权限
chmod 700 /www/scripts/update_website.sh

四、脚本测试

# 运行脚本
bash /www/scripts/update_website.sh

# 查看日志
tail -f /www/wwwroot/glb/update.log

五、设置宝塔计划任务

现在脚本已经可以正常工作,让我们在宝塔面板中设置计划任务:

  1. 登录宝塔面板 → 计划任务

  2. 添加任务

    • 任务类型:Shell 脚本

    • 任务名称:每日自动更新网站

    • 执行周期:每天

    • 脚本内容

      bash /www/scripts/update_website.sh

      保存任务

© 版权声明
THE END
喜欢就支持一下吧
点赞1.7W+ 分享
评论 共3条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容