> 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/uk/obslugovuvannya/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/uk/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 DB
3. `~/overleaf_data`
   1. bin
      1. synctex (d)
         * у найновішому випуску не використовується, раніше використовувався спеціальний бінарний файл synctex (synctex використовується для зіставлення джерела між файлами .tex і PDF)
   2. data
      1. кеш (e)
         * кеш двійкових файлів для компіляцій
      2. компіляції (e)
         * тут відбувається компіляція LaTeX
      3. db.sqlite (d)
         * у найновішому випуску не використовується, раніше зберігалися деталі кешу clsi (або їх перенесено до простих in-memory-мап, або ми скануємо диск)
      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://overleaf-pro.ayaka.space/on-premises/uk/obslugovuvannya/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.
