备份和移动 Weblate

使用 BorgBackup 进行的自动化备份

3.9 新版功能.

Weblate 内置了对使用 BorgBackup 创建服务备份的支持。Borg 创建了节省空间的加密备份,可以安全地存储在云中。可以从管理界面中的 Backups 选项卡上控制备份。

在 4.4.1 版更改: PostgreSQL 和 MySQL/MariaDB 数据库都包括在自动备份中。

使用 Borg 的备份是增量的,Weblate 被配置为保留以下备份:

  • 每天备份之前 14 天的内容

  • 前 8 周的每周备份

  • 前 6 个月的每月备份

../_images/backups.png

Borg 加密密钥

BorgBackup 创建加密的备份,如果没有密码,你将无法恢复它们。密码是在添加新的备份服务时生成的,你应该复制它并将其保存在一个安全的地方。

如果你在使用 Weblate 提供的备份存储,请同样备份你的私有 SSH 密钥,因为它用来访问你的备份。

参见

borg init

定制备份

  • 可通过 DATABASE_BACKUP 配置数据库备份。

  • 可以使用 :setting:`BORG_EXTRA_ARGS `自定义备份创建。

Weblate 提供的备份存储

备份你的 Weblate 实例的最简单方式是购买 `weblate.org 的备份服务<https://weblate.org/support/#backup>`_。这是你如何让它运行起来的方式:

  1. https://weblate.org/support/#backup 购买 备份服务

  2. 在管理界面输入得到的密钥,请参见 集成支持

  3. Weblate 将连接到云服务,并获取备份的访问信息。

  4. Backups 选项卡下开启新的备份配置。

  5. 备份你的 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 访问此服务器:

  1. 准备一个用于存储备份的服务器。

  2. 在上面安装SSH服务器(大多数Linux发行版默认情况下都会安装SSH服务器)。

  3. 在该服务器上安装 BorgBackup;大多数 Linux 发行版都有可用的软件包(参见 Installation)。

  4. 选择一个现有用户或创建一个用于备份的新用户。

  5. 为用户添加 Weblate SSH 密钥,使 Weblate 可以在不需要密码的情况下 SSH 到服务器(参见 Weblate SSH 密钥)。

  6. 将 Weblate 备份位置配置为 user@host:/path/to/backupsssh://user@host:port/path/to/backups.

提示

Weblate 提供的备份存储 为你提供毫不费力的自动远程备份。

从 BorgBackup 恢复

  1. 恢复功能会访问你的备份仓库,并准备备份密码。

  2. borg list REPOSITORY 列出服务器上的所有备份。

  3. 使用 borg extract REPOSITORY::ARCHIVE 将所需备份恢复到当前目录。

  4. 从放置在 Weblate 数据目录下 backup 目录中的 SQL 备份中恢复数据库(请参见 下载的数据用于备份)。

  5. 将 Weblate 配置 ( backups/settings.py ,请参见 下载的数据用于备份 )复制到正确的位置,请参见 调整配置

    使用 Docker 容器时,设置文件已经包含在容器中,您应该恢复原始环境变量。 environment.yml 文件可能会帮助你解决这个问题(参见 下载的数据用于备份)。

  6. 将整个存储的数据目录复制到 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.I028settings.py 中的 SILENCED_SYSTEM_CHECKS;对于 Docker,则是 WEBLATE_SILENCED_SYSTEM_CHECKS

SILENCED_SYSTEM_CHECKS.append("weblate.I028")

数据库

实际存储位置取决于数据库的设置。

提示

数据库是最重要的存储。定期对数据库进行备份。没有数据库,所有的翻译都会消失。

本地数据库备份

推荐的方式是使用数据库自带工具如 pg_dumpmysqldump 来保存数据库的转储。这通常比 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

版本控制仓库

存储在 DATA_DIR ``/vcs``中。

版本控制存储库包含带有 Weblate 更改的上游存储库的副本。如果你对所有翻译部件启用了:ref:component-push_on_commit`,那么所有 Weblate 变化都包括在上游。不需要在 Weblate 端备份存储库,因为它们可以从上游位置再次克隆,不会丢失数据。

SSH 和 GPG 密钥

存储在 DATA_DIR /sshDATA_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

恢复手动备份

  1. 将已经备份的所有数据恢复。

  2. 使用 updategit 更新所有仓库。

    weblate updategit --all
    

移动 Weblate 安装

按照上面备份与恢复说明,将你的安装迁移到不同系统。