导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
最新评论
广树管理员
2025-04-29 22:48
@夕阳西下:哈哈哈,是这么操作的
夕阳西下
2025-04-29 22:46
一个睡觉,另外一个放衣服
广树管理员
2025-04-29 21:37
@Zrzzz:期待第四季的摇曳露营吧
广树管理员
2025-04-29 21:37
@mikusa:哈哈哈,确实有点出戏
广树管理员
2025-04-29 21:37
@ZeroCounter:是吗?真的被飞机的量吓到了。2块面包,1盒咖喱米饭,1碗沙拉,1碗水果,1杯茶,1杯水。
攻略中
星空列车与白的旅行
暂无评分
Steam星空列车与白的旅行
2025年2月22日 22时 ~ 攻略中
已累计游玩2个月7天
乘坐的列车,划破夜空,飞驰在星空之下,令人心旷神怡——这可真是场超值之旅。舒爽夜风吹拂下的随心独旅中,我邂逅了随性的乘客,可人怜爱的乘务员。以及……猫耳少女?这场旅行,究竟会在她身上,留下了些什么呢?
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

通过BorgBackup自动化备份网站到远程服务器

作者:广树时间:2024-03-18 21:16:37分类:服务器

BorgBackup(或简称为 Borg)是一个开源的、去重的、压缩的、加密的备份程序。它提供了高效、安全的方式来备份数据。

此次是以两台服务器之间进行文件备份为场景,简单的记录一下BorgBackup自动化备份网站的过程。


A为网站服务器,B为备份用的服务器。

B服务器前提:防火墙开放SSH端口给A服务器。


AB服务器安装BorgBackup

sudo apt-get update
sudo apt-get install borgbackup


B服务器创建一个用户

sudo adduser backupuser


B服务器创建一个repo

borg init --encryption=repokey /path/to/repo

这里以repokey为例,此时会要求设定密码。


A服务器设置SSH密钥对

ssh-keygen

因为是自动化需要,这个密钥对不设置密码。


将 A 服务器的公钥复制到 B 服务器

ssh-copy-id backupuser@B服务器域名或者IP

输入前面B服务器的backupuser的密码。


配置sh脚本

#!/bin/bash
# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加你的私钥到 ssh-agent
ssh-add /root/.ssh/id_rsa

# 定义备份源和目标
SOURCE="/A/path/to/repo"
TARGET="backupuser@domain.com:/path/to/repo"

# 设置 BORG_PASSPHRASE 环境变量,Borg 将使用这个变量作为密码
export BORG_PASSPHRASE='xxxxxxxxxxx'

# 使用 Borg 创建新的备份,exclude 排除文件夹
borg create --exclude '/A/excludePath' "${TARGET}::{now:%Y%m%d%H%M%S}" "${SOURCE}"

# 删除 30 天前的备份,防止空间不足
borg prune -v --list --keep-within 30d "${TARGET}"


打开当前用户的 crontab 文件

crontab -e


添加一行来定义你的 cron 任务

0 1 * * * /path/to/your/script.sh

例如,如果你想要每天凌晨 1 点运行你的脚本

请注意,你的 sh 脚本需要有执行权限。你可以使用 chmod 命令来给它添加执行权限:

chmod +x /path/to/your/script.sh


从B服务器提取备份文档并打包成zip

borg extract --strip-components 3 /path/to/repo::my-backup

在 borg extract 命令中,--strip-components 选项用于移除从备份中提取的文件路径的前缀部分。这个选项的参数是你想要移除的路径组件的数量。

例如,假设你的备份中有一个文件,其路径为 /www/wwwroot/test/myfile.txt。如果你使用 --strip-components 3,那么在提取备份时,这个文件的路径将变为 myfile.txt。这是因为 --strip-components 3 移除了路径的前三个组件,即 /www/、wwwroot/ 和 test/。

然后可以通过指令压缩成zip文件

zip -r backup.zip .


同理也可以直接在A服务器拉取档案

eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_rsa && export BORG_PASSPHRASE='xxxxxxxxxxx' && borg extract ssh://backupuser@domain.com:/path/to/repo::my-backup /path/to/restore


donate.png

1210 x 50(蓝底).png

cloudcone