静态站点该备份什么:一份最小清单

备份最容易犯的错是「什么都想备份」:整台机器打包,几百 G 塞进网盘,真出事的时候发现恢复不了,或者恢复完漏洞也一起带回来了。
对静态站点来说,先把文件分成两类,清单自然就出来了:资产(丢了要重写)和可再生产物(丢了再生成一次就行)。
必须备份的:内容与配置
content/—— 所有文章和页面的 Markdown,这是真正的资产;static/—— 图片、样式、图标,同样是手工产物;templates/—— 页面模板;config.toml—— 站点配置(标题、域名等);Caddyfile/docker-compose.yml—— 运行方式,几行配置,但重写要想一遍;.env—— 端口、邮箱这类环境变量。
加起来通常几 MB 到几十 MB,压缩后更小。一条命令就能打包:
tar czf blog-$(date +%F).tar.gz \
--exclude='*/__pycache__' --exclude='.env.bak*' \
blog/
不用备份的:能再生的一切
site/(构建产物)——python3 build.py几秒就回来了,备份它反而容易让人误以为「内容是这里改的」;- 证书 —— 会自动重新签发,但注意 CA 有频率限制(同一个域名短时间内反复申请会被拦),所以别没事就删数据卷重建;
- Docker 镜像 —— 重新拉一次的事(前提是拉得动,见 这篇 的处理思路);
- 容器本身 —— 声明式的东西,
docker compose up -d就回来了。
一句话:容器是临时的,配置和内容才是长久的。
恢复演练:新机器三步
备份的价值不在文件在不在,而在恢复过没有。真正恢复一次,步骤其实只有三步:
# 1. 解包到站点目录
mkdir -p /www/wwwroot/blog && tar xzf blog-2026-09-12.tar.gz -C /www/wwwroot/blog --strip-components=1
# 2. 起容器(假设 Docker 已装)
cd /www/wwwroot/blog && docker compose --env-file .env up -d
# 3. 看证书有没有自己回来
docker logs --tail 30 <容器名>
然后两件收尾的事:
- DNS:A 记录指向新机器的 IP,解析生效后 CA 才能验证域名归属,证书才会自动签下来;
- 端口:安全组放行 443(80 是否也被前面占用,决定 证书用哪种验证方式)。
如果这两步都确认了,certificate obtained successfully 那行日志通常十几秒内就出现。
小结
- 备份清单:
content/ static/ templates/ config.toml Caddyfile docker-compose.yml .env; - 不用备份:构建产物、证书、镜像;
- 恢复路径要在心里(或纸上)演练过一遍,否则备份只是心理安慰。
顺便说一句,静态站点在这方面有个天然优势:整站就是一堆纯文本加几个文件,没有数据库,也就不存在「导出 SQL 时漏了某张表」这种经典悲剧。