> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/uk/pidtrimka/support-guides/full-project-history-migration.md).

# (Міграція v3.5.13) Міграція повної історії проєкту

## Міграція повної історії проєкту

Поле `3.5.x` реліз Community Edition включає [функцію Повної історії проєкту](https://www.overleaf.com/learn/latex/Using_the_History_feature) яка вже доступна в нашій SaaS-пропозиції, [overleaf.com](http://overleaf.com/)

Після оновлення вашого інстансу до Overleaf CE `3.5.13`, усі нові проєкти за замовчуванням використовуватимуть Повну історію проєкту. Наявні проєкти й надалі використовуватимуть застарілу систему історії, доки їх не буде мігровано.

{% hint style="info" %}
Якщо ви оновитеся до `3.5.13` і вирішите знизити версію до попередньої, тоді слід відновити дані з повної резервної копії системи. Історія проєктів, створених у `3.5.13` не сумісна з попередніми версіями Overleaf CE.
{% endhint %}

Нова Повна історія проєкту надає кілька покращень для користувачів:

* Вона відстежує зміни в бінарних файлах, що не підтримується в застарілій системі.
* Є підтримка позначених версій.
* Система загалом є надійнішою, ризик втрати даних менший.

Дивіться [документацію з Повної історії проєкту](https://www.overleaf.com/learn/latex/Using_the_History_feature) для отримання додаткової інформації про повну історію проєкту.

### Міграція наявних проєктів

{% stepper %}
{% step %}

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

Створіть повну [резервну копію](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) вашого інстансу з узгодженим знімком **mongo**, **redis** та **sharelatex** каталогів.
{% endstep %}

{% step %}

#### Оновіть

Оновіть версію образу sharelatex/sharelatex до 3.5.13.

Toolkit: Використайте `$ bin/upgrade` скрипт для оновлення Toolkit до останньої версії та відредагуйте **config/version** до 3.5.13.
{% endstep %}

{% step %}

#### Запустити інстанс

У ідеалі, слід запобігти доступу користувачів до вашого інстансу під час виконання міграції, щоб уникнути втрати даних у разі, якщо вам знадобиться відновити резервну копію. Див. [Офлайн-міграція](https://github.com/overleaf/overleaf/wiki/Full-Project-History-Migration/#offline-migration) для отримання додаткової інформації про те, як це зробити.
{% endstep %}

{% step %}

#### Зачекайте, доки всі сервіси буде запущено

Зачекайте, доки всі сервіси буде запущено (див. команду нижче)

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "curl http://localhost:3000/status"
web sharelatex активний (api)%
```

{% endcode %}
{% endstep %}

{% step %}

#### Запустіть скрипт міграції

{% code overflow="wrap" %}

```bash
# Для користувачів Overleaf Toolkit:
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; VERBOSE_LOGGING=true node scripts/history/migrate_history.js --force-clean --fix-invalid-characters --convert-large-docs-to-file"

# Для користувачів застарілого docker-compose.yml:
$ docker exec sharelatex /bin/bash -c "cd /overleaf/services/web; VERBOSE_LOGGING=true node scripts/history/migrate_history.js --force-clean --fix-invalid-characters --convert-large-docs-to-file"
```

{% endcode %}

`--force-clean` очищає частково мігровані дані історії проєкту в новій системі, це дає змогу повторити міграцію для окремих проєктів, які не вдалися в попередніх спробах;

`--fix-invalid-characters` замінює недруковані символи, які не підтримуються новою системою історії;

`--convert-large-docs-to-file` перетворює документи, розмір яких перевищує поріг редагованого розміру 2 МБ, на нередагований файл)

Вивід має виглядати так:

```bash
Мігровані проєкти  :  1
Усього проєктів     :  51
Залишилося проєктів :  51
Усього записів історії для міграції: 98
Початок міграції...
Міграція проєкту: 63d29b5772dd80015a81bffe
результат міграції { upgraded: true, historyType: 'NoneWithoutConversion' }
Міграція проєкту: 63d29c2e72dd80015a81c0a2
результат міграції { upgraded: true, historyType: 'NoneWithoutConversion' }

// …

Міграцію завершено
==================
Проєктів мігровано:  51
Проєктів із помилками:  0
Готово.
```

Якщо міграція успішна, ви отримаєте код завершення `0`, а останні рядки вказуватимуть на відсутність помилок:

```bash
Проєктів із помилками:  0
Готово.
```

Ви можете знову відкрити доступ для користувачів (див. наступний крок). Якщо є помилки, див. розділ усунення несправностей нижче. Ви все ще можете знову відкрити сайт, якщо проблеми не буде негайно виправлено, а немігровані проєкти залишаться у застарілій системі історії.
{% endstep %}

{% step %}

#### Знову відкрити сайт

Якщо ви обрали виконання офлайн-міграції, вам потрібно буде знову відкрити сайт. Якщо ви все ще увійшли в систему, вам потрібно буде:

1. Натисніть кнопку **Адміністратор** кнопку та виберіть **Керувати сайтом**
2. Натисніть кнопку **Відкрити/закрити редактор** вкладку
3. Натисніть кнопку **Знову відкрити редактор** кнопка

Якщо ви закрили браузер, тоді потрібно перезапустити сайт за допомогою `$ bin/up`.
{% endstep %}
{% endstepper %}

#### Офлайн-міграція

Щоб запобігти можливості входу користувачів під час виконання скрипта міграції історії, виконайте такі кроки:

* Увійдіть у ваш інстанс Overleaf під обліковим записом адміністратора
* Натисніть кнопку **Адміністратор** кнопку та виберіть **Керувати сайтом**
* Натисніть кнопку **Відкрити/закрити редактор** вкладку
* Натисніть кнопку **Закрити редактор** кнопка
* Натисніть кнопку **Від’єднати всіх користувачів** кнопка

Після цього, якщо будь-які користувачі будуть увійшли в систему, їх буде перенаправлено на сторінку обслуговування, а всі нові користувачі, які відвідають сторінку входу, побачать сторінку обслуговування і **не зможуть** увійти.

#### Онлайн-міграція

Можна запускати скрипти міграції, поки застосунок ще працює. Є кілька моментів, які слід врахувати:

* Процес міграції є ресурсомістким для CPU, тож слід моніторити використання ресурсів, поки виконується скрипт.
* За високого `--concurrency` значення цикл подій у деяких сервісах (`track-changes` зокрема) може частково блокуватися, що призведе до погіршення UX. Радимо починати з типовим `--concurrency=1` значенням.
* Ви можете зупинити скрипт у будь-який момент. Якщо запустити його знову, міграція продовжиться з того місця, де ви зупинилися. Це корисно, якщо ви віддаєте перевагу запускати міграцію в менш завантажені години (наприклад, уночі).

Наша рекомендація — закрити сайт і виконати міграцію офлайн у вікно технічного обслуговування, коли кількість ваших проєктів становить менше ніж 1000 проєктів (`db.projects.count()`). Якщо кількість проєктів велика, ви можете запустити скрипт і стежити за його прогресом, а потім вирішити, чи продовжувати запуск онлайн чи офлайн, залежно від вашого конкретного випадку.

#### Очистити застарілі дані історії

Скрипт для очищення застарілих даних історії було додано в Server Pro `3.5.6`, `4.0.6` та `4.1.0`.

{% code overflow="wrap" %}

```bash
bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/history/clean_sl_history_data.js"
```

{% endcode %}

Скрипт можна запускати після того, як усі проєкти буде мігровано. Його також можна використовувати, щоб звільнити трохи місця під час виконання онлайн-міграції.

{% hint style="info" %}
У Server Pro до версії 3.5.13 скрипт видаляє вміст `docHistory` та `docHistoryIndex` колекцій. MongoDB не звільняє місце на диску після видалення документів, натомість вона повторно використовуватиме це місце для майбутніх документів у тій самій колекції. Після міграції історії до цих колекцій більше нічого не записуватиметься, тож місце на диску залишиться невикористаним.

Якщо ви хочете знову зробити місце на диску доступним, ви можете оновитися до Server Pro 3.5.13 (якщо все ще використовуєте реліз 3.x) або Server Pro 4.2.5 (якщо використовуєте реліз 4.x) і повторно запустити скрипт очищення.

Скрипт очищення, який входить до Server Pro у найновіших патч-релізах `3.5.x` та найновіших `4.x.x` видаляє колекції на завершальному кроці.

Безпечно повторно запускати скрипт очищення.
{% endhint %}

### Усунення несправностей

Тут ми додамо поради з усунення несправностей. Зверніть увагу: хоча зазвичай ми пропонуємо підтримку лише клієнтам Server Pro, з огляду на характер цієї міграції ми також зробимо все можливе, щоб підтримати клієнтів CE, які стикаються з проблемами, специфічними для міграції повної історії проєкту.

Якщо скрипт міграції повної історії проєкту завершується з помилкою (тобто виходить з помилкою або друкує ненульову кількість проєктів із помилками), надішліть такі подробиці нашій службі підтримки електронною поштою [support+historymigration@overleaf.com](mailto:support+historymigration@overleaf.com?subject=Full%20project%20history%20migration%20problem\&body=Instance%20Type%3A%20CE%20or%20Server%20Pro%20%28delete%20as%20appropriate%29%0A%0AInstallation%20Type%3A%20Overleaf%20toolkit%20or%20docker-compose.yml%20or%20other%20%28delete%20as%20appropriate%29%0A%0AScript%20output%3A%0A%0Abin%2Fdoctor%20output%20%28if%20using%20toolkit%29%3A%0A), вказавши:

Тема: Проблема з міграцією повної історії проєкту

* Тип інстансу: CE або Server Pro (видаліть зайве)
* Тип встановлення: Overleaf Toolkit або `docker-compose.yml` або інше (видаліть зайве)
* Версія: 3.5.x (Toolkit: `$ cat config/version`)
* Вивід скрипта міграції (який має знаходитися в контейнері в `/overleaf/services/web`)
* Мігровані проєкти: (згідно з виводом скрипта міграції)
* Усього проєктів: (згідно з виводом скрипта міграції)
* Залишилося проєктів: (згідно з виводом скрипта міграції)
* Тривалість міграції:
* `bin/doctor` вивід (під час використання Toolkit)
* Версія Toolkit: `$ git rev-parse HEAD` (під час використання Toolkit)

Розгляньте можливість додати до листа файли журналів для `history-v1`, `project-history` та `track-changes` сервісів. Їх можна знайти за адресою `/var/log/sharelatex` всередині `sharelatex` контейнера та експортувати так:

```bash
$ docker cp sharelatex:/var/log/sharelatex/history-v1.log history-v1.log
$ docker cp sharelatex:/var/log/sharelatex/project-history.log project-history.log
$ docker cp sharelatex:/var/log/sharelatex/track-changes.log track-changes.log
```

Будь ласка, видаліть будь-яку конфіденційну інформацію з файлів журналів перед тим, як додавати їх.

#### Пошук пошкоджених дерев файлів

Міграція може завершитися помилкою для проєктів, які мають неправильно сформоване дерево файлів (наприклад, де імена файлів порожні). Список цих проблем можна знайти за допомогою `find_malformed_filetrees` скрипта, який перевіряє всі проєкти в базі даних:

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/find_malformed_filetrees.js"
ПОМИЛКОВИЙ ШЛЯХ: 123456789012345678901234 rootFolder.0.1.2.3
ПОМИЛКОВИЙ ШЛЯХ: 123456789012345678901234 rootFolder.0.4.5.6
...
```

{% endcode %}

Щоб виправити недійсні шляхи, використайте `fix_malformed_filetree` скрипт, запускаючи команду один раз для кожного помилкового шляху:

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/fix_malformed_filetree.js 123456789012345678901234 rootFolder.0.1.2.3"
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/fix_malformed_filetree.js 123456789012345678901234 rootFolder.0.4.5.6"
...
```

{% endcode %}

#### Пониження проєктів із повної історії проєкту до застарілої історії

Якщо є проєкт, який було мігровано до повної історії проєкту, але ви хочете повернутися до застарілої історії, використайте `downgrade_project` скрипт так:

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; PROJECT_ID=YOUR
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/uk/pidtrimka/support-guides/full-project-history-migration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
