> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

<Info>
  Если вы никогда не запускали Server Pro версии 5.0.1 или Community Edition версии 5.0.1, либо развернули совершенно новый экземпляр сразу на 5.0.1, выполнять этот процесс восстановления не нужно.
</Info>

<strong>Обновления этой страницы:</strong>

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

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

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

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

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

```bash wrap theme={null}
$ docker exec mongo mongosh sharelatex --quiet --eval 'db.projects.estimatedDocumentCount() + db.deletedProjects.estimatedDocumentCount()'
```

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

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

<Steps>
  <Step title="Загрузите образы релиза">
    Загрузите образы релиза `5.0.3`.
  </Step>

  <Step title="Определите несколько проектов">
    Определите по id несколько проектов, у которых отсутствует история; желательно, чтобы у вас были права на внесение изменений хотя бы в один из них.
  </Step>

  <Step title="Запланируйте обслуживание">
    Запланируйте окно обслуживания на время простоя.
  </Step>

  <Step title="Остановите все воркеры, кроме одного">
    При использовании горизонтального масштабирования остановите все воркеры, кроме одного.
  </Step>

  <Step title="Остановите новые обновления и сбросьте все изменения в MongoDB">
    Остановите поступление новых обновлений в систему и сбросьте все изменения в MongoDB:

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

       ```bash theme={null}
       $ docker exec sharelatex sv stop real-time-overleaf
       ```
    3. Дождитесь завершения сервиса real-time, о чём будет свидетельствовать `down:`.

       ```bash theme={null}
       $ docker exec sharelatex sv status real-time-overleaf
       run: real-time-sharelatex: (pid 394) 50s, want down, got TERM
       # wait a little longer...

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

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

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

       ```bash wrap theme={null}
       $ docker exec sharelatex bash -c 'source /etc/container_environment.sh && source /etc/overleaf/env.sh && cd services/document-updater && LOG_LEVEL=info node scripts/flush_all.js'
           ...
           {"name":"default","hostname":"...","pid":324,"level":30,"successCount":...,"failureCount":0,"msg":"finished flushing all projects","time":"...","v":0}
           Done flushing all projects
           
       ```
    6. Если вы никогда не запускали 5.0.2: убедитесь, что все изменения были сброшены из redis.

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

       ```bash wrap theme={null}
       $ docker exec redis redis-cli --scan --pattern 'DocVersion:*'
           # no output from redis-cli indicates success, check exit code of redis-cli next, it should be zero
           $ echo $?
           0
           
       ```
    7. Попробуйте сбросить все ожидающие изменения истории.

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

       ```bash wrap theme={null}
       $ docker exec sharelatex bash -c 'source /etc/container_environment.sh && source /
           
       ```
  </Step>

  <Step title="Создайте резервную копию">
    Рекомендуется создать [согласованную резервную копию](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) экземпляра.
  </Step>

  <Step title="Обновитесь">
    Обновитесь до версии `5.0.3`.
  </Step>

  <Step title="Автоматическое восстановление">
    Процесс восстановления запускается автоматически при старте контейнера.
  </Step>

  <Step title="Следите за ходом выполнения">
    Следить за ходом выполнения скрипта можно, просматривая в режиме tail файл журнала `/var/lib/overleaf/data/history/doc-version-recovery.log`. В начале в него выводится общее количество проектов, а после каждых 1000 обработанных проектов — сводка.

    ```bash wrap theme={null}
    $ docker exec sharelatex tail --retry --follow /var/lib/overleaf/data/history/doc-vers
    ```
  </Step>

  <Step title="Дождитесь завершения процесса восстановления">
    Дождитесь завершения процесса восстановления: либо следите за указанным выше файлом журнала, пока не появится строка `Done.`, либо дождитесь вывода `Finished recovery of doc versions.` в стандартный вывод контейнера Server Pro.
  </Step>

  <Step title="Проверьте результаты восстановления">
    Проверьте результаты восстановления, открыв панель истории для нескольких проектов, у которых ранее отсутствовала история.

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

       ```bash wrap theme={null}
       $ docker exec sharelatex curl -X POST --silent "http://127.0.0.1:3054/project/000000000000000000000000/resync?force=true"
           
       ```

       (Повторите для каждого проверяемого id проекта, заменяя `000000000000000000000000` по очереди на один id проекта.)
    2. Откройте редактор проекта `https://my-server-pro.example.com/project/000000000000000000000000`
    3. Откройте панель «History» проекта и убедитесь, что отображается последнее содержимое.
    4. Необязательно: снова закройте панель «History». Внесите изменение в код, например добавьте комментарий в заголовок.
    5. Необязательно: запустите повторную компиляцию, чтобы инициировать сброс локального изменения. Снова откройте панель «History» и убедитесь, что изменение отображается. По завершении отмените изменение.
  </Step>

  <Step title="Для горизонтального масштабирования...">
    Снова запустите остальные воркеры.
  </Step>

  <Step title="Не останавливайте экземпляр">
    Пожалуйста, не останавливайте экземпляр, который выполнил процесс восстановления. Он будет в фоновом режиме повторно синхронизировать историю всех проектов с параллелизмом 1. Это приведёт к незначительному повышению базовой нагрузки. (Экземпляр можно перезапустить, но тогда повторную синхронизацию придётся начинать заново.)
  </Step>

  <Step title="Сообщите нам о завершении">
    Клиенты Server Pro: пожалуйста, сообщите команде поддержки, когда завершите процесс восстановления.
  </Step>
</Steps>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.