> 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/obsluzhivanie/data-and-backups.md).

# Данные и резервные копии

Иногда нам нужно изменять схему данных в базе данных по мере развития Overleaf; для автоматизации этого процесса используются скрипты миграции. Они будут уже выполнены на [overleaf.com](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit) во-первых, это крупнейший экземпляр Overleaf в мире, поэтому большинство случаев уже должно было встретиться; однако мы не даём никаких гарантий относительно ваших данных. Пожалуйста, убедитесь, что вы создаёте **целостную** резервную копию ваших данных **перед** при обновлении вашего экземпляра.

{% hint style="info" %}
При обновлении до нового образа Docker все миграции, которые **не** ещё не были выполнены, будут автоматически запущены; это может занять некоторое время в зависимости от размера вашего набора данных, а просмотр журнала в режиме отслеживания покажет ход выполнения. Дополнительную информацию см. в нашем [Логирование](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging) документации.
{% endhint %}

### Хранение данных

Overleaf Community Edition и Server Pro хранят свои данные в трёх отдельных местах:

* **База данных MongoDB:** Здесь хранятся данные пользователей и проектов.
* **Redis:** служит высокопроизводительным кэшем для текущих данных, в основном храня информацию, связанную с редактированием проектов и совместной работой.
* **Файловая система Overleaf:** хранит неизменяемые файлы проекта (включая изображения), а также служит временным дисковым кэшем во время компиляции проектов.

{% hint style="info" %}
Это может быть `~/sharelatex_data` или `~/overleaf_data`, в зависимости от того, когда был настроен ваш экземпляр.
{% endhint %}

{% hint style="success" %}
Для файлов проектов и данных полной истории проектов мы также поддерживаем S3-совместимые хранилища.
{% endhint %}

См. раздел «Папки подробно» для получения дополнительной информации о структуре папок на диске.

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

При создании целостной резервной копии необходимо включить три хранилища:

* MongoDB
* Redis
* Данные файловой системы Overleaf

Чтобы создать целостную резервную копию, **обязательно** запретить пользователям создавать новые данные во время выполнения процесса резервного копирования. Поэтому мы рекомендуем запланировать окно обслуживания, в течение которого пользователи не должны иметь доступа к экземпляру или возможности редактировать свои проекты.

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

Чтобы завершить работу экземпляра, выполните `bin/docker-compose stop sharelatex` если вы используете развёртывание Toolkit, или `docker compose stop sharelatex` если вы используете Docker Compose.

После того как `контейнера sharelatex` контейнер будет остановлен, вы можете начать процесс резервного копирования.

После завершения процесса резервного копирования **успешно** вам нужно будет запустить `контейнера sharelatex` контейнер. Для этого выполните `bin/docker-compose start sharelatex` если вы используете развёртывание Toolkit, или `docker compose start sharelatex` если вы используете Docker Compose.

{% hint style="danger" %}

* Резервные копии следует хранить на отдельном сервере, отличном от того, на котором работает ваш экземпляр Overleaf, желательно вообще в другом месте.
* Репликация баз данных на нескольких экземплярах MongoDB может обеспечить некоторую избыточность, но не защищает от повреждения данных.
* Проверка резервных копий — лучший способ убедиться, что они полные и работоспособные.
  {% endhint %}

### MongoDB

В MongoDB есть утилита командной строки под названием [mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/) которую можно использовать для создания резервной копии данных пользователей и проектов, хранящихся в базе данных.

### Данные файловой системы Overleaf

Для развёртываний Toolkit путь, где хранятся ваши неизменяемые файлы, указан в `config/overleaf.rc` с помощью `OVERLEAF_DATA_PATH` переменной окружения, но в зависимости от того, когда был создан ваш экземпляр, это может быть `data/sharelatex`.

Использование такого инструмента, как **rsync** для рекурсивного копирования этого каталога необходимо, чтобы обеспечить создание полной резервной копии.

### Redis

Redis хранит пользовательские сессии и ожидающие обновления документов до их записи в MongoDB.

Постоянное хранение в формате Append Only File (AOF) — рекомендуемая конфигурация для постоянного хранения Redis.

