去中心化把 Hexo 博客源码备份到网盘和远程主机

这是去中心化博客备份专题的第 1 篇。

互联网时代的“狡兔三窟”,叫作“去中心化”。

GitHub 封禁伊朗和俄罗斯开发者的私有账户,不能说明大厂不靠谱或者开源不靠谱,相反,说明了中心化不靠谱。即使 GitHub 那样的大厂,也会因为合规要求而封禁账号。如果开发者仅仅依赖 GitHub 托管源码,那还是落入了中心化的窠臼。

谷月姐不但给 博客 建立了好几个镜像,而且源码放在好几个不同的云盘和源码托管平台。就是要去中心化,免得一旦中美开战, GitHub 封禁中国开发者的账户,导致我的博客全军覆没。

我的 博客 源码在本地有一份,在 GitHub 有一份。接下来,谷月姐要把它备份到不同的云端。如果本地或 GitHub 出错,可以及时恢复。如果我的 GitHub 被封禁,还可以转移到其他的源码托管网站,或者从本地发布我的博客。

下面,谷月姐要把源码备份到网盘和远程主机。

1 准备工作

  • Windows 用户要安装 OpenSSH,以启用 ssh-keygensshscp 等命令。Mac/Linux 用户无须安装,操作系统自带这些命令。

  • 安装压缩工具,此处以 WinRAR 和 7zip 为例。

  • 安装网盘客户端,并配置自动同步文件夹。本文以 OneDrive 为例,OneDrive 是 Windows 自带的,它的同步文件夹是 C:\Users\<你的用户名>\OneDrive,它会自动将这个文件夹中的文件及子文件夹与云端保持同步。

  • 准备远程主机,远程主机要运行 Linux 系统;在本地用 ssh-keygen 命令生成一对公钥和一对私钥,并在远程主机配置公钥,以实现无密码登录。

2 脚本 (Windows 版)

我写了一个批处理文件,命名为 BackupMyBlog.cmd,保存到 C:\Users\Kukmoon\kukmoon_blog 文件夹,即我的博客源文件所在目录。

每次更新博文以后,在博客源文件所在目录执行它,或者用 schtasks 命令定期执行。

1
2
3
4
5
call hexo clean
rd /s /q .\.deploy_git
"C:\Program Files\WinRAR\Rar.exe" u -ep1 -r -rr -mt4 -m5 %TEMP%\kukmoon_blog.rar C:\Users\kukmoon\kukmoon_blog
xcopy /y %TEMP%\kukmoon_blog.rar "C:\Users\kukmoon\OneDrive"
scp %TEMP%\kukmoon_blog.rar kukmoon@999.999.999.999:/home/kukmoon/kukmoon_blog/

每行命令的作用解读:

  1. 清理发布博客时生成的静态文件,如果不加上 call 关键字,执行完 hexo clean 以后就会自动中断批处理。

  2. 清理通过 git 发布博客时生成的静态文件。

  3. 调用 WinRAR 将我的博客源文件所在的文件夹打包压缩为 kukmoon_blog.rar 文件。其中,u 表示压缩并更新文件;-ep1 在压缩包中使用相对路径;-r 表示递归打包压缩该文件夹下每一层子文件夹及文件;-rr 表示添加恢复记录,以免在网络传输中出错导致无法修复;-mt4 表示四线程压缩,建议改成你 CPU 的实际线程数以求得最快速率;-m5 表示最高压缩率。

  4. 将生成的 kukmoon_blog.rar 复制到网盘的同步文件夹下,由网盘的同步 App 上传到云端。需要事先安装网盘的同步 App,由于 OneDrive 是 Windows 自带的,所以不需要 App。XCOPY 是 Windows 特有的命令,比起 copy 命令,更适合复制大文件。

  5. 将生成的 kukmoon_blog.rar 复制到运行 Linux 操作系统的远程主机。假设远程主机的 IP 地址为 999.999.999.999,用户名为 kukmoon

3 脚本 (macOS/Linux 版)

我写了一个脚本,命名为 BackupMyBlog.sh,保存到 ~/kukmoon_blog 文件夹,即我的博客源文件所在目录。

每次更新博文以后,在博客源文件所在目录执行它,或者用 cron 命令定期执行。

1
2
3
4
5
hexo clean
rm -rf ./.deploy_git
rar u -ep1 -r -rr -mt4 -m5 /tmp/kukmoon_blog.rar ~/kukmoon_blog
cp -f /tmp/kukmoon_blog.rar ~/OneDrive/
scp /tmp/kukmoon_blog.rar kukmoon@999.999.999.999:/home/kukmoon/kukmoon_blog/

每行命令的作用解读:

  1. 清理发布博客时生成的静态文件,如果不加上 call 关键字,执行完 hexo clean 以后就会自动中断批处理。

  2. 清理通过 git 发布博客时生成的静态文件。

  3. 调用 RAR for macOS/Linux 将我的博客源文件所在的文件夹打包压缩为 kukmoon_blog.rar 文件。其中,u 表示压缩并更新文件;-r 表示递归打包压缩该文件夹下每一层子文件夹及文件;-rr 表示添加恢复记录,以免在网络传输中出错导致无法修复;-mt4 表示四线程压缩,建议改成你 CPU 的实际线程数以求得最快速率;-m5 表示最高压缩率。

  4. 将生成的 kukmoon_blog.rar 复制到网盘的同步目录下,由网盘的同步 App 上传到云端。需要事先安装网盘的同步 App,此处以 OneDrive for macOS 为例,同步目录是 ~/OneDrive

  5. 将生成的 kukmoon_blog.rar 复制到运行 Linux 操作系统的远程主机。假设远程主机的 IP 地址为 999.999.999.999,用户名为 kukmoon

4 补充:7zip 命令行的使用

7zip 开源,比 WinRAR 更适合 macOS/Linux 用户,但是它缺乏恢复记录功能。

  • Windows 压缩为 7z 格式: "C:\Program Files\7zip\7z.exe" u -mmt4 -mx9 %TEMP%\kukmoon_blog.7z C:\Users\docto\kukmoon_blog\

  • Windows 压缩为 zip 格式: "C:\Program Files\7zip\7z.exe" u -mmt4 -mx9 -mcu=on %TEMP%\kukmoon_blog.zip C:\Users\docto\kukmoon_blog\

  • Mac/Linux 压缩为 7z 格式: 7z u -mmt4 -mx9 /tmp/kukmoon_blog.rar ~/kukmoon_blog/

  • Mac/Linux 压缩为 zip 格式: 7z u -mmt4 -mx9 -mcu=on /tmp/kukmoon_blog.rar ~/kukmoon_blog/

说明:u 表示压缩并更新文件;-mmt4 表示四线程;-mx9 表示最高压缩率;-mcu=on 表示强制用 UTF-8 为文件名编码,以避免在其他语言或其他操作系统平台上出现乱码,仅适用于 zip 格式。

5 总结

这样,谷月姐就把源码备份到了网盘和远程主机。读者也可以举一反三,用同样的方法,将需要去中心化备份的重要数据备份到更多的网盘、远程主机。

下期预告

下一期将介绍借助 Git 来备份博客源码。

图片版权

头图:Banner Image by milkusmaximus from Pixabay


求扫码打赏
“我这么可爱,请给我钱 o(*^ω^*)o”

去中心化把 Hexo 博客源码备份到网盘和远程主机
https://blog.kukmoon.com/d0009b119842/
作者
Kukmoon谷月
发布于
2022年3月10日
许可协议