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

Для збереження даних Redis рекомендовано конфігурацію з увімкненим Append Only File (AOF).

Користувачі 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. cache (e)
         * кеш двійкових файлів для компіляцій
      2. compiles (e)
         * тут відбувається компіляція latex
      3. db.sqlite (d)
         * у найновішому випуску не використовується; раніше тут зберігалися деталі кешу clsi (або перенесено до простих in-memory-мап, або ми скануємо диск)
      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://ayakaleaf-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.
