家用住宅NAS同步跨境网站全站备份数据
为什么需要在家用NAS上同步跨境网站全站数据
很多做外贸或海外业务的站长,把网站放在境外 VPS 上。
一旦服务器故障、误删文件或被入侵,数据可能彻底丢失。
家用 NAS 空间大、成本低,放在本地,个人完全可控。
通过定期同步,你可以在本地保留一份与服务器完全一致的网站文件和数据库,关键时刻直接恢复。
这套方案适合零基础用户:只要 NAS 能连 SSH、能跑定时任务,就能跟着操作。
前置准备:你的NAS和服务器需要满足什么
- 一台家用NAS:以群晖 DSM 为例(威联通、Unraid 等类似)。确保 NAS 已开启 SSH 服务(控制面板 → 终端机和 SNMP → 启用 SSH),并能通过命令行操作。
- 一台服务器(跨境 VPS):已安装 SSH,你有 root 或 sudo 权限。知道服务器 IP、用户名和密码(或已配置密钥)。
- 网络条件:NAS 能直接访问服务器 IP(跨境可能需考虑网络稳定性,建议先测试 ping 和带宽)。
- NAS 上安装 rsync:群晖默认带 rsync,无需额外安装。如果使用其他 NAS 系统,请先确认。
核心步骤:让NAS自动拉取服务器全站数据
1. 配置SSH免密登录(避免每次输入密码)
在 NAS 的终端(SSH 或控制面板的“任务计划”脚本里)执行:
# 生成 RSA 密钥对,一路回车
ssh-keygen -t rsa -b 4096
# 将公钥复制到服务器(替换为你的服务器用户名和IP)
ssh-copy-id user@你的服务器IP
如果提示 ssh-copy-id 不可用,可以手动复制:
cat ~/.ssh/id_rsa.pub
# 然后将输出的内容粘贴到服务器 ~/.ssh/authorized_keys 文件末尾
执行 ssh user@你的服务器IP 测试能否无密码登录,成功再继续。
2. 在NAS上编写同步脚本
用任意编辑器(如 vim)创建文件:/volume1/backup_scripts/backup_website.sh,内容如下:
#!/bin/bash
# 定义变量
REMOTE_USER="你的服务器用户名"
REMOTE_HOST="你的服务器IP"
REMOTE_WEB_PATH="/var/www/html" # 网站文件所在目录,请根据实际修改
LOCAL_BACKUP_PATH="/volume1/backups/website_files"
REMOTE_DB_USER="数据库用户名"
REMOTE_DB_PASS="数据库密码"
REMOTE_DB_NAME="数据库名"
LOCAL_DB_BACKUP_PATH="/volume1/backups/website_db"
# 1. 同步网站文件
rsync -avz --delete ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_WEB_PATH}/ ${LOCAL_BACKUP_PATH}/
# 2. 通过ssh远程导出数据库,然后拉取到NAS
# 先在服务器上临时导出到 /tmp,然后rsync拉回本地
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysqldump -u${REMOTE_DB_USER} -p${REMOTE_DB_PASS} ${REMOTE_DB_NAME} > /tmp/backup_db.sql"
rsync -avz ${REMOTE_USER}@${REMOTE_HOST}:/tmp/backup_db.sql ${LOCAL_DB_BACKUP_PATH}/backup_$(date +%Y%m%d_%H%M%S).sql
注意:请根据你服务器的实际路径修改 REMOTE_WEB_PATH 和数据库连接信息。
密码直接写在脚本中有一定风险,建议生产环境使用 .my.cnf 或跳过远程导出(手动在服务器上配置定时导出)。
但本教程为方便演示,保持简单。
3. 给脚本执行权限并手动测试
chmod +x /volume1/backup_scripts/backup_website.sh
bash /volume1/backup_scripts/backup_website.sh
第一次运行会传输全部文件,耗时较长。
请检查本地目录 LOCAL_BACKUP_PATH 和 LOCAL_DB_BACKUP_PATH 是否出现文件。
若能成功,则进入下一步设置自动化。
4. 设置计划任务(每天凌晨自动执行)
在群晖 DSM 中:打开“控制面板” → “任务计划” → “新增” → “计划的任务” → “用户定义的脚本”。
- 任务名称:跨境网站备份
- 用户选择 root(保证权限)
- 计划:设置每天 03:00 执行(避开高峰期)
- 运行命令:
bash /volume1/backup_scripts/backup_website.sh
保存后记得启用任务。
避坑指南:这些细节不注意可能会出问题
--delete参数要谨慎:它会删除本地但服务器不存在的文件。如果你的服务器临时少了一些文件,本地也会跟着删除。建议第一次同步后先注释掉--delete,运行几天确认无误再加回去。- 数据库密码写在脚本里是明文:如果你的 NAS 被入侵,密码就泄露了。更安全的方式:在服务器上配置自动导出到固定目录,NAS 只拉取。也可以用 SSH 密钥限制执行的命令。
- 网络不稳定导致同步失败:跨境线路可能有波动。建议在 rsync 命令后加
--partial --progress让传输支持断点续传,并在计划任务中设置重试策略(比如每小时执行一次,但只同步一次)。 - 权限问题:确保 NAS 上的目标目录有写入权限,否则 rsync 会失败。可以先用
chmod 777测试,生产环境建议设置专用用户。
如何验证备份效果
- 检查文件一致性:登录 NAS 终端,执行
ls -la /volume1/backups/website_files,查看文件列表和修改时间,与服务器对比。 - 检查数据库备份:在 NAS 上尝试用
mysql客户端导入备份文件:
mysql -u 用户名 -p 数据库名 < /volume1/backups/website_db/backup_20250325_030000.sql
若无报错,证明备份有效。
- 模拟恢复:在一台测试机上部署新的网站环境,将 NAS 备份的文件和数据库导进去,访问确认正常。
常见问题解答
Q:NAS 没有公网 IP,服务器如何回连 NAS?
不需要回连。NAS 主动通过 SSH 连接服务器拉取数据即可,NAS 只需要能访问服务器。
Q:跨境同步速度很慢怎么办?
rsync 默认使用压缩,可以加上 -z(已加)。如果文件特别多,首同步会慢,后续增量同步很快。若带宽太小,考虑分阶段同步,或在服务器端先打包再拉取。
Q:备份占用 NAS 多大空间?
网站文件大小 = 服务器实际占用。数据库备份每次全量,建议保留最近7天,使用 --delete 配合 find 定期清理旧备份。
如果你按照本文操作并完成了初步同步,建议连续观察一周,确认任务正常执行。
之后你就可以放心地看着 NAS 每天自动拉取跨境网站的全站数据,再也不用担心服务器意外丢失数据了。