我的学习 我的学习写字 · 记录 · 分享

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

· 约 2 分钟读完 #建站#Docker#随笔

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

备份最容易犯的错是「什么都想备份」:整台机器打包,几百 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 时漏了某张表」这种经典悲剧。