> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/ru/podderzhka/support-guides/full-project-history-migration.md).

# (Миграция v3.5.13) Миграция полной истории проекта

## Миграция полной истории проекта

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

После обновления вашего экземпляра до Overleaf CE `3.5.13`, все новые проекты по умолчанию будут использовать Full Project History. Существующие проекты будут продолжать использовать устаревшую систему History, пока они не будут перенесены.

{% hint style="info" %}
Если вы обновитесь до `3.5.13` и решите откатиться к более ранней версии, вам следует восстановиться из полной резервной копии системы. История проектов, созданных в `3.5.13` несовместима с более ранними версиями Overleaf CE.
{% endhint %}

Новая Full Project History приносит пользователям несколько улучшений:

* Она отслеживает изменения в бинарных файлах, что не поддерживается в устаревшей системе.
* Есть поддержка версий с метками.
* Система в целом более надежна, риск потери данных ниже.

См. [документацию по Full Project History](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"
НЕВЕРНЫЙ ПУТЬ: 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://ayakaleaf-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.
