> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-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.

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

У пользователей 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. cache (e)
         * кэш двоичных файлов для компиляций
      2. compiles (e)
         * здесь происходит компиляция LaTeX
      3. db.sqlite (d)
         * в последнем выпуске не используется; ранее здесь хранились сведения о кэше clsi (либо перенесены в простые карты в памяти, либо мы сканируем диск)
      4. db.sqlite-wal (d)
         * в последнем выпуске не используется; см. db.sqlite
      5. output (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://overleaf-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.
