备份和移动 Weblate
使用 BorgBackup 进行的自动化备份
3.9 新版功能.
Weblate 内置了对使用 BorgBackup 创建服务备份的支持。Borg 创建了节省空间的加密备份,可以安全地存储在云中。可以从管理界面中的 Backups 选项卡上控制备份。
在 4.4.1 版更改: PostgreSQL 和 MySQL/MariaDB 数据库都包括在自动备份中。
使用 Borg 的备份是增量的,Weblate 被配置为保留以下备份:
每天备份之前 14 天的内容
前 8 周的每周备份
前 6 个月的每月备份

Borg 加密密钥
BorgBackup 创建加密的备份,如果没有密码,你将无法恢复它们。密码是在添加新的备份服务时生成的,你应该复制它并将其保存在一个安全的地方。
如果你在使用 Weblate 提供的备份存储,请同样备份你的私有 SSH 密钥,因为它用来访问你的备份。
参见
定制备份
可通过
DATABASE_BACKUP
配置数据库备份。
Weblate 提供的备份存储
备份你的 Weblate 实例的最简单方式是购买 `weblate.org 的备份服务<https://weblate.org/support/#backup>`_。这是你如何让它运行起来的方式:
在 https://weblate.org/support/#backup 购买 备份服务。
在管理界面输入得到的密钥,请参见 集成支持 。
Weblate 将连接到云服务,并获取备份的访问信息。
在 Backups 选项卡下开启新的备份配置。
备份你的 Borg 凭据,以便能够恢复备份,请参见 Borg 加密密钥 。
提示
为了安全起见,有打开所有东西的手动步骤。没有你的同意,就不会有数据发送到通过注册步骤得到的备份仓库。
使用客户的备份存储
也可以使用自己的存储来备份。 SSH 可以用于在远程目的地存储备份,目标服务器需要安装 BorgBackup 。
参见
Borg 文档中的 General
本地文件系统
推荐去指定本地备份的绝对路径,例如 /path/to/backup。该目录必须可由运行 weblate 的用户写入(请参见 文件系统权限)。在目录不存在的情况下,Weblate 会尝试新建它,但需要适当的权限才能这么做。
提示
在 Docker 中运行 Weblate时,请确保备份位置暴露为来自 Weblate 容器的一个卷。否则,备份文件将在其所在的容器重启时被 Docker 丢弃。
一个选项是将备份放置在一个现有的卷中。例如, /app/data/borgbackup
。这是容器中的一个现有的卷。
你也可以在 Docker 的编写文件中为备份目的添加一个新的容器,例如使用 /borgbackup
:
services:
weblate:
volumes:
- /home/weblate/data:/app/data
- /home/weblate/borgbackup:/borgbackup
备份所存储的目录由 UID 1000 所有,否则 Weblate 将无法把备份写入那里。
远程备份
要创建远程备份,你必须将 BorgBackup 安装到另一台服务器上,你的 Weblate 部署要能使用如下 Weblate SSH 密钥通过 SSH 访问此服务器:
准备一个用于存储备份的服务器。
在上面安装SSH服务器(大多数Linux发行版默认情况下都会安装SSH服务器)。
在该服务器上安装 BorgBackup;大多数 Linux 发行版都有可用的软件包(参见 Installation)。
选择一个现有用户或创建一个用于备份的新用户。
为用户添加 Weblate SSH 密钥,使 Weblate 可以在不需要密码的情况下 SSH 到服务器(参见 Weblate SSH 密钥)。
将 Weblate 备份位置配置为
user@host:/path/to/backups
或ssh://user@host:port/path/to/backups
.
提示
Weblate 提供的备份存储 为你提供毫不费力的自动远程备份。
从 BorgBackup 恢复
恢复功能会访问你的备份仓库,并准备备份密码。
用
borg list REPOSITORY
列出服务器上的所有备份。使用
borg extract REPOSITORY::ARCHIVE
将所需备份恢复到当前目录。从放置在 Weblate 数据目录下
backup
目录中的 SQL 备份中恢复数据库(请参见 下载的数据用于备份)。将 Weblate 配置 (
backups/settings.py
,请参见 下载的数据用于备份 )复制到正确的位置,请参见 调整配置 。使用 Docker 容器时,设置文件已经包含在容器中,您应该恢复原始环境变量。
environment.yml
文件可能会帮助你解决这个问题(参见 下载的数据用于备份)。将整个存储的数据目录复制到
DATA_DIR
所配置的位置。使用 Docker 容器时,将数据置于数据卷,见 Docker 容器卷。
请确保文件具有正确的所有权和权限,请参阅 文件系统权限。
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 关于缺乏备份的警告,方法是添加 weblate.I028
到 settings.py
中的 SILENCED_SYSTEM_CHECKS
;对于 Docker,则是 WEBLATE_SILENCED_SYSTEM_CHECKS
。
SILENCED_SYSTEM_CHECKS.append("weblate.I028")
数据库
实际存储位置取决于数据库的设置。
提示
数据库是最重要的存储。定期对数据库进行备份。没有数据库,所有的翻译都会消失。
本地数据库备份
推荐的方式是使用数据库自带工具如 pg_dump 或 mysqldump 来保存数据库的转储。这通常比 Django 备份表现得好,并且可以连同数据一道,恢复完整表格。
你可以在较新的 Weblate 发行版中恢复这个备份,当运行于 migrate
时,它将执行所有必需的迁移。请参考 升级 Weblate 了解如何在版本间升级的更多详细信息。
Django 数据库备份
另外,可以使用 Django 的 dumpdata
命令备份你的数据库。那种方式是不依托数据库的,并且可以用于先要更改数据库后端的情况。
恢复数据库之前,你需要确保恢复备份和执行备份的实例运行的是完全相同的 Weblate 版本。这是必要的,因为数据库结构在不同版本之间会发生变化,你可能会以某种方式破坏数据。安装相同版本后,用 migrate
运行所有数据库迁移。
之后,一些条目将已经在数据库中创建,你也会在数据库备份中看到它们。推荐的方法是使用管理 shell 手动删除这些条目 (见:ref:invoke-manage):
weblate shell
>>> from weblate.auth.models import User
>>> User.objects.get(username='anonymous').delete()
文件
如果你有足够的备份空间,只需备份整个 DATA_DIR
。这是一个安全带,即使它包含一些你不想要的文件。下面的部分详细描述了应该备份和可以跳过的内容。
下载的数据用于备份
在 4.7 版更改: 环境变量被转储在 environment.yml
,以帮助在 Docker 中恢复环境。
存储在 DATA_DIR
/backups
中。
Weblate 这里备份各种数据,可以包括这些文件用于更完整的备份。文件每日更新(需要运行 Celery beat 服务器,请参见 使用 Celery 的后台任务 )。当前,这包括:
Weblate 设置为
settings.py
(还有扩展版,在settings-expanded.py
)。PostgreSQL 数据库备份为
database.sql
。环境变量转储在
environment.yml
。
数据库备份默认保存为纯文本,但也可以通过 :setting:`DATABASE_BACKUP`来进行压缩或整个跳过。
要恢复数据库备份,请使用数据库工具加载它,例如:
psql --file=database.sql weblate
版本控制仓库
版本控制存储库包含带有 Weblate 更改的上游存储库的副本。如果你对所有翻译部件启用了:ref:component-push_on_commit`,那么所有 Weblate 变化都包括在上游。不需要在 Weblate 端备份存储库,因为它们可以从上游位置再次克隆,不会丢失数据。
SSH 和 GPG 密钥
存储在 DATA_DIR
/ssh
和 DATA_DIR
/home
中。
如果正在使用 Weblate 生成的 SSH 或 GPG 密钥,你应该备份这些位置。否则将丢失私有密钥,并且你将不得不重新生成新的密钥。
用户上传的文件
存储在 DATA_DIR
/media
中。
你应当备份所有用户上传的文件(例如 字符串的可视化上下文 )。
Celery 任务
Celery 任务队列可能会包含一些信息,但通常无需进行备份。你最多会丢失尚未被翻译记忆库处理的更新。无论如何,建议在恢复时执行全文或存储库更新,这样就不会有丢失这些内容的问题。
手动备份的命令行
使用 cron 作业,您可以设置一条每天执行的 Bash 命令,例如:
$ 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
恢复手动备份
将已经备份的所有数据恢复。
使用
updategit
更新所有仓库。weblate updategit --all
移动 Weblate 安装
按照上面备份与恢复说明,将你的安装迁移到不同系统。