Hexo 博客网站的备份与恢复
使用 Hexo + Github 搭建个人博客后,有重装系统(或使用新电脑)的情竞时,都必需重新搭建,并且所有文章也都需要备份。因此,搭建完成后可以将本地网站根目录中的内容备份(包括文章)。本文记录使用 Hexo + Github 搭建的网站的备份和恢复。
本机系统为 Manjaro
如果参照本文对网站进行备份,请通篇阅读后再执行命令。
备份
Hexo 的部署命令(hexo d)是将 hexo g 产生的 public 目录中所有文件上传到远程仓,而备份的内容是本地网站根目录下的所有内容。所以,备份的方式有3种:
- 远程仓分两个分支(master 和 backup),master 分支放 public 目录中的文件,backup 分支放本地网站根目录下的所有内容。
- 远程仓仅一个 master 分支,将本地网站根目录下的所有内容及 public 文件都上传到仓内,启用 Github Page 功能时,将网站部署到 master分支的 public 目录上。
- 两个仓(blog 和 blog_backup),blog 仓放 public 目录中的内容,blog_backup 仓放本地网站根目录下所有内容。
方式1 简单,但没搞明白远程仓的两个分支怎样同步本地仓的一个分支,略。方式2 也简单,但是 Github 在国内不稳,而国内 Gitee 的 Page 功能需要 Pro 版才可以自定义域名。嗯~,好吧,我承认针对方式2 我没有试验过,但理论上可行。所以,我选了方式3,Github 仓部署网站,Gitee 仓存放本地网站根目录下所有内容。
备份前的准备工作
备份前的准备工作就是要实现 hexo d一键部署。
假如建站时执行的命令是 hexo inin Demo,则 Demo 就是本地网站根目录。两个远程仓,Github 上的名为 blog,Gitee 上的名为 blog_backup(备份用)。
因为是本地一个仓对应两个远程仓,所以很容易操作。Demo 中添加远程仓别名 blog 对应 Github 上的 blog 仓,Demo/public 添加远程仓别名 blog_backup,对应 Gitee 上的 blog_backup 仓,然后逐一 push。
1 | 以下命令是实验内容,不要执行 |
但是 ,每次执行hexo g命令后,public 目录都会先删除再新建,很麻烦,并且 Git 机制好像也不允许嵌套(Demo目录及 Demo/public 子目录都 git init)。但可是,很幸运,Hexo 的 hexo-deploy-git 插件帮我们解决了这个问题,它会帮我们将 public 文件中的内容上传到远程仓中。所以,这个插件是刚需1。
安装 hexo-deploy-git 插件
1 | # Demo 目录中 |
然后修改 Demo 根目录下的 _config.yml,新增 deploy 字段内容(或找到并完善) 1
2
3
4
5deploy:
type: git
repo: git@github.com:breky/blog.git # 网站部署到了 Github 上,所以这里填写的是 Github 上 blog 仓的 ssh 地址
branch: main # Github 仓好像不支持 master 分支名了
message:
之后就可以使用hexo d一键部署了。
备份工作
实现hexo d一键部署后,备份方式3 就简化成把 Demo 目录中的所有内容上传到 Gitee 上的 blog_backup 仓中了。在 Demo 目录中执行以下内容:
1 | git init |
在 Demo 目录中新建 .gitignore文件,内容为 git 上传时忽略的文件
1 | .DS_Store |
继续在 Demo 目录中执行以下命令:
1 | git add . |
一键部署及备份
每次部署及备份的过程就是:
1 | hexo clean |
在 Demo 目录中新建 shell 文件,实现一键部署及备份,shell 文件名为 Deploy_Backup.sh,内容为:
1 | echo "Starting Deploy and Backup" |
修改 Deploy_Backup.sh 文件属性
1 | sudo chmod 755 Deploy_Backup.sh |
每次需要部署和备份时仅需要执行以下命令,实现一键部署及备份
1 | ./Deploy_Backup.sh |
恢复
将 gitee 上的 blog_backup 仓 pull 到本地后,执行 npm install 命令。
恢复前的准备工作
恢复前本机需先安装 Hexo和 Git(Manjaro 自带此处略过)。安装完成后就直接进行恢复工作,不要建站2。
恢复工作
在本机的某个位置(如:~/Document/)新建网站根目录(如:Demo),最后网站根目录 Demo 的完整路径为~/Document/Demo,之后的所有操作都会在 Demo 目录中执行3。
1 | git init |