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) та history (OVERLEAF_HISTORY_S3_ACCESS_KEY_ID), надайте користувачеві filestore доступ на читання до bucket історії для blob-об’єктів OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET. Надалі сервіс filestore обслуговуватиме запити на читання від сервісу компіляції.
Наполегливо рекомендуємо спершу виконати міграцію бінарних файлів у непродакшн/тестовому середовищі.
Стандартна ліцензія Server Pro дозволяє запускати застосунок як у продакшн-середовищі, так і в одному непродакшн/тестовому середовищі; наполегливо рекомендуємо підготувати непродакшн-середовище для тестування.
Якщо ви оновитеся до Server Pro/CE версії 6.0, а згодом вирішите повернутися до попередньої версії, вам слід відновити систему з повної резервної копії.

Процедура міграції

1

Створіть резервну копію

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

Оновіть

Toolkit: скористайтеся скриптом $ bin/upgrade, щоб оновити toolkit до найновішої версії. Коли з’явиться запит 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 Текст листа:
  • Instance Type: CE або Server Pro (видаліть зайве)
  • Installation Type: Overleaf toolkit, docker-compose.yml чи інше (видаліть зайве)
  • Version: 5.5.x (toolkit: $ cat config/version)
  • Вивід скрипта міграції (має бути в контейнері в /var/log/overleaf)
  • Report: (запустіть скрипт міграції з --report)
  • Processed projects: (за результатами останнього запуску скрипта)
  • Тривалість міграції:
  • Вивід 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 р.