
数据无忧,博客常在:轻松实现 Halo 博客系统阿里云 OSS 自动备份
在现代网站运维中,数据的安全性至关重要,尤其是对于像Halo
博客系统这样重要的平台,定期备份更是不可或缺。为了确保数据的完整性和可恢复性,今天我们将探讨如何使用阿里云提供的ossutil
工具,将Halo
博客系统的数据备份并安全地上传至阿里云OSS,从而为您的业务保驾护航。
虽然Halo
博客系统的插件市场提供了专门的备份插件,但这些插件通常需要付费订阅。为了节省开支,并且更灵活地管理备份过程,我们可以通过编写脚本自行实现备份,将数据上传到阿里云 OSS。这不仅避免了额外的费用,还能够根据自己的需求定制备份流程,实现高效且经济的解决方案。
ossutil 安装与使用
阿里云 OSS 提供了多种使用方法,除了通过网页手动操作外,还有丰富的工具和 SDK 可供选择。在本文中,我们将使用 ossutil
工具来完成操作。ossutil
是一款功能强大的命令行工具,适用于各种场景。关于安装细节,可以参考阿里云官网的官方文档。以下是我在Ubuntu
系统上的安装过程:
- 安装
ossutil
。
sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
- 安装过程中,需要使用解压工具(unzip、7z)解压软件包,请提前安装其中的一个解压工具。
- 安装完成后,ossutil会安装到/usr/bin/目录下。
执行上述命令后,出现如下结果,说明ossutil
工具安装成功。
- 配置
ossutil
。- 输入配置命令。
ossutil config
根据提示设置配置文件路径。
- 请输入配置文件名,文件名可以带路径(默认为:
/home/user/.ossutilconfig
,回车将使用默认路径- 如果用户设置为其它路径,在使用命令时需要将
--config-file
选项设置为该路径)- 根据提示设置工具的语言。请输入语言
CH
或EN
。- 配置
AccessKey ID
、AccessKey Secret
,STSToken
设置为空。
- 验证是否已成功安装
ossutil
。
ossutil
如果屏幕中输出ossutil
所有支持的命令,如下图所示,表明已成功安装ossutil
。
了解Halo博客系统目录情况
根据不同的Halo
版本,工作目录的名称可能有所不同,例如 .halo2
等。在这里,我们以Halo 2.18.0
版本为例,该版本通过1panel
安装,并且使用 MySQL
数据库。 而1panel也是通过 Docker Compose
安装 的。如下图所示:
data
目录:是存放网站的所有数据,包括主题,日志文件、插件等。如下图所示:
.env
:保存着一些环境变量,如数据库账号/密码,数据连接地址等等。docker-compose.yml
: 是拉起程序的主要文件。
在了解Halo
的目录结构后,我们可以确定,只需备份 Halo-blog
目录下的所有文件,就能完整备份网站的所有资源,除了数据库文件。数据库文件需要单独进行备份,以确保数据的完整性和安全性。
编写脚本
#!/bin/bash
# 日期变量
dd=$(date +%Y-%m-%d)
dd7=$(date -d'-7 day' +%Y-%m-%d)
# 目录和文件路径
backup_dir="/opt/1panel/backup/app/halo"
halo_dir="/opt/1panel/apps/halo/halo-blog"
backup_file="$backup_dir/halo-$dd.tar.gz"
oss_bucket="oss://didiplus/halo-blog-backup"
# 创建备份目录(如果不存在)
mkdir -p "$backup_dir"
# 日志记录函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$backup_dir/backup.log"
}
log "执行 Halo 文件备份!备份时间: $dd"
# 压缩 Halo 文件
if tar czf "$backup_file" "$halo_dir"; then
log "Halo 文件备份成功!文件已压缩:$backup_file"
else
log "Halo 文件压缩失败!"
exit 1
fi
log "执行文件上传至阿里云 OSS!上传时间:$dd"
# 上传文件至阿里云 OSS
if ossutil64 cp "$backup_file" "$oss_bucket/$dd/" -f; then
log "Halo 备份文件上传至阿里云 OSS 成功!"
else
log "Halo 备份文件上传至阿里云 OSS 失败!"
exit 1
fi
log "开始删除7天前的本地备份文件和 OSS 文件..."
# 删除本地7天前的备份文件
find "$backup_dir" -mtime +7 -type f -name "*.gz" -exec rm -f {} \; \
&& log "本地7天前的备份文件删除成功!" \
|| log "本地7天前的备份文件删除失败!"
# 删除阿里云 OSS 上7天前的备份目录
if ossutil64 rm "$oss_bucket/$dd7/" -rf; then
log "阿里云 OSS 上7天前的备份目录删除成功!"
else
log "阿里云 OSS 上7天前的备份目录删除失败!"
fi
log "备份流程完成。"
注意:如果使用子账号 ak/sk,对象存储访问控制 ACL 策略为私有,需要给子账号授权策略
AliyunOSSFullAccess
。
执行成功,日志如下所示:
通过命令查看OSS,Halo博客系统的备份文件已经上传成功了。如下图所示
定时执行
crontab -e
后输入定时执行命令,每天凌晨 2 点执行,路径跟进实际自行修改。
0 2 * * * bash /root/halo-blog-backup.sh
:wq
保存退出即可。
这样就完成了定时备份到阿里云对象存储,迁移的时候下载解压,再用 docker-compose
启动即可,再也不怕丢失了~
结论
通过本文介绍的步骤,您可以轻松地备份 Halo 博客系统的数据并将其安全地存储在阿里云 OSS 中。这不仅确保了数据的安全性,还为未来的恢复操作提供了保障。结合自动化脚本,您可以进一步简化备份流程,减少手动操作的负担。