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

一、创建 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
五、设置宝塔计划任务
现在脚本已经可以正常工作,让我们在宝塔面板中设置计划任务:
-
登录宝塔面板 → 计划任务
-
添加任务:
-
任务类型:Shell 脚本
-
任务名称:每日自动更新网站
-
执行周期:每天
-
脚本内容:
bash /www/scripts/update_website.sh保存任务
-























暂无评论内容