备份与恢复你的实例

KolleK 内部没有自动备份功能。保护数据是运维者的职责,本页就是具体操作流程。就目前而言,这也是“如何导出所有数据”这个问题的真正答案,备份你的收藏数据 从收藏者的角度对此做了说明。

完整备份包含什么

三样东西,缺一不可:

  1. 数据库,存放在 db-data 数据卷中,包含每一条记录:账户、收藏、藏品、副本、历史记录。
  2. 存储卷 storage-data,包含每一张上传的照片和每一份文档。
  3. 应用密钥,也就是 .env 中的 APP_KEY(如果设置了 APP_PREVIOUS_KEYS,也要一并包含)。
警告

没有对应应用密钥的备份根本算不上备份。没有当初写入数据时使用的密钥,加密字段恢复出来只是一堆无法读取的密文。请将密钥与你每一次的备份一起保存,或至少同步保存。参见 应用密钥与加密

备份

导出数据库:

docker compose exec mysql mysqldump -u root -p"$DB_ROOT_PASSWORD" "$DB_DATABASE" > kollek-backup.sql

打包存储卷:

docker run --rm -v kollek_storage-data:/data -v "$PWD":/backup alpine tar czf /backup/kollek-storage.tar.gz -C /data .

把这两个文件,连同一份 .env,复制到服务器之外的地方保存。建议用每晚运行的 cron 任务自动完成,并保留多个历史版本;一份从未验证过能否恢复的备份,只是一种侥幸,算不上真正的方案。

恢复

在一台全新的机器上,按以下顺序恢复:

  1. 按照 使用 Docker 安装 安装相同版本的 KolleK,但要使用备份中的 APP_KEY(以及 APP_PREVIOUS_KEYS),而不是重新生成一个新密钥。
  2. 先启动一次服务栈,让数据卷被创建出来,然后导入数据库备份:
docker compose exec -T mysql mysql -u root -p"$DB_ROOT_PASSWORD" "$DB_DATABASE" < kollek-backup.sql
  1. 将存储卷的备份文件解压到存储卷中:
docker run --rm -v kollek_storage-data:/data -v "$PWD":/backup alpine tar xzf /backup/kollek-storage.tar.gz -C /data
  1. 使用 docker compose up -d 重启服务栈,然后登录验证是否恢复成功。

会删除所有数据的命令

警告

docker compose down -v 会删除具名数据卷,也就是数据库和所有上传的文件。切勿在生产实例上使用 -v 参数。不带该参数的 docker compose down 是安全的,不会影响数据卷。

接下来去哪里

此页面有帮助吗?