本项目提供了用于访问阿里云 OSS 的一些工具和自动备份的简单解决方案,基于阿里云官方的 ossutil。有关 Minecraft 在阿里云抢占式实例上的开服实践的相关介绍,可以阅读这篇文档。
Note
在开始之前,你需要准备
- ossutil 本体
可通过下列指令安装
sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
后执行 ossutil config
根据提示输入相应的参数可以快速生成配置文件,或者按照配置文件解读部分所述手动编写配置文件。
- 一组具有所需权限(例如
AliyunOSSFullAccess
)的 AccessKeyId 和 AccessKeySecret - 一个已经创建好的与你的实例在相同地域的阿里云 OSS Bucket
- 下载本项目
git clone https://github.com/seatitanium/oss.git
cd oss
- 给予权限
chmod +x ./oss
chmod +x backup/* utils/*
- 编辑配置文件。只有正确配置才能正常使用功能。为了避免意外,请阅读配置文件解读部分。
vim oss.ini
即可开始使用。
oss cp x y
将 x 传输到 yoss ls x
remote-only 列出远程目录下的文件。默认是递归(recursive)列出。添加参数-d
可只列出指定目录下的文件和子目录,注意此时的x
必须是以/
结尾的。oss get-backup-count
argumentless 获取现存备份数量- 别名
gbc
- 别名
oss rmrf x
remote-only 删除远程目录下的文件或者目录oss clear-backup(s)
argumentless DANGER 删除所有的备份文件- 别名
cb
- 别名
Tip
在使用过程中,操作的对象既可以是本地路径也可以是远程路径。
- 本地路径:本地的相对路径或者绝对路径
- 远程路径:
oss://bucket名/目录
例如在 oss cp x y
中,可以用 oss cp ~/file oss://bucket/remotedir
上传文件,也可以用 oss cp oss://bucket/remotedir/remotefile.xyz ~
下载文件。recursive
参数已经带上。
backup
目录中,purge-outdated-backup.sh
用于在备份数量达到 max_keep_count
的时候删去较旧的备份,会被 backup.sh
自动调用。正常情况下,调用 backup.sh
会将指定的文件夹(config
中的 backup_local_dir
)复制到指定的位置(config
中的 backup_remote_dir
)下的一个命名为复制的时间(格式:年-月-日_时:分:秒
)的文件夹,并删除旧的备份。ossutil 的配置中 endpoint 设定为内网可以大大加快这个过程。
可以考虑将 backup.sh
添加到 crontab 中实现自动备份。
crontab -e
# crontab 的内容
*/10 * * * * /path/to/backup.sh
Caution
- 正式启用前,请自行测试一遍脚本和 crontab 任务是否可用,避免不必要的损失。如果一切准备就绪,脚本则开始运行。
- 若要让
purge-outdated-backup
正常工作,OSS 上的备份地址内不应有任何人工创建的文件夹,否则会导致删除顺序错误
config
# 最大备份数
max_keep_count=5
# 备份所在 OSS 地址,末尾不要带斜杠
backup_remote_dir=
# 备份所在本地地址,末尾不要带斜杠
backup_local_dir=
- 最大备份数 — 正整数,允许在 OSS 上存在的最大备份数
- 备份所在 OSS 地址 — 设置在 OSS 上的备份地址。格式为
oss://bucket名/具体路径
- 例如如果要备份到
example
这个 bucket 里的/backups
目录,那么就填oss://example/backups
- 例如如果要备份到
- 备份所在本地地址 — 设置要备份的本地地址。必须是绝对路径
- ossutil 配置
ossutil 所用的配置文件默认路径为 ~/.ossutilconfig
,其内容为
[Credentials]
lang=CH
accessKeyID=
accessKeySecret=
endpoint=
accessKeyID
— 填写生成的 AccessKeyIdaccessKeySecret
— 填写生成的 AccessKeySecretendpoint
— 填写要备份到的 Bucket 的endpoint
MIT
注:ossutil 本身也是 MIT 协议开源的。