备份和移动 Weblate

项目级别备份

Added in version 4.14.

警告

仅当使用 PostgreSQL 或 MariaDB 10.5+ 作为数据库时,才支持还原备份。

该项目备份了 Weblate 的所有翻译内容(项目、部件、翻译、字符串注释、建议或检查),它适用于将一个项目转移到另一个 Weblate 实例。

你可以在 管理备份 中进行项目备份。在创建项目时可以恢复备份(参见 添加翻译项目和部件)。

备份当前不包括访问控制信息和历史记录。

评论和建议由创建它们的用户的用户名备份。导入后,它会分配给匹配的用户。如果没有具有该用户名的用户,则将其分配给匿名用户。

生成的备份按照 PROJECT_BACKUP_KEEP_DAYS 和 :setting:`PROJECT_BACKUP_KEEP_COUNT`的配置保留在服务器上(默认情况下最多保留 3 个备份 30 天)。

添加翻译项目和部件 时使用生成的文件来导入项目。

备注

备份还原可能失败,如果还原服务器有不用的:ref:语言 集或不同的:setting:SIMPLIFY_LANGUAGES 配置的话。还原会告诉你哪些语言代码无法被继续,你可以接着手动添加缺失的语言定义。

使用 BorgBackup 进行的自动化备份

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

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

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

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

  • 前 8 周的每周备份

  • 前 6 个月的每月备份

../_images/backups.webp

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. 备份 选项卡下开启新的备份配置。

  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 命令,例如:

$ tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups vcs ssh home media fonts secret

你可以根据需要调整文件夹和文件的列表。为了避免保存翻译记忆库(在备份文件夹中),你可以使用:

$ 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 安装

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