前言

数据无价,尤其是对于服务器维护人员而言,一个不小心的 rm -rf /* 就足以让多年的心血付诸一炬,因此定期的备份是十分有必要的。好在Hexo基于Node.js,大量的依赖都可以根据package.json中的内容通过npm install直接生成,因此Hexo的备份十分轻量化。

对于备份的目的地,我选择的是国内服务商提供的对象存储:COSOSS,他们提供的对象存储服务都是S3兼容模式的,可以适配大多数备份软件,后续使用更加便利。

最后是软件选择,Linux用户可以简单写一个定期备份脚本或者使用诸如oneinstack内置脚本。由于我本人博客是放置在Windows上的,最后我选择使用Iperius Backup软件进行备份。

我们的备份思路如下:

  • 分析需要备份的文件
  • 选择备份目的地:对象存储
  • 利用工具进行定期备份:Iperius Backup

备份过程

文件分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
λ ls -al
drwxr-xr-x 1 0 9月 10 17:44 .deploy_git/ #部署内容,无需备份
drwxr-xr-x 1 0 6月 28 20:06 .github/ #Github配置相关
-rw-r--r-- 1 71 6月 28 20:06 .gitignore #Git忽略内容
-rw-r--r-- 1 27127 9月 10 17:44 _config.butterfly.yml #主题配置文件
-rw-r--r-- 1 0 6月 28 20:06 _config.landscape.yml #另一个主题配置文件
-rw-r--r-- 1 3016 9月 10 17:33 _config.yml #Hexo配置文件
-rw-r--r-- 1 568092 9月 10 17:44 db.json #Hexo数据库
drwxr-xr-x 1 0 9月 10 17:20 node_modules/ #依赖模块,可以通过 npm install 重新下载生成,无需备份
-rw-r--r-- 1 903 9月 10 17:08 package.json #依赖模块列表
-rw-r--r-- 1 135004 9月 10 17:08 package-lock.json #依赖模块安装记录:https://www.npmjs.cn/files/package-locks/ 无需备份
drwxr-xr-x 1 0 9月 10 17:44 public/ #生成的静态文件,无需备份
drwxr-xr-x 1 0 6月 28 20:06 scaffolds/ #博客的模板文件
drwxr-xr-x 1 0 9月 9 18:11 source/ #生成网页需要的源文件,例如我们写的Markdown文档
drwxr-xr-x 1 0 6月 28 20:35 themes/ #主题目录

云端创建对象存储

创建存储桶

这里我们以阿里云OSS为例,创建一个存储桶:

OSS官网: https://oss.console.aliyun.com/bucket

OSS

  • Bucket 名称:存储桶名称
  • 地域:国内速度访问速度较快,但须备案;国外地区速度较慢,但无需备案
  • Endpoint:访问入口点,后续备份软件需要使用
  • 读写权限:私有

新建访问密钥

有两种方式创建所需的访问密钥:

阿里云访问控制: https://ram.console.aliyun.com/manage/ak

该方法将直接创建一个能够全局控制云服务器的访问密钥,如果泄露则后果不堪设想,因此通常不推荐使用!

阿里云子账户: https://ram.console.aliyun.com/overview

比起AccessKey全局授权的方式,我个人更推荐新建一个只有对象存储访问权限的子账户,并使用其API进行访问,将权限限制在必须范围内,以减轻泄露后的损失。

  1. 新建用户

    oss_newuser

  2. 授予权限

    oss_authority

软件使用

本例中使用的备份软件是Iperius Backup,使用版本为7.5.0。这里吐槽一下,5.8.0版本的算号器居然还能够对最新版生效….

  1. 新建备份,设定排除文件:

    backup-folder

  2. 添加云端目的地

    cloud

  3. 启动备份计划,每天八点执行

    schedule

后记

一个简单的备份方案已经初步完成了,考虑到现有不足,后续优化方案如下:

  • 设置多个备份目的地,提高数据稳固性
  • 记录相对原主题文件有过修改的文件,适配后续更新

参考资料: