Halo2.x版本没有自动备份的功能,参考网上的文章,写了一个脚本,每天定时备份文件到阿里云的对象存储OSS。
ossutil安装与使用
阿里云OSS有很多使用方法,除了网页的手动使用外,还有很多工具和SDK,这里用的ossutil,安装可以参考官方网站:安装ossutil
我的ecs实例是centos,安装过程如下:
安装
sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
配置
`ossutil config` 交互式输入参数,第一个参数是配置文件位置,回车默认即可;接着分别设置语言
CH
或EN
、 Endpoint、AccessKey ID、AccessKey Secret和STSToken(可忽略)参数。
备份脚本
准备工作:在halo工作目录层(不同版本可以叫法不同,可能是.halo2)创建一个 backup 目录
mkdir backup
。另外,我的halo2.4安装方式是docker-compose,数据库使用的pg库;备份脚本适用所有情况,需要自行注意文件名称与路径。
执行脚本:(2023-4-27新增备份7天的功能)
#当前时间
dd=`date +%Y-%m-%d`
dd7=`date -d'-7 day' +%Y-%m-%d`
echo "执行halo文件备份!备份时间: $dd"
#压缩halo文件
tar czf ./backup/halo-$dd.tar.gz ./halo
#打印备份成功日志
echo "halo文件备份成功! halo-$dd.tar.gz 压缩成功!"
echo "压缩后文件存储路径为---->> ./backup/halo-$dd.tar.gz"
echo "执行文件上传至阿里云oss!上传时间为:$dd"
#执行文件上传至阿里云oss操作 /ossutil64 cp 是ossutil64文件上传命令 你要上传的文件 oss://你的桶名backetName
ossutil64 cp ./backup/halo-$dd.tar.gz oss://lixx-cn/site/$dd/ -f
echo "halo备份文件上传至阿里云oss成功!"
echo "==============================上传成功=================================="
echo "-------------过期删除前7天备份文件---------时间:$dd---------"
#查看7天之前的文件
cd ./backup
find . -mtime +7 -type f -name "*.gz" -exec ls {} \;
echo "执行删除7天之前的文件!"
#删除7天之前的文件
find . -mtime +7 -type f -name "*.gz" -exec rm {} \;
echo "删除7天之前的文件成功! 删除时间:$dd "
#删除阿里云oss
echo "删除阿里云OSS 7天前的目录,目录为:$dd7 "
ossutil64 rm oss://lixx-cn/site/$dd7/ -rf
echo "================================删除完成================================"
bash oss.sh
执行,已上传到阿里云OSS。
注意:如果使用子账号ak/sk,对象存储访问控制ACL策略为私有,需要给子账号授权策略
AliyunOSSFullAccess
。
日志如下
./halo/db/pg_dynshmem/
./halo/db/pg_commit_ts/
./halo/db/pg_serial/
halo文件备份成功! halo-2023-04-15.tar.gz 压缩成功!
压缩后文件存储路径为---->> ./backup/halo-2023-04-15.tar.gz
执行文件上传至阿里云oss!上传时间为:2023-04-15
Succeed: Total num: 1, size: 43,673,286. OK num: 1(skip 1 files), Skip size: 43,673,286.
average speed 0(byte/s)
0.103383(s) elapsed
halo备份文件上传至阿里云oss成功!
==============================上传成功==================================
-------------过期删除前30天备份文件---------时间:2023-04-15---------
执行删除30天之前的文件!
删除30天之前的文件成功! 删除时间:2023-04-15
================================删除完成================================
OSS已经上传成功
定时执行
使用crontab来进行定时执行脚本,查看crontab进程运行状态,没有启动或安装即可。
status crontab
crontab -e
后输入定时执行命令,每天凌晨2点执行,路径跟进实际自行修改。
0 2 * * * bash /root/oss.sh >> /root/backup/backup.log
:wq
保存退出即可。
这样就完成了定时备份到阿里云对象存储,迁移的时候下载解压,再用docker-compose启动即可,再也不怕丢失了~
评论