跳到内容

SlideStage Pro · backup-and-restore

备份和恢复 SlideStage Pro

镜像文档保留源仓库使用的语言。站内 chrome 仍按你选的语言显示。

SlideStage Pro 的生产数据同时包含数据库和 .stage 文件。备份时必须保存整个数据卷,而不是只复制 SQLite 文件。

数据在哪里

默认 Docker Compose 部署使用 slidestage-data volume。

其中包含:

  • SQLite 数据库:用户、session、deck 元数据、邀请、笔记、批注。
  • .stage blobs:/data/decks/<deckId>/<versionId>.stage
  • SQLite WAL/SHM 辅助文件。

备份前提

你需要能在服务器上运行 Docker 命令,并且位于 SlideStagePro 部署目录。

1. 检查服务状态

docker compose ps

确认 api 正在运行,并且健康检查正常:

curl http://localhost/api/health

2. Checkpoint SQLite WAL

先让 SQLite 把 WAL 内容合并回主数据库文件:

docker compose exec api sh -c \
  'cd /data && sqlite3 slidestage-pro.sqlite "PRAGMA wal_checkpoint(FULL);"'

如果镜像里没有 sqlite3,可以跳过这步,但恢复时要确保同时保存 -wal-shm 文件。

3. 备份整个 volume

docker run --rm \
  -v slidestage-pro_slidestage-data:/data:ro \
  -v "$(pwd)":/backup \
  alpine tar czf /backup/slidestage-backup-$(date +%F).tar.gz -C / data

把生成的 .tar.gz 复制到安全位置,例如对象存储、备份服务器或离线介质。

4. 验证备份文件

列出压缩包内容:

tar tzf slidestage-backup-YYYY-MM-DD.tar.gz | head

至少应看到:

data/
data/slidestage-pro.sqlite
data/decks/

5. 恢复前停止服务

恢复会替换数据卷内容。先停止服务:

docker compose down

6. 清空并恢复 volume

谨慎执行。确认你使用的是正确的备份文件。

docker run --rm \
  -v slidestage-pro_slidestage-data:/data \
  alpine sh -c 'rm -rf /data/*'

docker run --rm \
  -v slidestage-pro_slidestage-data:/data \
  -v "$(pwd)":/backup \
  alpine tar xzf /backup/slidestage-backup-YYYY-MM-DD.tar.gz -C /

如果压缩包内路径是 data/...,上面的命令会把它恢复到 volume 根目录。

7. 启动并验证

docker compose up -d
curl http://localhost/api/health

登录 Pro,检查:

  • 用户能登录。
  • deck 列表存在。
  • .stage 可以打开。
  • 笔记和批注存在。
  • 管理员邀请记录符合预期。

备份频率建议

小团队可每天备份一次,并保留最近 7 到 30 天。

上传频繁或 deck 很重要时,建议:

  • 每天自动备份。
  • 每次升级前手动备份。
  • 定期做恢复演练。

常见问题

只备份 SQLite 可以吗

不可以。.stage 文件存放在同一个 volume 的 decks/ 目录。只备份数据库会导致恢复后 metadata 存在但 blob 丢失。

恢复后健康检查失败

检查 volume 权限、数据库文件路径,以及容器日志:

docker compose logs api

恢复后某些 deck 不能打开

检查对应的 /data/decks/<deckId>/<versionId>.stage 是否存在。若不存在,说明备份不完整或恢复路径错误。