使用WebDAV自动备份Hexo博客到InfiniCloud

在维护博客时,备份是一个被很多人忽视但非常关键的环节。作为 Hexo 博客用户,我选择将博客目录自动备份到 InfiniCloud(它支持 WebDAV 协议)。这篇文章将完整记录我在 Ubuntu VPS 上的自动化备份流程。


🌐 背景说明

  • 博客框架:Hexo
  • 系统环境:Ubuntu
  • 备份目标:将 /opt/HexoBlog 目录打包备份上传到 InfiniCloud 网盘
  • 同步方式:WebDAV 挂载
  • 执行频率:每天凌晨自动执行一次,保留最近 30 天的备份

🔧 步骤一:安装 WebDAV 支持

首先安装 davfs2 工具包:

1
2
sudo apt update
sudo apt install davfs2 -y

安装时系统会提示:

“Should unprivileged users be allowed to mount WebDAV resources?”

请务必选择 Yes,否则普通用户无法通过脚本挂载 WebDAV。

如果你不小心选错了,可以执行以下命令重新配置:

1
sudo dpkg-reconfigure davfs2

📂 步骤二:创建挂载点并配置权限

1
2
sudo mkdir -p /mnt/infinicloud
sudo chown $USER:$USER /mnt/infinicloud

🔐 步骤三:配置 WebDAV 账户信息

WebDAV 地址与凭据如下:

  • WebDAV 地址:https://mori.teracloud.jp/dav/
  • 用户名:xxxxx
  • 密码(Apps Password):xxxxxxx

在当前用户目录下创建配置文件:

1
2
mkdir -p ~/.davfs2
nano ~/.davfs2/secrets

添加内容如下:

1
https://mori.teracloud.jp/dav/ xxxx xxxxxx

保存后设置权限,确保安全:

1
chmod 600 ~/.davfs2/secrets

📝 步骤四:配置 /etc/fstab 实现自动挂载支持

编辑文件:

1
sudo nano /etc/fstab

添加以下内容:

1
https://mori.teracloud.jp/dav/ /mnt/infinicloud davfs user,noauto 0 0

🛠️ 步骤五:编写自动备份脚本

创建脚本:

1
nano ~/hexo_backup.sh

粘贴以下内容(已按我的路径 /opt/HexoBlog 配置):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

MOUNT_POINT="/mnt/infinicloud"
SOURCE_DIR="/opt/HexoBlog"
DATE=$(date +'%Y-%m-%d_%H-%M-%S')
BACKUP_NAME="HexoBackup_$DATE.tar.gz"
LOG_FILE="$HOME/hexo_backup.log"

if ! mountpoint -q "$MOUNT_POINT"; then
echo "[$DATE] Mounting WebDAV..." >> "$LOG_FILE"
mount "$MOUNT_POINT"
fi

if mountpoint -q "$MOUNT_POINT"; then
echo "[$DATE] Starting backup..." >> "$LOG_FILE"
tar -czf "$MOUNT_POINT/$BACKUP_NAME" "$SOURCE_DIR"
echo "[$DATE] Backup saved to $BACKUP_NAME" >> "$LOG_FILE"
find "$MOUNT_POINT"/HexoBackup_*.tar.gz -mtime +30 -delete
else
echo "[$DATE] Failed to mount WebDAV. Backup aborted." >> "$LOG_FILE"
fi

赋予脚本执行权限:

1
chmod +x ~/hexo_backup.sh

⏰ 步骤六:配置定时任务(每日自动执行)

编辑用户定时任务:

1
crontab -e

添加以下内容,让脚本每天凌晨2点执行:

1
0 2 * * * /home/你的用户名/hexo_backup.sh

替换路径中的 你的用户名 为你系统中的实际用户名。


✅ 最后一步:测试功能是否正常

测试挂载:

1
2
mount /mnt/infinicloud
mountpoint /mnt/infinicloud

返回 /mnt/infinicloud is a mountpoint 即挂载成功。

测试脚本运行:

1
bash ~/hexo_backup.sh

查看备份文件:

1
ls /mnt/infinicloud/HexoBackup_*.tar.gz

查看日志:

1
cat ~/hexo_backup.log

🎉 总结

至此,我们完成了将 Hexo 博客目录 /opt/HexoBlog 定期备份到 InfiniCloud 网盘的全自动流程。这种方式安全、稳定,不依赖 GUI 和第三方同步工具,适合部署在 VPS 或远程服务器上使用。

欢迎留言交流你的自动化备份方案 🚀