> ## 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.

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

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

<Info>
  При переходе на новый Docker-образ все миграции, которые ещё **не** были выполнены, запускаются автоматически. Это может занять некоторое время в зависимости от объёма ваших данных; следить за ходом выполнения можно по журналам. Подробнее см. в документации [Logging](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging).
</Info>

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

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

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

<Info>
  Это может быть `~/sharelatex_data` или `~/overleaf_data` — в зависимости от того, когда был настроен ваш экземпляр.
</Info>

<Check>
  Для файлов проектов и данных полной истории проектов мы также поддерживаем S3-совместимые хранилища.
</Check>

Подробнее о структуре каталогов на диске см. в разделе «Подробно о каталогах».

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

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

* 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.

<Danger>
  * Резервные копии следует хранить на сервере, отличном от того, на котором работает ваш экземпляр Overleaf, а в идеале — вообще в другом месте.
  * Репликация баз данных на несколько экземпляров MongoDB может обеспечить некоторую избыточность, но не защищает от повреждения данных.
  * Тестирование резервных копий — лучший способ убедиться, что они полны и работоспособны.
</Danger>

### 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 [здесь](/ru/on-premises/configuration/overleaf-toolkit/redis#enabling-append-only-file-persistence).

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

### Перенос данных между серверами

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

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

#### Toolkit

```bash theme={null}
# Gracefully shutdown the old instance
old-server$ bin/stop

# Create the tar-ball
old-server$ tar --create --file backup-old-server.tar config/ data/

# Copy the backup-old-server.tar file from the old-server to the
# new-server using any method that fits

# Gracefully shutdown new instance (if started yet)
new-server$ bin/stop

# Move new data, you can delete it too
new-server$ mkdir backup-new-server
new-server$ mv config/ data/ backup-new-server/

# Populate config/data dir again
new-server$ tar --extract --file backup-old-server.tar

# Start containers
new-server$ bin/up
```

#### Docker Compose

```bash wrap theme={null}
# Gracefully shutdown the old instance
old-server$ docker stop sharelatex
old-server$ docker stop mongo redis

# Create the tar-ball
old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data

# Copy the backup-old-server.tar file from the old-server to
# the new-server using any method that fits

# Gracefully shutdown new instance (if started yet)
new-server$ docker stop sharelatex
new-server$ docker stop mongo redis

# Move new data, you can delete it too
new-server$ mkdir backup-new-server
new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/

# Populate data dirs again
new-server$ tar --extract --file backup-old-server.tar

# Start containers
new-server$ docker start mongo redis
new-server$ docker start sharelatex
```

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

<Info>
  При запуске от имени пользователя root (или через sudo) tar сохраняет владельца/группу файлов и права доступа, что критически важно при восстановлении из резервной копии.
</Info>

### Подробно о каталогах

<Info>
  У следующих каталогов есть дополнительные пометки:

  * (b) включать в резервные копии, лучше всего при остановленном экземпляре для обеспечения согласованности
  * (d) можно удалить
  * (e) временные файлы, можно удалить при остановленном экземпляре
</Info>

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)
         * временные файлы для миграций полной истории проектов


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