当前位置:首页 > 技术分享 > 正文内容

centos 宝塔服务器上如何将网站文件定时自动备份到gitee.com

admin5小时前技术分享9

核心逻辑

  1. 为每个网站创建独立的Gitee仓库

  2. 使用Git实现增量备份(只提交新增/修改文件)

  3. 通过宝塔定时任务每天自动执行

  4. 遇到冲突时强制以本地文件覆盖远程(git push -f

步骤1:前期准备

1.1 在Gitee创建仓库

  • 登录Gitee

  • 每个网站创建独立私有仓库(如:site1-backupsite2-backup

  • 记录仓库SSH地址(格式:git@gitee.com:yourname/site1-backup.git

1.2 服务器环境配置

# 安装Git
yum install -y git
# 配置全局用户信息(用于提交记录)
git config --global user.name "ServerBackup"
git config --global user.email "backup@yourserver.com"


1.3 生成SSH密钥并添加到Gitee

#生成密钥(一路回车默认)
ssh-keygen -t rsa -b 4096 -C "server_backup_key"
# 查看公钥
cat ~/.ssh/id_rsa.pub
# 将公钥添加到 Gitee:
# 个人设置 -> SSH公钥 -> 粘贴内容

1.4 测试SSH连接

ssh -T git@gitee.com
# 看到 "Welcome to Gitee.com" 表示成功

步骤2:为每个网站创建备份脚本

2.1 脚本存放目录

mkdir -p /www/backup_scripts
cd /www/backup_scripts

2.2 创建备份脚本模板

vim /www/backup_scripts/backup_template.sh
#!/bin/bash

# ----- 配置区 -----
WEBSITE_PATH="/www/wwwroot/your_website"  # 网站目录
GITEE_REPO="git@gitee.com:yourname/repo.git"  # Gitee仓库地址
TEMP_DIR="/tmp/git_temp_backup"  # 临时工作目录
# ------------------

# 确保rsync可用
if ! command -v rsync &> /dev/null; then
    echo "安装rsync..."
    yum install rsync -y
fi

# 设置Git默认分支为main(消除警告)
git config --global init.defaultBranch main

# 创建临时目录
rm -rf $TEMP_DIR > /dev/null 2>&1
mkdir -p $TEMP_DIR

# 复制网站文件到临时目录(保留权限和时间戳)
cp -Rp $WEBSITE_PATH/* $TEMP_DIR/ > /dev/null 2>&1

# 初始化Git仓库
cd $TEMP_DIR
git init --initial-branch=main > /dev/null 2>&1
git remote add origin $GITEE_REPO > /dev/null 2>&1

# 尝试拉取现存备份(忽略错误)
git pull origin main 2>/dev/null || true

# 添加所有文件(但不提交删除操作)
for file in $(git status --porcelain | grep -v '^ D' | awk '{print $2}'); do
    git add "$file"
done

# 提交变更
if [ -n "$(git status --porcelain)" ]; then
    git commit -m "自动备份 $(date '+%Y-%m-%d %H:%M:%S')" > /dev/null
    git push -f origin main > /dev/null 2>&1
    echo "[成功] 网站已备份:${WEBSITE_PATH##*/} ($(du -sh $TEMP_DIR | awk '{print $1}'))"
else
    echo "[跳过] 无文件变更:${WEBSITE_PATH##*/}"
fi

# 清理临时文件
rm -rf $TEMP_DIR > /dev/null 2>&1

2.3 为每个网站创建专属脚本

# 示例:网站1
cp backup_template.sh backup_site1.sh
sed -i 's|/www/wwwroot/your_website|/www/wwwroot/site1|g' backup_site1.sh
sed -i 's|git@gitee.com:yourname/repo.git|git@gitee.com:yourname/site1-backup.git|g' backup_site1.sh
# 同理为其他网站创建:# 
cp backup_template.sh backup_site2.sh
# 修改对应路径和仓库地址

2.4 赋予执行权限

chmod +x /www/backup_scripts/*.sh

步骤3:设置定时任务

3.1 通过宝塔面板设置(推荐)

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

  2. 添加任务:

    • 任务类型:Shell脚本

    • 任务名称:备份网站A到Gitee

    • 执行周期:每天 3:00 AM

    • 脚本内容/www/backup_scripts/backup_site1.sh

  3. 重复添加其他网站的备份任务

3.2 手动配置Crontab(备用)

# 编辑crontab
crontab -e
# 添加以下内容(每天凌晨3点执行)
0 3 * * * /www/backup_scripts/backup_site1.sh >> /var/log/backup_site1.log 2>&1
0 4 * * * /www/backup_scripts/backup_site2.sh >> /var/log/backup_site2.log 2>&1
# 重启cron服务systemctl restart crond

步骤4:首次手动执行测试

# 测试脚本
cd /www/backup_scripts
./backup_site1.sh
# 查看日志cat /var/log/backup_site1.log
# 检查Gitee仓库
# 应看到初始提交,包含网站所有文件

关键功能说明

  1. 增量备份

    • git add -u + git reset -- <deleted_files> 组合实现只提交新增/修改

    • rsync 同步时保留文件属性

  2. 冲突处理git push -f 强制覆盖远程

  3. 安全措施

    • 使用临时目录隔离操作

    • 每次清理临时文件

    • SSH密钥加密通信

  4. 资源优化

    • 无额外存储占用(临时目录用完即删)

    • 避免完整压缩包传输

常见问题排查

# 1. 权限问题
chown -R www:www /www/backup_scripts/*.sh
# 2. Git推送失败
ssh -T git@gitee.com  
# 验证密钥
git config --global --add safe.directory '*'  
# 解决CVE-2022-24765
# 3. 查看详细日志
tail -f /var/log/backup_site1.log
# 4. 手动运行调试
cd /www/backup_scriptsbash -x backup_site1.sh

实际部署时需替换:

  1. 网站路径(/www/wwwroot/your_website

  2. Gitee仓库地址(git@gitee.com:yourname/repo.git

  3. 备份执行时间(根据服务器负载调整)


扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:http://blog.bitefu.net/post/682.html

标签: git
分享给朋友:
返回列表

上一篇:edge 浏览器网页编码修改(Charset)

没有最新的文章了...

相关文章

linux centos svn搭建及网站同步更新

以前上线的项目都是用ftp来更新的.后来技术人员多了,ftp的弊端就出来了.所以在这里给大家介绍一下我们现在正在使用的svn同步修改更新的方案.原理很简单主要是用到了svn的hooks功能.即本地提交到服务器的svn服务器.然后svn服务器...

安装Windows 10X 教你如何安装Win10X正式版 及下载地址

安装Windows 10X 教你如何安装Win10X正式版 及下载地址

安装Windows 10X 教你如何安装Win10X正式版:Windows 10X是Windows 10操作系统的新版本,主要针对双屏电脑。由于即将运行Windows 10X的双屏电脑(例如即将面世的Surface Neo)的开发遇到挫折,...

抢先体验太阳谷!20H1、20H2、21H1替换“Dev版新图标”

尽量不要替换shell32.dll.mun和zipfldr.dll.mun,这两老哥可能会带来无法预测的风险!不解除被替换文件的硬链接,已确定会导致无法安装质量更新!(详见H大测评)单替换imageres.dll.mun新图标覆盖率基本可达...

apicloud影视APP源码 无需后台

apicloud影视APP源码 无需后台

介绍集合vip影视接口到一个android app中 方便观看各平台影视资源及直播开源地址:https://gitee.com/web/vip_yingshi软件架构使用apicloud搭建影视APP源码,无后台,调用接口同步api解析网址...

python3 selenium webdriver.Chrome php 爬取汽车之家所有车型详情数据[开源版]

介绍本接口是车型库api的补充,用于爬取汽车之家所有车型详情数据开源地址:https://gitee.com/web/CarApi/tree/master/python软件架构python3 selenium webdriver.Chrom...

python 高速处理分析超大网站日志文件 带进度条手动输入日志文件

 python 高速处理分析超大网站日志文件 带进度条手动输入日志文件    1 统计本日志文件的总pv、uv    2 列出全天每小时的pv、uv数    3 列出to...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。