TL;DR
博客备份三层:代码在 Git 仓库、内容在本地、S3/云存储一份归档。三层防线,任意一层出问题都能恢复。
为什么备份重要
服务器宕机、数据误删、平台跑路—这些都是真实发生过事。博客是你花时间写内容,数据丢了比服务器丢了更可惜。
备份不需要复杂,原则是:多次、异地、自动。
第一层:代码备份(Git)
博客所有代码(文章、配置、样式)都存在 Git 仓库里。推送到 GitHub 或 Gitee,就有了云端副本。
git add .
git commit -m "文章更新"
git push origin main
每次有改动就 push,仓库里始终是最新代码。
但这只是代码备份—Git 仓库不存储构建产物(dist/),也不保存服务器上动态生成数据。
第二层:内容备份(自动化脚本)
定时把服务器上重要文件同步到本地:
#!/bin/bash
# backup.sh
rsync -avz --delete ubuntu@124.222.143.232:/home/ubuntu/CloakBlog/src/content/blog/ ~/blog-backup/content/
用 crontab 每天自动执行:
crontab -e
# 添加这行:每天凌晨3点执行备份
0 3 * * * /home/ubuntu/backup.sh >> /home/ubuntu/backup.log 2>&1
第三层:媒体文件(S3 归档)
博客文章里图片应该归档存储。如果图片都托管在云图札记服务器 public/ 目录,定期打包上传:
# 打包 public 目录
tar -czf blog-media-$(date +%Y%m%d).tar.gz -C /home/ubuntu/CloakBlog public/
# 上传到 S3(需要 aws-cli 配置)
aws s3 cp blog-media-$(date +%Y%m%d).tar.gz s3://my-blog-backup/media/
Cloudflare R2 也是 S3 兼容的存储,成本比 AWS S3 更低。
恢复方案
从 Git 恢复代码
git clone https://github.com/你的用户名/my-blog.git
cd my-blog
npm install
15 分钟重建整个站点。
从备份恢复文章
# 从本地备份恢复到服务器
rsync -avz ~/blog-backup/content/ ubuntu@124.222.143.232:/home/ubuntu/CloakBlog/src/content/blog/
从 S3 恢复媒体文件
aws s3 sync s3://my-blog-backup/media/ /home/ubuntu/CloakBlog/public/
用 Cloudflare R2 做免费归档
Cloudflare R2 提供 10GB/月的免费存储额度,超出部分按量计费,对个人博客足够。
- 在 Cloudflare Dashboard → R2 → Create bucket
- 设置存储桶名称,比如
blog-archive - 配置 R2 API Token
- 用
rclone同步备份文件
# 配置 rclone
rclone config
# 添加 R2 bucket,填写 account_id 和 access_key_id
# 同步备份
rclone sync ~/blog-backup/content r2:blog-archive/content --progress
检查备份是否完整
备份最怕是:需要用时候发现备份是空或不完整。每月检查一次:
# 检查备份文件数量
ls -lh ~/blog-backup/content/*.md | wc -l
# 对比服务器文章数
ssh ubuntu@124.222.143.232 'ls /home/ubuntu/CloakBlog/src/content/blog/*.md | wc -l'
两边数量应该一致。
写在
备份是”平时嫌麻烦,出事就后悔”的事。设置好自动备份之后就不用管了,每个月抽一分钟检查一下。养成习惯,比任何技术方案都重要。
延伸阅读
COMMENTS
种下你的想法
在花园里留下一条评论,和这篇文章一起生长。