备份和移动 Weblate¶
使用 BorgBackup 进行的自动化备份¶
3.9 新版功能.
Weblate 内置了对使用 BorgBackup 创建服务备份的支持。Borg 创建了节省空间的加密备份,可以安全地存储在云中。可以在管理界面中的 Backups 选项卡上控制备份。
警告
自动备份仅包含 PostgreSQL 数据库。其他数据库引擎必须手动备份。推荐你迁移到 PostgreSQL,请参见 Weblate 的数据库设置 和 从其它数据库迁移到 PostgreSQL 。
使用 Borg 的备份是递增的, Weblate 配置为保留后面的备份:
14 个每天备份
8 个每周备份
6个 每月备份
Borg 加密密钥¶
BorgBackup 生成加密的备份,没有密码的话就不能恢复备份。当添加备份服务时产生密码,并且应该将其复制并保存在安全的地方。
在使用 Weblate 提供的备份存储 的情况下,请同样备份私有 SSH 密钥——它用于访问你的备份。
参见
Weblate 提供的备份存储¶
备份 Weblate 事例最简单的方法是购买 backup service at weblate.org 。激活过程可以分几步来执行:
在 https://weblate.org/support/#backup 上购买备份服务。
在管理界面输入得到的密钥,请参见 集成支持 。
Weblate 将连接到云服务,并得到访问信息来备份。
在 Backups 标签打开新的备份配置。
备份 Borg 凭据,以便能够恢复备份,请参见 Borg 加密密钥 。
提示
为了安全起见,有打开的手动步骤。没有你的同意,就不会有数据发送到通过注册步骤得到的备份仓库。
使用客户的备份存储¶
也可以使用自己的存储来备份。 SSH 可以用于在远程目的地存储备份,目标服务器需要安装 BorgBackup 。
参见
General 在 Borg 文件中
本地文件系统¶
推荐去指定本地备份的绝对路径,例如 /path/to/backup。运行 Weblate 的用户必须可写入备份目录(请参见 文件系统权限)。在目录不存在的情况下,Weblate 会尝试新建,但需要权限来执行。
提示
当在 Docker 中运行 Weblate 时,请确认备份位置显露为 Weblate 容器的卷。
一个选项是将备份防止在现有的卷中。例如,选择 /app/data/borgbackup
。这是容器中现有的卷。
也可以在 Docker 的编写文件中为备份添加新的容器并使用例如 /borgbackup
:
services:
weblate:
volumes:
- /home/weblate/data:/app/data
- /home/weblate/borgbackup:/borgbackup
备份所存储的目录由 UID 1000 所有,否则 Weblate 会不能将备份写入那里。
远程备份¶
支持使用 SSH 的远程备份。SSH 服务器需要安装 BorgBackup。Weblate 使用 SSH 密钥连接服务器,请确保 Weblate SSH 密钥被服务器接受(请参见 Weblate SSH 密钥)。
提示
Weblate 提供的备份存储 为你提供自动远程备份。
从 BorgBackup 恢复¶
恢复功能会访问你的备份仓库,并准备备份密码。
使用
borg list REPOSITORY
列出服务器上存在的备份。使用
borg extract REPOSITORY::ARCHIVE
将所需备份恢复到当前目录。从放置在 Weblate 数据目录下
backup
目录中的 SQL 备份中恢复数据库(请参见 下载的数据用于备份)。将 Weblate 配置 (
backups/settings.py
,请参见 下载的数据用于备份 )复制到正确的位置,请参见 调整配置 。将整个存储的数据目录复制到在
DATA_DIR
中配置的位置。
Borg 会话会是这个样子的:
$ borg list /tmp/xxx
Enter passphrase for key /tmp/xxx:
2019-09-26T14:56:08 Thu, 2019-09-26 14:56:08 [de0e0f13643635d5090e9896bdaceb92a023050749ad3f3350e788f1a65576a5]
$ borg extract /tmp/xxx::2019-09-26T14:56:08
Enter passphrase for key /tmp/xxx:
手动备份¶
依赖于你想存储什么, Weblate 存储的类型数据备份在各自的位置。
提示
在进行手动备份时,会想要通过将 weblate.I028
添加到 settings.py
的 SILENCED_SYSTEM_CHECKS
中,或 Docker的 WEBLATE_SILENCED_SYSTEM_CHECKS
中, 来关闭 Weblate 的缺少备份警告。
SILENCED_SYSTEM_CHECKS.append("weblate.I028")
数据库¶
实际存储位置依赖于数据库的设置。
数据库是最重要的存储。要新建数据库的常规备份,没有的话翻译设置就丢失了。
本地数据库备份¶
推荐的方式是使用数据库的本地工具如 pg_dump 或 mysqldump 来备份数据库。这通常比Django备份执行得好,并且恢复所有数据的完整表格。
可以在更新版的 Weblate 中恢复备份,当运行 migrate
时执行任何必要的迁移。如何在两个版本之间执行升级的更多细节信息请咨询 升级 Weblate 。
Django 数据库备份¶
另外,可以使用 Django 的 dumpdata
命令备份数据库。那种方式是不依托数据库的,并且可以用于先要更改数据库后端的情况。
在恢复前,需要运行与进行备份使用的 Weblate 完全一致的版本。这是必须的,因为数据库结构在发布版本之间有变化,并且会导致某种方式的数据损坏。在安装相同版本后,使用 migrate
来运行所有的数据库迁移。
一旦完成,数据库中就已经建立了一些入口,并且同样建立在数据库备份中。推荐的方法是使用管理 shell (请参见 调用管理命令 )手动删除这样的入口:
weblate shell
>>> from weblate.auth.models import User
>>> User.objects.get(username='anonymous').delete()
文件¶
如果有充足的备份空间,则简单地备份整个 DATA_DIR
。即使包括一些不想要的文件,这样做也是安全的。后面的部分具体描述了什么应该备份,什么应该跳过。
下载的数据用于备份¶
存储在 DATA_DIR
/backups
中。
Weblate 这里备份各种数据,可以包括这些文件用于更完整的备份。文件每日更新(需要运行 Celery beat 服务器,请参见 使用 Celery 的后台任务 )。当前,这包括:
Weblate 设置为
settings.py
(还有扩展版,在settings-expanded.py
)。PostgreSQL 数据库备份为
database.sql
。
数据库备份默认存储为纯文本,但也可以通过使用 :setting:`DATABASE_BACKUP`来压缩的或整个跳过。
版本控制仓库¶
版本控制仓库包含了带有 Weblate 更改的上游仓库的复制备份。 如果对所有翻译组件推进了同意允许,那么所有 Weblate 更改都包括在上游中,并且不必备份 Weblate 侧的仓库。它们可以从上游位置再次克隆,而不会丢失数据。
SSH 和 GPG 密钥¶
存储在 DATA_DIR
/ssh
和 DATA_DIR
/home
中。
如果正在使用 Weblate 生成的 SSH 或 GPG 密钥,你应该备份这些位置,否则将丢失私有密钥,并且你将不得不重新生成新的密钥。
Celery 任务¶
Celery 任务队列会包含一些信息,但备份通常不需要它。最多就是丢失了翻译内存还没有处理的更新。推荐在恢复时随便执行全文或仓库更新,这样不会有丢失的问题。
手动备份的命令行¶
使用 crom 任务,可以新建批处理命令,以每天为单位来执行,例如:
$ XZ_OPT="-9" tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups vcs ssh home media fonts secret
XZ_OPT 后面引号之间的字符串允许选择自己的 xz 选项,例如用于压缩的内存量;请参见 https://linux.die.net/man/1/xz
可以根据需要调整文件夹和文件的列表。例如,为了节省翻译内存(在备份文件夹中),可以使用:
$ XZ_OPT="-9" tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups/database.sql backups/settings.py vcs ssh home media fonts secret