Skip to main content

Миграция бинарных файлов

Предстоящий мажорный выпуск 6.0 Server Pro и Community Edition вдвое сократит объём хранилища, занимаемый бинарными файлами. В версию 5.5.7 включена онлайн-миграция, позволяющая свести простой при обновлении к минимуму. Начиная с Server Pro 4.x бинарные файлы хранятся дважды: в хранилище активных файлов в «filestore» и в системе полной истории проектов. В дальнейшем в системе полной истории проектов будет храниться одна копия каждого файла. Миграция на объединённую систему хранения состоит из двух частей: нового флага для управления фазой миграции и скрипта, который обрабатывает все активные и мягко удалённые проекты. Фазы:
  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=0 (по умолчанию): файлы читаются из filestore и записываются в него. В историю файлы записываются асинхронно.
  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=1: файлы читаются из истории с откатом на filestore и записываются как в filestore, так и в историю. Возможен возврат к OVERLEAF_FILESTORE_MIGRATION_LEVEL=0.
  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=2: файлы читаются и записываются только в историю. Возврат к OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 невозможен, если только миграция не выполнялась в «автономном» режиме.
Если данные хранятся в S3 и для filestore (OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID) и истории (OVERLEAF_HISTORY_S3_ACCESS_KEY_ID) используются отдельные служебные учётные записи, предоставьте пользователю filestore доступ на чтение к бакету истории для blob-объектов OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET. В дальнейшем сервис filestore будет обслуживать запросы на чтение от сервиса компиляции.
Настоятельно рекомендуем сначала выполнить миграцию бинарных файлов в нерабочей/тестовой среде.
Стандартная лицензия Server Pro позволяет запускать приложение как в рабочей среде, так и в одной нерабочей/тестовой среде; настоятельно рекомендуем подготовить нерабочую среду для тестирования.
Если вы обновитесь до Server Pro/CE версии 6.0, а затем решите вернуться к более ранней версии, необходимо восстановить систему из полной резервной копии.

Процедура миграции

1

Создайте резервную копию

Создайте полную резервную копию экземпляра с согласованным снимком каталогов mongo, redis и sharelatex.
2

Обновитесь

Toolkit: обновите toolkit до последней версии с помощью скрипта $ bin/upgrade. На вопрос Upgrade image? ответьте отказом — вместо этого вручную отредактируйте файл config/version и установите значение 5.5.7.Устаревший docker-compose.yml: измените версию сервиса sharelatex на 5.5.7.
3

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

Пример вывода:
4

Сбросьте очереди истории проектов

Повторяйте сброс, пока не будут обработаны все проекты ("project_ids":0).
Если значение “failedProjects” не равно нулю, обратитесь в службу поддержки и не продолжайте миграцию бинарных файлов.
5

Переведите миграцию в фазу 1

Toolkit: задайте OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 в config/variables.env.Устаревший docker-compose.yml: задайте OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1' в разделе environment сервиса sharelatex.
6

Примените изменения конфигурации и запустите экземпляр

Toolkit: bin/up -dУстаревший docker-compose.yml: docker compose up -d
7

Проверьте доступ к бинарным файлам

Откройте проект в редакторе Overleaf в браузере и выберите бинарный файл, например изображение.
8

Запустите скрипт миграции

Если вы сохраняете файлы журналов вне контейнера sharelatex, убедитесь, что владельцем каталога журналов является пользователь www-data (uid=33), чтобы выходной файл журнала мог быть записан.
Вывод должен выглядеть так:
Если миграция прошла успешно, вы получите код выхода 0, а последние строки будут указывать на отсутствие сбоев:
Файл журнала будет выглядеть так (используйте путь, выведенный скриптом):
9

Остановите экземпляр

Toolkit: bin/stop sharelatexУстаревший docker-compose.yml: docker compose stop sharelatex
10

Сделайте старые файлы недоступными для приложения

Теперь старые файлы можно перенести во вторичное хранилище. Рекомендуем некоторое время сохранять их на случай, если позднее возникнут проблемы.
11

Переведите миграцию в фазу 2

Toolkit: задайте OVERLEAF_FILESTORE_MIGRATION_LEVEL=2 в config/variables.env.Устаревший docker-compose.yml: задайте OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2' в разделе environment сервиса sharelatex.
12

Примените изменения конфигурации и запустите экземпляр

Toolkit: bin/up -dУстаревший docker-compose.yml: docker compose up -d
13

Проверьте доступ к бинарным файлам

Откройте проект в редакторе Overleaf в браузере и выберите бинарный файл, например изображение.

Автономная миграция