У пользователей Toolkit AOF-постоянство включено по умолчанию для **новыми** установок; существующие пользователи могут найти дополнительную информацию о включении AOF [здесь](/on-premises/ru/konfiguraciya/overleaf-toolkit/redis.md#enabling-append-only-file-persistence).

Если вы решите продолжать использовать снимки RDB вместе с AOF-постоянством, вы можете скопировать файл RDB в безопасное место в качестве резервной копии.

### Миграция данных между серверами

В лучшем случае в новом экземпляре у вас ещё нет никаких ценных данных. У нас нет процесса объединения данных экземпляров.

Предполагая, что в новом экземпляре пока нет данных, вот несколько шагов, которым можно следовать. В общих чертах мы создаём tar-архив `mongo`, `redis` и `overleaf` томов, копируем его на новый сервер и распаковываем там снова.

#### Toolkit

```bash
# Корректно завершите работу старого экземпляра
old-server$ bin/stop

# Создайте tar-архив
old-server$ tar --create --file backup-old-server.tar config/ data/

# Скопируйте файл backup-old-server.tar со старого сервера на
# новый сервер любым подходящим способом

# Корректно завершите работу нового экземпляра (если он уже запущен)
new-server$ bin/stop

# Переместите новые данные, их тоже можно удалить
new-server$ mkdir backup-new-server
new-server$ mv config/ data/ backup-new-server/

# Снова заполните каталог config/data
new-server$ tar --extract --file backup-old-server.tar

# Запустите контейнеры
new-server$ bin/up
```

#### Docker Compose

```bash
# Корректно завершите работу старого экземпляра
old-server$ docker stop sharelatex
old-server$ docker stop mongo redis

# Создайте tar-архив
old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data

# Скопируйте файл backup-old-server.tar со старого сервера на
# новый сервер любым подходящим способом

# Корректно завершите работу нового экземпляра (если он уже запущен)
new-server$ docker stop sharelatex
new-server$ docker stop mongo redis

# Переместите новые данные, их тоже можно удалить
new-server$ mkdir backup-new-server
new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/

# Снова заполните каталоги данных
new-server$ tar --extract --file backup-old-server.tar

# Запустите контейнеры
new-server$ docker start mongo redis
new-server$ docker start sharelatex
```

В зависимости от вашего **docker-compose.yml** файла вам может понадобиться скорректировать пути `mongo`, `redis`, `overleaf` томов.

{% hint style="info" %}
При запуске от имени пользователя root (или с sudo) tar сохранит владельца/группу файла и права доступа, что критично при восстановлении резервной копии.
{% endhint %}

### Папки подробно

{% hint style="info" %}
Следующие папки имеют дополнительные пояснения:

* (b) включать в резервные копии; лучше всего делать это, когда экземпляр остановлен, чтобы обеспечить согласованность
* (d) можно удалить
* (e) временные файлы, можно удалить, когда экземпляр остановлен
  {% endhint %}

1. `~/mongo_data` (b)
   * каталог данных MongoDB
2. `~/redis_data` (b)
   * каталог данных БД Redis
3. `~/overleaf_data`
   1. bin
      1. synctex (d)
         * не используется в последнем выпуске; ранее использовался пользовательский двоичный файл synctex (synctex используется для сопоставления исходников между файлами .tex и PDF)
   2. data
      1. кэш (e)
         * кэш двоичных файлов для компиляций
      2. компиляции (e)
         * здесь выполняется компиляция LaTeX
      3. db.sqlite (d)
         * не используется в последнем выпуске; ранее здесь хранились сведения кэша clsi (либо перенесены в простые карты в памяти, либо мы сканируем диск)
      4. db.sqlite-wal (d)
         * не используется в последнем выпуске, см. db.sqlite
      5. вывод (e)
         * хранилище результатов компиляции LaTeX для выдачи клиенту
      6. template\_files (b)
         * предпросмотры изображений системы шаблонов (только Server Pro)
      7. user\_files (b)
         * двоичные файлы проектов
      8. history (b)
         * файлы полной истории проекта
   3. tmp
      1. dumpFolder (e)
         * временные файлы, возникающие при обработке zip-архивов
      2. uploads (e)
         * буферизация загрузок файлов (загрузка двоичных файлов/создание нового проекта из zip-архива)
      3. projectHistories (e)
         * временные файлы для миграций полной истории проекта


---

# 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/obsluzhivanie/data-and-backups.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.
