> 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/doc-version-recovery.md).

# (Миграция v5.0.1) Восстановление версии документа

{% hint style="info" %}
Если вы никогда не запускали Server Pro версии 5.0.1 или Community Edition версии 5.0.1, либо вы создали совершенно новый экземпляр с 5.0.1, вам не нужно запускать этот процесс восстановления.
{% endhint %}

**Изменения на этой странице:**

* (2024-04-22 13:40 BST): Добавлен шаг "Остановите поступление новых обновлений в систему и сбросьте все изменения в MongoDB".
* (2024-04-23 11:45 BST): Учтены сбои сброса в 5.0.1 и пропуск сбросов, когда была запущена 5.0.2.

Продолжительность восстановления будет зависеть от количества и размера проектов в вашем экземпляре и от backend-хранилища, используемого history store для чанков (как определено в `OVERLEAF_HISTORY_CHUNKS_BUCKET`).

Процесс восстановления задержит запуск приложения внутри контейнера Server Pro. В течение этого времени сайт будет отображаться офлайн. Мы поддерживаем запуск восстановления только из одного экземпляра контейнера Server Pro, все остальные workers горизонтального масштабирования должны быть выключены.

При необходимости вы можете остановить и возобновить процесс восстановления.

На основе наших тестов производительности процесс восстановления может обрабатывать примерно 10 тыс. небольших проектов в минуту на современном оборудовании (тактовая частота CPU 3 ГГц и локальное хранилище NVMe). Например, для экземпляра с 100 тыс. проектов запланируйте окно обслуживания, которое позволит как минимум 10+2 мин простоя. Используйте следующий запрос, чтобы оценить количество проектов в вашем экземпляре:

{% code overflow="wrap" %}

```bash
$ docker exec mongo mongosh sharelatex --quiet --eval 'db.projects.estimatedDocumentCount() + db.deletedProjects.estimatedDocumentCount()'
```

{% endcode %}

Пожалуйста, полностью прочитайте следующие шаги восстановления, прежде чем начать. Клиенты Server Pro всегда могут обратиться в <support@overleaf.com> по любым вопросам.

### Процесс восстановления

{% stepper %}
{% step %}

#### Скачайте образы релиза

Скачайте `5.0.3` образы релиза.
{% endstep %}

{% step %}

#### Определите несколько проектов

Определите по id несколько проектов, у которых отсутствует история; в идеале у вас должны быть права, чтобы внести изменение в один из них.
{% endstep %}

{% step %}

#### Запланируйте обслуживание

Запланируйте окно обслуживания для простоя.
{% endstep %}

{% step %}

#### Остановите все, кроме одного worker

Остановите все, кроме одного worker, при использовании схемы горизонтального масштабирования.
{% endstep %}

{% step %}

#### Остановите новые обновления и сбросьте все изменения в MongoDB

Остановите поступление новых обновлений в систему и сбросьте все изменения в MongoDB:

1. Закройте редактор и вручную отключите всех пользователей через панель администратора на `https://my-server-pro.example.com/admin#open-close-editor` на вкладке "Открыть/Закрыть редактор".
2. Остановите сервис WebSocket/real-time.

   ```bash
   $ docker exec sharelatex sv stop real-time-overleaf
   ```
3. Дождитесь завершения работы сервиса real-time, как указано в `down:`.

   ```bash
   $ docker exec sharelatex sv status real-time-overleaf
   run: real-time-sharelatex: (pid 394) 50s, требовалось down, получен TERM
   # подождите еще немного...

   $ docker exec sharelatex sv status real-time-overleaf
   down: real-time-sharelatex: 7s, обычно up
   ```
4. Остановите контейнер git-bridge, если он включен.

   ```bash
   $ docker stop git-bridge
   ```
5. Если вы никогда не запускали 5.0.2: выполните ручной сброс для обновлений документов и дождитесь, пока он успешно завершится.

   Вы можете повторить команду при ошибке. Если в последовательных запусках вы видите ненулевой `failureCount` счетчик, пожалуйста, остановите миграцию (восстановите службы через `docker restart git-bridge sharelatex`) и обратитесь в поддержку.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex bash -c 'source /etc/container_environment.sh &#x26;&#x26; source /etc/overleaf/env.sh &#x26;&#x26; cd services/document-updater &#x26;&#x26; LOG_LEVEL=info node scripts/flush_all.js'
   ...
   {"name":"default","hostname":"...","pid":324,"level":30,"successCount":...,"failureCount":0,"msg":"завершен сброс всех проектов","time":"...","v":0}
   Сброс всех проектов завершен
   </code></pre>