Если вы хотите запретить пользователям входить в систему во время работы скрипта миграции бинарных файлов, выполните следующие шаги:
  • Войдите в экземпляр Overleaf с учётной записью администратора
  • Нажмите кнопку Admin и выберите Manage Site
  • Откройте вкладку Open/Close Editor
  • Нажмите кнопку Close Editor
  • Нажмите кнопку Disconnect all users
После этого все вошедшие в систему пользователи будут перенаправлены на страницу технического обслуживания, а новые пользователи, открывающие страницу входа, увидят страницу технического обслуживания и не смогут войти. Эти шаги необходимо повторять при перезапуске экземпляра. Чтобы снова открыть сайт, просто перезапустите экземпляр.

Онлайн-миграция

Скрипты миграции можно запускать, пока приложение продолжает работать. При этом нужно учитывать несколько моментов:
  • Процесс миграции интенсивно использует операции ввода-вывода, поэтому во время работы скрипта следует отслеживать потребление ресурсов.
  • При высокой степени параллелизма обработки цикл событий в сервисе filestore может блокироваться, что ухудшит работу пользователей. Рекомендуем начинать со значений по умолчанию --concurrency=10 и --concurrent-batches=1.
  • Скрипт можно остановить в любой момент. При повторном запуске он проверит ранее обработанные проекты и пропустит уже обработанные файлы. Это удобно, если вы предпочитаете выполнять миграцию в часы наименьшей нагрузки (например, ночью).
Мы рекомендуем закрыть сайт и выполнить миграцию в автономном режиме во время окна обслуживания, если количество проектов меньше 1000 (см. вывод скрипта миграции при запуске с --report). Если проектов много, вы можете запустить скрипт и наблюдать за его ходом, а затем решить, продолжать ли миграцию в онлайн- или автономном режиме, исходя из вашей ситуации.

Очистка устаревших данных бинарных файлов

Завершив миграцию и убедившись, что проекты по-прежнему имеют доступ ко всем своим файлам, вы можете удалить старое файловое хранилище в /var/lib/overleaf/data/user_files. Настоятельно рекомендуем сохранить эти файлы ещё некоторое время — сначала можно сделать их недоступными для приложения, переименовав папку.

Устранение неполадок

Здесь мы будем добавлять рекомендации по устранению неполадок. Обратите внимание: хотя обычно мы оказываем поддержку только клиентам Server Pro, с учётом характера этой миграции мы также постараемся помочь пользователям CE, столкнувшимся с проблемами, характерными именно для миграции бинарных файлов. Если скрипт миграции бинарных файлов завершается сбоем (то есть завершается с ошибкой или выводит ненулевое количество проектов с ошибками), отправьте нашей службе поддержки письмо на адрес support+filestoremigration@overleaf.com со следующими сведениями: Тема: Binary file migration problem Текст письма:
  • Тип экземпляра: CE или Server Pro (ненужное удалить)
  • Тип установки: Overleaf toolkit, docker-compose.yml или другой (ненужное удалить)
  • Версия: 5.5.x (toolkit: $ cat config/version)
  • Вывод скрипта миграции (должен находиться в контейнере в /var/log/overleaf)
  • Отчёт: (запустите скрипт миграции с --report)
  • Обработано проектов: (по данным последнего запуска скрипта)
  • Продолжительность миграции:
  • Вывод bin/doctor (при использовании toolkit)
  • Версия Toolkit: $ git rev-parse HEAD (при использовании Toolkit)
По возможности приложите к письму файлы журналов сервиса filestore. Они находятся в /var/log/overleaf/filestore.log внутри контейнера sharelatex; экспортировать их можно так:
Перед отправкой удалите из файлов журналов всю конфиденциальную информацию.

Отсутствующие файлы

Старые версии Server Pro/CE создавали записи в дереве файлов до завершения загрузки файлов пользователем, из-за чего при неудачной загрузке файлы могли отображаться как отсутствующие. При обработке всех деревьев файлов несколько таких случаев могут быть отмечены как ошибки. Если отсутствующих файлов немного, рекомендуем вручную просмотреть эти случаи и удалить такие файлы в редакторе в браузере. Если отсутствующих файлов много, обратитесь в службу поддержки, используя приведённый выше шаблон письма.

Поиск повреждённых деревьев файлов

Миграция может завершиться сбоем для проектов с некорректным деревом файлов (например, с пустыми именами файлов). Список таких проблем можно получить с помощью скрипта find_malformed_filetrees, который проверяет все проекты в базе данных:
Чтобы исправить некорректные пути, используйте скрипт fix_malformed_filetree, выполняя команду по одному разу для каждого повреждённого пути:
Последнее изменение 5 октября 2026 г.