备份与恢复¶
一份完整的 Specivo 备份包含两部分:数据库转储(所有工作项、维基页面、评论和历史记录)和 数据目录(附件以及内置数据库的文件)。两者要一起备份,才能保持一致。
备份¶
1. 转储数据库¶
这会把整个数据库以纯 SQL 格式转储到宿主机上的 backup.sql。如果你在 .env 中修改过
POSTGRES_USER 或 POSTGRES_DB,请用修改后的值替换 specivo。
2. 备份数据目录¶
SPECIVO_DATA_DIR(默认 ./specivo-data)存放附件、日志、主题以及内置 Postgres 的文件。
打包归档:
把 backup.sql 和 specivo-data-backup.tar.gz 放在一起,保存到宿主机之外,并在文件名里加上
时间戳,便于区分不同的快照。
3. 把 SECRET_KEY 和备份放在一起¶
SECRET_KEY 保存在 .env.local 中,请把该文件的副本与转储一并保管,存放位置的安全级别要和
转储本身相同。Specivo 用由 SECRET_KEY 派生的密钥加密数据库里的部分机密信息:
单点登录(SSO) 提供商的客户端密钥,以及单点登录
会话上保存的 ID 令牌。已登录的会话和令牌也依赖它。
停止服务以获得完全一致的快照
要获得尽可能一致的备份,数据库转储和数据目录归档应在相近的时间完成。如果需要严格的
时间点快照,先停止整个服务栈(docker compose stop),再归档,然后重新启动。
恢复¶
恢复就是把转储导入数据库,并把数据目录放回原处。
1. 恢复数据目录¶
在服务栈停止的状态下,用归档替换数据目录:
2. 恢复数据库¶
启动数据库服务,然后把转储导入其中:
必须加 -T 参数,转储才能通过 stdin 流式导入。导入完成后,启动服务栈的其余部分:
登录后确认工作项、维基页面和附件都已齐全。
恢复到相同版本
转储只能恢复到它所来自的 同一 Specivo 版本(相同的 SPECIVO_VERSION),数据库结构
必须与正在运行的镜像匹配。如果要把数据迁到更新的版本,先在原版本上恢复并确认正常,
再升级——升级会按正确顺序执行数据库迁移。
哪些内容依赖 SECRET_KEY¶
数据库转储包含单点登录相关的表(sso_providers、user_identities 和 sso_group_mappings)
以及会话表,因此恢复后,提供商列表、已关联的账户和用户组映射都会一并回来。
如果恢复到的实例使用了不同的 SECRET_KEY,数据库里保存的客户端密钥将无法读取:提供商列表
会显示 无法读取,请重新输入,你需要打开每个提供商重新输入其密钥。其他数据不会丢失。
提供商从 SPECIVO_SSO_SECRET_* 环境变量读取的密钥不存在数据库里,不需要重新输入,但新实例
上必须设置好该变量。之前已登录的用户可能需要重新登录。
设置定期备份¶
按计划执行数据库转储(例如每晚一次的 cron 任务),并在宿主机之外保留若干天的历史备份。 从未验证过的备份算不上备份——请定期在一台临时实例上演练恢复流程,确保在真正需要时它能 正常工作。