Миграция бинарных файлов
Предстоящий мажорный выпуск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невозможен, если только миграция не выполнялась в «автономном» режиме.
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 -d7
Проверьте доступ к бинарным файлам
Откройте проект в редакторе Overleaf в браузере и выберите бинарный файл, например изображение.
8
Запустите скрипт миграции
Если вы сохраняете файлы журналов вне контейнера sharelatex, убедитесь, что владельцем каталога журналов является пользователь
www-data (uid=33), чтобы выходной файл журнала мог быть записан.0, а последние строки будут указывать на отсутствие сбоев:9
Остановите экземпляр
Toolkit:
bin/stop sharelatexУстаревший docker-compose.yml: docker compose stop sharelatex10
Сделайте старые файлы недоступными для приложения
Теперь старые файлы можно перенести во вторичное хранилище. Рекомендуем некоторое время сохранять их на случай, если позднее возникнут проблемы.
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 -d13
Проверьте доступ к бинарным файлам
Откройте проект в редакторе Overleaf в браузере и выберите бинарный файл, например изображение.
Автономная миграция
Если вы хотите запретить пользователям входить в систему во время работы скрипта миграции бинарных файлов, выполните следующие шаги:- Войдите в экземпляр Overleaf с учётной записью администратора
- Нажмите кнопку Admin и выберите Manage Site
- Откройте вкладку Open/Close Editor
- Нажмите кнопку Close Editor
- Нажмите кнопку Disconnect all users
Онлайн-миграция
Скрипты миграции можно запускать, пока приложение продолжает работать. При этом нужно учитывать несколько моментов:- Процесс миграции интенсивно использует операции ввода-вывода, поэтому во время работы скрипта следует отслеживать потребление ресурсов.
- При высокой степени параллелизма обработки цикл событий в сервисе
filestoreможет блокироваться, что ухудшит работу пользователей. Рекомендуем начинать со значений по умолчанию--concurrency=10и--concurrent-batches=1. - Скрипт можно остановить в любой момент. При повторном запуске он проверит ранее обработанные проекты и пропустит уже обработанные файлы. Это удобно, если вы предпочитаете выполнять миграцию в часы наименьшей нагрузки (например, ночью).
--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, выполняя команду по одному разу для каждого повреждённого пути:

