> 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/uk/pidtrimka/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.

Тривалість відновлення залежатиме від кількості та розміру проєктів у вашому екземплярі та від бекенда сховища, який використовується сховищем історії для чанків (як визначено в `OVERLEAF_HISTORY_CHUNKS_BUCKET`).

Процес відновлення затримає запуск застосунку всередині контейнера Server Pro. У цей час сайт буде виглядати офлайн. Ми підтримуємо запуск відновлення лише з одного екземпляра контейнера Server Pro; усі інші worker-процеси горизонтального масштабування мають бути вимкнені.

За потреби ви можете зупинити та відновити процес відновлення.

На основі наших тестів продуктивності процес відновлення може обробляти приблизно 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 %}

#### Визначте кілька проєктів

Визначте кілька проєктів за ідентифікатором, у яких відсутня історія; бажано, щоб ви мали дозвіл внести зміну до одного з них.
{% endstep %}

{% step %}

#### Заплануйте технічне обслуговування

Заплануйте вікно технічного обслуговування на час простою.
{% endstep %}

{% step %}

#### Зупиніть усі worker-процеси, крім одного

Зупиніть усі worker-процеси, крім одного, під час використання схеми горизонтального масштабування.
{% endstep %}

{% step %}

#### Зупиніть надходження нових оновлень і скиньте всі зміни до MongoDB

Зупиніть надходження нових оновлень у систему та скиньте всі зміни до MongoDB:

1. Закрийте редактор і вручну від’єднайте всіх користувачів через панель адміністратора на `https://my-server-pro.example.com/admin#open-close-editor` вкладці «Open/Close Editor».
2. Зупиніть службу WebSocket/реального часу.

   ```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, want down, got TERM
   # зачекайте трохи довше...

   $ docker exec sharelatex sv status real-time-overleaf
   down: real-time-sharelatex: 7s, normally 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":"finished flushing all projects","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. Відкрийте панель «History» для проєкту та перегляньте найновіший вміст.
4. Необов’язково: знову закрийте панель «History». Внесіть зміну в код, наприклад додайте коментар до заголовка.
5. Необов’язково: виконайте повторну компіляцію, щоб спровокувати скидання локальної зміни. Знову відкрийте панель «History» і перегляньте зміну. Коли закінчите, скасуйте зміну.
   {% endstep %}

{% step %}

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

Запустіть інші worker-процеси знову.
{% 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/uk/pidtrimka/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.
