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

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

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

Проект создаёт резервные копии всего содержимого переводов из Weblate (проект, компоненты, переводы, комментарии строк, предложения или проверки). Подходит для переноса проекта на другой экземпляр Weblate.

Выполнить резервное копирование проекта можно в ОперацииРезервные копии. Резервную копию можно восстановить при создании проекта (см. Добавление проектов и компонентов перевода).

В настоящее время резервные копии не содержат данные об управлении доступом и данные журнала.

The comments and suggestions are backed up with the username of the user who did create them. Upon import it is assigned to a matching user. If there is no user with such username, it is assigned to anonymous user.

Созданные резервные копии хранятся на сервере в соответствии с настройками PROJECT_BACKUP_KEEP_DAYS и PROJECT_BACKUP_KEEP_COUNT (по умолчанию хранится не более 3 резервных копий в течение 30 дней).

Import validation of uploaded project backups can be tuned using PROJECT_BACKUP_IMPORT_MAX_MEMBERS, PROJECT_BACKUP_IMPORT_MAX_TOTAL_UNCOMPRESSED_SIZE, PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_SIZE, PROJECT_BACKUP_IMPORT_MIN_RATIO_SIZE, and PROJECT_BACKUP_IMPORT_MAX_COMPRESSED_ENTRY_RATIO.

Используйте сгенерированный файл для импорта проекта в Добавление проектов и компонентов перевода или в import_projectbackup.

Примечание

Восстановление резервной копии может завершиться ошибкой, если на восстанавливаемом сервере другой набор Определение языков или другая конфигурация SIMPLIFY_LANGUAGES. В процессе восстановления будут указаны коды языков, которые не удалось обработать, и вы сможете вручную добавить недостающие определения языков.

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

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

Изменено в версии 4.4.1: Базы данных PostgreSQL включаются в автоматические резервные копии.

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

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

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

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

../_images/backups.webp

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

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

Если вы используете Предоставляемое Weblate хранилище резервных копий, сделайте также резервную копию вашего закрытого 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.

См. также

General в документации 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

The directory where backups will be stored has to be owned by UID 1000, otherwise Weblate won’t be able to write the backups there.

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

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

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

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

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

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

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

  6. Создайте доступный для записи пользователем каталог, где Weblate сможет удалённо настроить репозиторий резервных копий Borg, например, в домашнем каталоге (т.е. /home/borg/backups).

  7. Настройте расположение резервных копий в Weblate как user@host:/home/borg/backups или ssh://user@host:port/home/borg/backups.

  8. После включения резервное копирование будет запускаться автоматически ежедневно. Вы также можете запустить резервное копирование вручную из интерфейса Weblate или с помощью backup.

Подсказка

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

См. также

Восстановление из резервной копии 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:

См. также

Восстановление установки на основе Docker

Следующие шаги предполагают официальную установку Docker Compose с использованием встроенных служб PostgreSQL и Valkey, см. Установка с помощью Docker’а. Если в вашем развёртывании используется внешняя база данных или настроенный файл Compose, адаптируйте шаги для базы данных и тома под эту среду.

Начните с извлечения (checkout) Docker Compose, соответствующего восстанавливаемому развёртыванию. Восстановите ваши исходные переопределения Compose, секреты и переменные окружения. Файл environment.yml из Дампы данных для резервного копирования может помочь в этом, но он не импортируется автоматически.

  1. Восстановите архив резервной копии с помощью Восстановление из резервной копии Borg или распакуйте вашу ручную резервную копию так, чтобы стали доступны каталог данных Weblate и файл backups/database.sql.

  2. Остановите службы, которые могут выполнять запись в базу данных или том с данными:

    docker compose stop weblate cache
    
  3. Пересоздайте том PostgreSQL.

    docker compose stop database
    docker compose rm -v database
    docker volume remove weblate-docker_postgres-data
    

    Имя тома зависит от имени проекта Compose и может отличаться от weblate-docker_postgres-data. Проверьте вашу установку перед удалением какого-либо тома.

  4. Запустите службу базы данных:

    docker compose up -d database
    
  5. Восстановить дамп базы данных:

    cat backups/database.sql | docker compose exec -T database psql --username weblate --dbname weblate
    

    Убедитесь, что имя базы данных соответствует POSTGRES_DB, а пользователь — POSTGRES_USER в вашей конфигурации Compose.

  6. Восстановите каталог данных Weblate в том данных Docker, смонтированный как /app/data, см. Тома контейнеров Docker’а. Файлы в этом томе должны принадлежать UID 1000, см. Права доступа к файлам.

  7. Запустить остальные службы и следить за журналами:

    docker compose up -d
    docker compose logs -f
    

    Контейнер Weblate выполняет миграции базы данных при запуске. Если вы также обновляете Weblate, следуйте Обновление контейнера Docker’а.

  8. Обновить репозитории после восстановления:

    docker compose exec --user weblate weblate weblate updategit --all
    

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

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

Подсказка

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

SILENCED_SYSTEM_CHECKS.append("weblate.I028")

База данных

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

Подсказка

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

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

Рекомендуемый подход — сохранять дамп базы данных с помощью родных для базы данных инструментов, таких как pg_dump. Обычно это работает лучше, чем резервное копирование 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.

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

psql --file=database.sql weblate

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

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

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

Ключи SSH и GPG

Хранятся в DATA_DIR /ssh и DATA_DIR /home.

Если вы используете сгенерированные Weblate’ом ключи SSH или GPG, вы должны создать резервные копии этих каталогов. Иначе вы потеряете закрытые ключи и вам придётся заново сгенерировать новые.

Сгенерированные скрипты-обёртки SSH хранятся в CACHE_DIR, и их не нужно резервировать.

Загруженные пользователем файлы

Хранятся в 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

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