Post · Practice · May 08, 2026

3 分钟阅读

记录基于 Shadow Red 的 JOKER(M)ementos 备份

听闻友站的不幸遭遇,决定还是先处理备份问题。

Unknown

事情的起因是这样的。在 TDEH 发布的我的服务器被黑客勒索被厂商清空一文中,他的服务器由于服务提供商保护不力,所有的数据都水灵灵的丢失了。而这不禁让我望向我这个超级便宜的 hosting,很担心那一天他带着我的数据一起破产。因此决定用手头的工具设置定期备份。

计划是这样的:

Unknown
三地备份方案

通过设置 SSH,使用服务器提供的 rsync 工具备份文件并用 mysqldump 备份数据库到本地 NAS(已经是老生常谈的解决方案了)。然后在本地 NAS 中,设置定时任务,并通过 Hyper Backup 备份资料到 Google Drive(异地+1)。这样应该就能大大减少风险,那么说干就干。

NAS 的准备阶段

本人所使用的是 Synology NAS,因此自带了一些工具可以方便的配置。下面将会演示以 CLI 界面(通过 SSH)操作,也为了之后访问服务器更加方便。

首先,进入 DSM > Control Panel > Terminal & SNMP 的 Terminal 选项卡中,将 Enable SSH service 勾选。同意安全提示后,就可以使用终端来连接 NAS 了。

BASH
ssh <nasusername>@<nasip>

连接成功后,你可以使用现有的备份目录,或者创建新的目录用来存放备份。我这里的演示是在此用户的根目录中创建了两个文件夹。

BASH
mkdir -p ~/backup/cpanel_sites/files
mkdir -p ~/backup/cpanel_sites/db

然后生成用于访问远程 hosting 的 SSH Key。

BASH
ssh-keygen -t ed25519

生成后,我们需要查看公钥的部分。通过一下命令完成。

BASH
cat ~/.ssh/id_ed25519.pub

为了安全起见并符合部分 hosting 的安全合规,需要先给 SSH key 设置访问权限。

BASH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

然后,在 cPanel 中(或者你的任意其他管理软件),依次进入 SSH Access > Manage SSH Keys > Import Key。将刚刚显示的公钥粘贴到对应的文本框中,导入后并 Authorize。接下来,你就可以在 NAS 中通过 ssh 连接到你的 hosting。

BASH
ssh <yourhostingusername>@<hostingiporhost>

如果成功连接,那么我们退回 NAS 测试一下:

BASH
rsync -avz \
--delete \
--include='public_html/***' \
--exclude='*' \
<yourhostingusername>@<hostingiporhost>:~/ \
~/backup/cpanel_sites/files/

提示

你可以根据自己的情况调整路径。此演示案例路径依照一开始的设定所配置。

如果文件出现在了指定的文件夹中,那么备份测试就完成了(视 hosting 中的文件数量和大小)。

接下来我们测试数据库的备份,使用 mysqldump 命令来将数据打包并传回。

BASH
ssh <yourhostingusername>@<hostingiporhost> \
"mysqldump -u <yourdbuserrname> -p'<yourdbpassword>' <yourdbname> | gzip -c" \
> ~/backup/cpanel_sites/db/db_$(date +%F).sql.gz

如果你也看到了新备份的 db 文件,我们就可以进入第一阶段收尾工作——设置脚本和定时执行。自动备份脚本的示例如下:

BASH
#!/bin/bash
DATE=$(date +%F)
REMOTE_USER="<hostingusername>"
REMOTE_HOST="<hostingiporhost>"
LOCAL_BASE="$HOME/backup/cpanel_sites"
mkdir -p ${LOCAL_BASE}/files
mkdir -p ${LOCAL_BASE}/db
rsync -avz \
--delete \
--include='public_html/***' \
--exclude='*' \
${REMOTE_USER}@${REMOTE_HOST}:~/ \
${LOCAL_BASE}/files/
ssh ${REMOTE_USER}@${REMOTE_HOST} \
"mysqldump -u <dbusername> -p'<dbpassword>' <dbname> | gzip -c" \
> ${LOCAL_BASE}/db/db_${DATE}.sql.gz
find ${LOCAL_BASE}/db/ -name "*.sql.gz" -mtime +14 -delete

然后给予执行权限。

BASH
chmod +x ~/backup_cpanel.sh

如果需要的话,可以手动测试脚本:

BASH
~/backup_cpanel.sh

最后,需要进入 Synology Task Scheduler > Create > Scheduled Task > User-defined script。设置名称和时间后,在 Task Settings 的选项卡中设置 User-defined script:

BASH
{/path/to/your/}backup_cpanel.sh >> {/path/for/your/}backup.log 2>&1

保存后,你可以右键单击刚创建的项目,然后点击 Run 来测试是否正常。也可通过查看 log 文件来确定是否有问题。

把文件同步到 NAS 后,我们就可以设置第三方备份了。首先下载 Hyper Backup,在弹出的提示中选择你的存储方式(我选了 Google Drive),设置好路径后就大功告成啦。

Copyright declaration

This post was written by JokerM.

CC BY-NC-ND

Notice