家用NAS自动同步跨境网站全站备份数据:零基础配置教程
为什么需要把跨境网站备份同步到家用NAS?
网站数据放服务器上,万一服务器出问题、被攻击或误删文件,没有本地副本会很被动。
用家用NAS做自动同步,等于多了一层物理隔离的增量备份,尤其适合带宽不大但希望低成本容灾的跨境站点。
本文的操作不要求你有编程基础,按步骤走就能让NAS每天定时把网站文件与数据库拉到本地。
前期准备:确认这三样东西
- NAS已开启SSH服务 – 群晖、威联通、FreeNAS等一般默认开启,你需要在后台找到“终端和SNMP”或“SSH”面板,勾选“启用SSH”。
- 远程服务器有公网IP或可使用跳板机 – 如果服务器没有公网IP,可以先用VPN打通内网,或者使用FRP反向代理。本文假设远程服务器可直接被NAS通过SSH访问。
- NAS上安装rsync – 多数NAS自带rsync,如果没有,通过套件中心或包管理器安装即可。
核心操作步骤:4步完成自动同步
步骤1:在NAS上生成SSH密钥并上传公钥到服务器
打开NAS的SSH终端(Windows用Putty,Mac/Linux用Terminal),登录NAS的admin账号。
执行:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
一路回车,不设密码。
然后查看公钥内容:
cat ~/.ssh/id_ed25519.pub
复制输出的整段公钥。
接着登录你的远程服务器(假设IP是 203.0.113.10,用户是 webadmin):
ssh-copy-id -i ~/.ssh/id_ed25519.pub webadmin@203.0.113.10
输入一次服务器密码后,以后NAS就能免密连接服务器了。
步骤2:编写全站备份脚本
在NAS上创建一个文件夹用于存放备份,比如 /volume1/backup/website/。
然后创建一个脚本文件 backup_website.sh:
#!/bin/sh
# 同步网站文件
rsync -avz --delete webadmin@203.0.113.10:/var/www/html/ /volume1/backup/website/html/
# 导出并同步数据库(以MySQL为例)
ssh webadmin@203.0.113.10 "mysqldump -u root -p'YourDBPass' --all-databases > /tmp/db_backup.sql"
rsync -avz webadmin@203.0.113.10:/tmp/db_backup.sql /volume1/backup/website/db/
注意:-avz表示归档模式+压缩传输,--delete会删除NAS上已不存在的文件(保持与服务器完全一致)。数据库密码直接写在命令里不安全,建议使用.my.cnf文件或环境变量,新手可以先按这方式快速跑通。
给脚本执行权限:
chmod +x backup_website.sh
步骤3:手动测试脚本是否能正常运行
直接执行:
./backup_website.sh
观察输出是否有报错。
如果一切正常,NAS上会出现网站文件夹和数据库文件。
确认大小和文件数合理。
步骤4:创建定时任务(cron)
NAS的cron一般通过编辑 /etc/crontab 或使用后台“任务计划”来添加。
这里用命令行举例:
crontab -e
添加一行(每天凌晨3点执行):
0 3 * * * /volume1/backup/website/backup_website.sh >> /volume1/backup/website/backup.log 2>&1
保存后,cron会自动生效。
建议把日志输出到文件以便排查。
避坑指南:新手最容易踩的三个坑
- SSH密钥权限不对:NAS上的私钥文件
~/.ssh/id_ed25519权限必须为600,否则SSH会拒绝使用。执行chmod 600 ~/.ssh/id_ed25519。 - 服务器防火墙阻止SSH端口:确认远程服务器的安全组或防火墙允许NAS的公网IP访问22端口。
- 磁盘空间不足:全站备份可能很大,设置前先查看NAS剩余空间
df -h,并考虑只备份必要的目录(如排除缓存文件夹)。
如何验证自动同步是否正常工作?
- 第二天登录NAS,检查备份目录下的文件时间戳是否为最新。
- 查看cron日志文件
backup.log,确认没有error。 - 模拟删除服务器上某个文件,运行一次脚本,看看NAS上对应文件是否也被删除(因为用了
--delete)。 - 定期恢复测试:找一台临时服务器,从NAS上用rsync推送到测试机,确保证据完整可恢复。
常见问题解答
Q:NAS没有公网IP,能主动连接远程服务器吗?
可以。
只要NAS能访问互联网(一般通过路由器NAT),就可以主动发起SSH连接。
无需NAS有公网IP。
Q:数据库备份怎么增量?
rsync只同步文件级的增量,而 mysqldump 每次都会导出一个完整SQL文件。
如果数据库太大,建议改用 mysqlbinlog 做二进制日志增量,或使用Percona XtraBackup。
对于小型跨境站,每天全量备份+保留最近7天即可。
Q:同步过程中断网会怎样?
rsync支持断点续传(--partial 参数),不过默认情况下如果中断,下次会重新传输整个文件。
建议在命令中加上 --partial --progress 以支持断点续传。
总结
用家用NAS配合rsync与cron,就能轻松实现跨境网站全站备份数据的每日自动同步。
关键环节是配置好SSH免密、写好脚本并设置定时任务。
这套方案成本低、可控性强,适合个人站长或小团队使用。
如果你在操作中遇到其他问题,欢迎留言交流。