Резервное копирование и перенос Weblate

Автоматическое резервное копирование с помощью BorgBackup

Добавлено в версии 3.9.

В Weblate встроена поддержка создания сервисных резервных копий с помощью BorgBackup. Borg создаёт компактные зашифрованные резервные копии, которые можно безопасно хранить в облаке. Управлять резервными копиями можно через интерфейс управления на вкладке Резервные копии.

Изменено в версии 4.4.1: Теперь обе поддерживаемые базы данных: и PostgreSQL, и MySQL/MariaDB, включаются в автоматические резервные копии.

Резервные копии, которые делает Borg, являются инкрементальными, и Weblate настроен на хранение следующих ревизий резервных копий:

  • Ежедневных, за последние 14 дней

  • Еженедельных, за последние 8 недель

  • Ежемесячных, за последние 6 месяцев

../_images/backups.png

Ключ шифрования Borg

BorgBackup создаёт зашифрованные резервные копии и восстановить из без кодовой фразы у вас не получится. Парольная фраза генерируется при добавлении новой службы резервного копирования. Вы должны скопировать её и сохранить в безопасном месте.

Если же вы используете хранилище резервных копий на Weblate.org, то сохраните также резервную копию вашего закрытого SSH-ключа — он понадобится для доступа к вашим резервным копиям.

См.также

borg init

Настройка резервного копирования

  • Резервное копирование базы данных может быть настроено через параметр DATABASE_BACKUP.

  • Создание резервной копии может быть настроено с помощью параметра BORG_EXTRA_ARGS.

Предоставляемое Weblate’ом хранилище резервных копий

Самый простой способ резервного копирования вашего экземпляра Weblate — приобрести сервис резервного копирования на weblate.org. Его можно будет активировать следующим образом:

  1. Покупка сервиса резервного копирования на https://weblate.org/support/#backup.

  2. Ввод полученного ключа в интерфейсе управления, смотрите раздел Интегрированная поддержка.

  3. Weblate подключается к облачному сервису и получает информацию для доступа к резервным копиям.

  4. Включение новой конфигурации резервного копирования на вкладке Резервные копии.

  5. Создайте резервную копию своих учётных данных Borg, чтобы иметь возможность восстанавливать резервные копии; смотрите раздел «Ключ шифрования Borg».

Подсказка

Шаг ручного включения предусмотрен для вашей безопасности. Без вашего согласия никакие данные в репозитории резервных копий, полученные в процессе регистрации, не отправляются.

Использование собственного хранилища резервных копий

Также вы можете использовать своё собственное хранилище для резервного копирования. Загрузка резервных копий на удалённый сервер может осуществляться через SSH, на целевом сервере должен быть установлен BorgBackup.

См.также

Раздел Общие сведения в документации Borg

Локальная файловая система

Для локальной резервной копии рекомендуется указывать абсолютный путь, например /путь/к/резервной_копии. Каталог должен быть доступен на запись для пользователя, под которым запущен Weblate (смотрите раздел Права доступа к файлам). В случае, если каталог не существует, Weblate попытается его создать, но для этого понадобятся соответствующие права доступа.

Подсказка

Если Weblate запущен в Docker’е, убедитесь, что местоположение резервных копий в контейнере Weblate отображается на какой-либо том. В противном случае при перезагрузке контейнера Docker все резервные копии будут потеряны.

Одним из вариантов является размещение резервных копий в существующем томе. Подойдёт, к примеру, /app/data/borgbackup. Это один из томов уже существующих в контейнере.

Также вы можете добавить в файл Docker Compose новый контейнер для резервных копий и использовать, например, путь /borgbackup:

services:
  weblate:
    volumes:
      - /home/weblate/data:/app/data
      - /home/weblate/borgbackup:/borgbackup

Владельцем каталога, в котором будут хранится резервные копии, должен быть пользователь с UID 1000, Иначе Weblate не сможет сохранять в него оные.

Удалённые резервные копии

Для создания удалённых резервных копий вам также понадобится установить BorgBackup на другой сервер, доступный для Weblate по SSH с использованием SSH-ключа Weblate:

  1. Подготовить сервер, на котором будут храниться резервные копии.

  2. Установить на него SSH-сервер (вы получите его по умолчанию в большинстве дистрибутивов Linux).

  3. Установите BorgBackup на этот сервер; большинство дистрибутивов Linux имеют доступные пакеты (смотреть Installation).

  4. Выберите существующего или создайте нового пользователя, который будет использоваться для резервного копирования.

  5. Добавить SSH-ключ Weblate к пользователю, чтобы Weblate мог подключаться к серверу по SSH без пароля (смотреть раздел SSH-ключ Weblate).

  6. Настройте местоположение резервного копирования в Weblate как пользователь@хост:/путь/к/резервным копиям или ssh://пользователь@хост:порт/путь/к/резервным копиям.

