> 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/ru/podderzhka/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` в частности) может частично блокироваться, что приведет к ухудшению пользовательского опыта. Мы рекомендуем начинать со значения по умолчанию `--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"
BAD PATH: 123456789012345678901234 rootFolder.0.1.2.3
BAD PATH: 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/ru/podderzhka/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.
