备份和移动 Weblate

使用 BorgBackup 进行的自动化备份

3.9 新版功能.

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

警告

自动备份仅包含 PostgreSQL 数据库。其他数据库引擎必须手动备份。推荐你迁移到 PostgreSQL,请参见 Weblate 的数据库设置从其它数据库迁移到 PostgreSQL

使用 Borg 的备份是递增的, Weblate 配置为保留后面的备份:

  • 14 个每天备份

  • 8 个每周备份

  • 6个 每月备份

../_images/backups.png

Borg 加密密钥

BorgBackup 生成加密的备份,没有密码的话就不能恢复备份。当添加备份服务时产生密码,并且应该将其复制并保存在安全的地方。

在使用 Weblate 提供的备份存储 的情况下,请同样备份私有 SSH 密钥——它用于访问你的备份。

参见

borg init

Weblate 提供的备份存储

备份 Weblate 事例最简单的方法是购买 backup service at weblate.org 。激活过程可以分几步来执行:

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

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

  3. Weblate 将连接到云服务,并得到访问信息来备份。

  4. Backups 标签打开新的备份配置。

  5. 备份 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

The directory where backups will be stored have to be owned by UID 1000, otherwise Weblate will not be able to write the backups there.

远程备份

支持使用 SSH 的远程备份。SSH 服务器需要安装 BorgBackup。Weblate 使用 SSH 密钥连接服务器,请确保 Weblate SSH 密钥被服务器接受(请参见 Weblate SSH 密钥)。

提示

Weblate 提供的备份存储 为你提供自动远程备份。

从 BorgBackup 恢复

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

  2. 使用 borg list REPOSITORY 列出服务器上存在的备份。

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

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

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

  6. 将整个存储的数据目录复制到在 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.pySILENCED_SYSTEM_CHECKS 中,或 Docker的 WEBLATE_SILENCED_SYSTEM_CHECKS 中, 来关闭 Weblate 的缺少备份警告。

SILENCED_SYSTEM_CHECKS.append("weblate.I028")

数据库

实际存储位置依赖于数据库的设置。

数据库是最重要的存储。要新建数据库的常规备份,没有的话翻译设置就丢失了。

本地数据库备份

推荐的方式是使用数据库的本地工具如 pg_dumpmysqldump 来备份数据库。这通常比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`来压缩的或整个跳过。

版本控制仓库

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

版本控制仓库包含了带有 Weblate 更改的上游仓库的复制备份。 如果对所有翻译组件推进了同意允许,那么所有 Weblate 更改都包括在上游中,并且不必备份 Weblate 侧的仓库。它们可以从上游位置再次克隆,而不会丢失数据。

SSH 和 GPG 密钥

存储在 DATA_DIR /sshDATA_DIR /home 中。

如果正在使用 Weblate 生成的 SSH 或 GPG 密钥,你应该备份这些位置,否则将丢失私有密钥,并且你将不得不重新生成新的密钥。

用户上传的文件

存储在 DATA_DIR /media 中。

可以备份用户上传的文件(例如 字符串的可见文本 )。

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

恢复手动备份

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

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

    weblate updategit --all
    

移动 Weblate 安装

按照上面备份与恢复的说明,将安装重定位到不同系统。