Подсказка

Предоставляемое Weblate’ом хранилище резервных копий предоставляет вам автоматическое удалённое резервное копирование без каких-либо усилий.

См.также

SSH-ключ Weblate, General

Восстановление из резервной копии Borg

  1. Восстановите доступ к своему репозиторию резервных копий и подготовьте свою парольную фразу для резервного копирования.

  2. Получите список всех резервных копий на сервере с помощью команды borg list РЕПОЗИТОРИЙ.

  3. Восстановите нужную резервную копию в текущий каталог с помощью команды borg extract РЕПОЗИТОРИЙ::АРХИВ.

  4. Восстановите базу данных из SQL-дампа, размещённого в каталоге backup каталога данных Weblate (смотрите раздел Дампы данных для резервного копирования).

  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:

См.также

borg list, borg extract

Ручное резервное копирование

В зависимости от того, что именно вы хотите сохранить, создайте резервную копию тех типов данных, которые Weblate сохраняет в каждом соответствующем месте.

Подсказка

Если вы выполняете резервное копирование вручную, вы можете подавить предупреждение Weblate об отсутствии резервного копирования, добавив проверку weblate.I028 к параметру SILENCED_SYSTEM_CHECKS в settings.py или к переменной окружения WEBLATE_SILENCED_SYSTEM_CHECKS Docker’а.

SILENCED_SYSTEM_CHECKS.append("weblate.I028")

База данных

Фактическое расположение хранилища зависит от настроек вашей базы данных.

Подсказка

База данных является самым важным хранилищем. Настройте регулярное резервное копирование своей БД. Без неё все переводы попросту пропадут.

Встроенные средства базы данных для резервного копирования

Рекомендуемый подход заключается в создании дампа базы данных с помощью родных для конкретной СУБД инструментов, таких как pg_dump или mysqldump. Обычно они работают лучше, чем резервные копии Django, и восстанавливают полные таблицы со всеми данными.

Эту резервную копию вы можете восстановить и на болле новом выпуске Weblate, при запуске через migrate он выполнит все необходимые миграции. За более подробной информацией о том, как выполнять обновление между версиями обратитесь к разделу «Обновление Weblate».

Резервное копирование базы данных средствами Django

В качестве альтернативы вы можете создать резервную копию базы данных при помощи Django’вской команды dumpdata. Резервное копирование этим способом не зависит от базы данных и может быть использовано в случае, если вы захотите сменить СУБД.

Перед восстановлением вам следует убедиться, что у вас запущена в точности та же самая версия Weblate, с которой была сделана резервная копия. Это необходимо, так как структура базы данных меняется от выпуска к выпуску, и если вы не выполните это условие, то, в конечном итоге, повредите данные тем или иным образом. После установке этой версии запустите все миграции базы данных с помощью команды migrate.

После этого некоторые записи уже будут созданы в базе данных, и они также попадут в резервную копию базы данных. Такие записи рекомендуется удалять вручную в оболочке управления (смотрите раздел Вызов команд управления):

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.

Резервные копии базы данных по умолчанию сохраняются в виде простого текста, но их также можно сжать или полностью выключить, устанавив параметр DATABASE_BACKUP.

Для восстановления резервной копии базы данных загрузите её с помощью инструментов dabase, например:

psql --file=database.sql weblate

Репозитории системы контроля версий

Хранятся в DATA_DIR /vcs.

Репозитории системы контроля версий содержат копии ваших вышестоящих репозиториев с изменениями из Weblate’а. Если вы включили для всех ваших компонентов перевода Отправлять при коммите в вышестоящий репозиторий при коммите (Отправлять при коммите), в этот репозиторий включаются все изменения из 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

Восстановление ручных резервных копий

  1. Восстановите все данные, сохранённые вами в резервной копии.

  2. Обновите все репозитории с помощью команды updategit.

    weblate updategit --all
    

Перенос установки Weblate

Переместите свою установку на другую систему, следуя приведённым выше инструкциям по резервному копированию и восстановлению из резервной копии.