6. Если вы никогда не запускали 5.0.2: убедитесь, что все изменения были выгружены из Redis.

   Если вы получите какой-либо вывод от `redis-cli`, пожалуйста, остановите миграцию (восстановите службы через `docker restart git-bridge sharelatex`) и обратитесь в поддержку.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec redis redis-cli --scan --pattern 'DocVersion:*'
   # отсутствие вывода от redis-cli означает успех, затем проверьте код возврата redis-cli, он должен быть нулевым
   $ echo $?
   0
   </code></pre>
7. Попробуйте сбросить все ожидающие изменения истории.

   Это будет максимально возможный сброс, поскольку у некоторых проектов сломана история из-за неудачной миграции базы данных. Любые сбои будут устранены повторной синхронизацией истории в конце процесса восстановления.

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex bash -c 'source /etc/container_environment.sh &#x26;&#x26; source /
   </code></pre>

{% endstep %}

{% step %}

#### Сделайте резервную копию

Рассмотрите возможность сделать [консистентную резервную копию](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) резервную копию экземпляра.
{% endstep %}

{% step %}

#### Обновление

Обновитесь до версии `5.0.3`.
{% endstep %}

{% step %}

#### Автоматическое восстановление

Процесс восстановления запускается автоматически при старте контейнера.
{% endstep %}

{% step %}

#### Отслеживание прогресса

Вы можете отслеживать ход выполнения скрипта, просматривая конец файла журнала `/var/lib/overleaf/data/history/doc-version-recovery.log`. Он выведет общее количество проектов в начале и сводку после обработки каждого 1000-го проекта.

{% code overflow="wrap" %}

```bash
$ docker exec sharelatex tail --retry --follow /var/lib/overleaf/data/history/doc-vers
```

{% endcode %}
{% endstep %}

{% step %}

#### Дождитесь завершения процесса восстановления

Дождитесь завершения процесса восстановления, либо просматривая указанный выше файл журнала, пока не будет `Готово.` выведена строка или ожидания `Восстановление версий документов завершено.` вывода в стандартный поток вывода контейнера Server Pro.
{% endstep %}

{% step %}

#### Проверьте процесс восстановления

Проверьте процесс восстановления, открыв панель "История" для нескольких проектов, у которых ранее отсутствовала история.

1. Ускорьте повторную синхронизацию для тестируемых проектов (в конечном итоге они всё равно будут обработаны, но мы не хотим ждать, пока до них дойдет очередь.)

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">$ docker exec sharelatex curl -X POST --silent "http://127.0.0.1:3054/project/000000000000000000000000/resync?force=true"
   </code></pre>

   (Повторите для каждого project-id, который нужно протестировать, заменяя `000000000000000000000000` по одному project-id за раз.)
2. Откройте редактор проекта для проектов `https://my-server-pro.example.com/project/000000000000000000000000`
3. Откройте панель "История" для проекта и посмотрите на последний контент.
4. Необязательно: снова закройте панель "История". Внесите изменение в код, например добавьте комментарий в заголовок.
5. Необязательно: выполните повторную сборку, чтобы инициировать сброс локального изменения. Снова откройте панель "История" и посмотрите изменение. Когда закончите, отмените изменение.
   {% endstep %}

{% step %}

#### Для горизонтального масштабирования...

Снова запустите остальные workers.
{% endstep %}

{% step %}

#### Оставьте экземпляр запущенным

Пожалуйста, продолжайте запускать экземпляр, который выполнил процесс восстановления. Он будет повторно синхронизировать историю для всех проектов в фоновом режиме с параллелизмом 1. Это приведет к слегка повышенной базовой нагрузке. (Вы можете перезапустить экземпляр, но тогда ему придется начать повторную синхронизацию заново.)
{% endstep %}

{% step %}

#### Сообщите нам, когда закончите

Клиенты Server Pro: пожалуйста, сообщите команде поддержки, когда вы завершите процесс восстановления.
{% endstep %}
{% endstepper %}


---

# 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/doc-version-recovery.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.
