> 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/s3-migration.md).

# Міграція до S3

## Міграція до S3

{% hint style="info" %}
Ці інструкції призначені для v5.x і новіших. Якщо ви користуєтеся цим посібником для раннішої версії, будь ласка, використовуйте `sharelatex` замість `overleaf` у назвах шляхів і `SHARELATEX_` префікс замість `OVERLEAF_` для змінних середовища.
{% endhint %}

{% hint style="warning" %}
Клієнти Server Pro: будь ласка, зверніться до служби підтримки перед тим, як мігрувати ваші дані до S3.
{% endhint %}

{% hint style="success" %}
**Ми будемо раді почути вас!** Якщо ви хочете поділитися з нами тим, скільки файлів ви перенесли, їхнім загальним обсягом і тим, скільки часу зайняла міграція, надішліть листа на [`support@overleaf.com`](mailto:support@overleaf.com) .
{% endhint %}

Цей посібник проведе вас через міграцію з дискового сховища до об'єктного сховища, сумісного з S3. У ньому посилаються на розділи вступного документа на [Налаштування S3](/on-premises/uk/konfiguraciya/overleaf-toolkit/s3.md).

### Вимоги

* S3-сумісне об'єктне сховище, до якого можна звернутися, див. [S3](/on-premises/uk/konfiguraciya/overleaf-toolkit/s3.md#s3-setup) варіанти
* Вільне місце на диску для міграції наявних даних, приблизно дорівнює поточному обсягу на диску
* Вікно техобслуговування для виконання самої міграції
* Повна резервна копія, включно з конфігурацією, щоб можна було відновитися з неї

### Оцініть потрібний обсяг диска для міграції

Ми можемо скористатися `du` для обчислення поточного використання диска:

```shell
docker exec sharelatex \\
  du --human-readable --max-depth=0 /var/lib/overleaf/data/user_files

docker exec sharelatex \\
  du --human-readable --max-depth=0 /var/lib/overleaf/data/template_files
```

У разі якщо на поточному сервері недостатньо вільного місця на диску, спробуйте під'єднати до сервера ще один диск.

{% hint style="info" %}
Каталоги history уже мають правильну структуру. Ви можете завантажувати безпосередньо з вихідної папки, змонтованої через bind-mount, що не потребує додаткового дискового простору.
{% endhint %}

### Кроки міграції

#### Крок 0: вимкніть інстанс

Потрібно переконатися, що будуть перенесені всі файли користувачів/шаблонів. Найкраще вимкнути інстанс, щоб не пропустити щойно завантажені файли.

Будь ласка, дивіться наш посібник із виконання узгодженої резервної копії для процедури вимкнення.

#### Крок 1: перепишіть структуру каталогів

Потрібно переписати структуру каталогів проєктних файлів, щоб завантажити їх до S3. Структура каталогів для локального сховища у filestore має вигляд `<project-id>_<file-id>` а структура каталогів у S3 має вигляд `<project-id>/<file-id>`.

Нижче, `/srv/overleaf-s3-migration` використовується для зберігання файлів у новій структурі каталогів.

Ми можемо скористатися `tar` для переписування структури:

```shell
mkdir -p /srv/overleaf-s3-migration/user_files \\
         /srv/overleaf-s3-migration/template_files
docker exec sharelatex \\
  tar --create --directory /var/lib/overleaf/data/user_files . \\
| tar --extract --directory /srv/overleaf-s3-migration/user_files \\
  --transform=sx_x/x
docker exec sharelatex \\
  tar --create --directory /var/lib/overleaf/data/template_files . \\
| tar --extract --directory /srv/overleaf-s3-migration/template_files \\
  --transform=sx_x/xg
```

#### Крок 2: завантажте файли

Залежно від ваших уподобань, ви можете використовувати клієнт minio mc для S3 або aws cli для завантаження файлів до вашого об'єктного сховища, сумісного з S3.

**aws cli**

{% hint style="info" %}

* Тут вам слід замінити `overleaf-user-files`, `overleaf-template-files`, `overleaf-project-blobs` та `overleaf-chunks` на назви ваших бакетів S3.
* Також замініть `/srv/overleaf-bind-mount` на локальний шлях `/var/lib/overleaf` bind-mount. За замовчуванням це `~/overleaf_data` у розгортанні docker-compose.yml і `<toolkit-checkout>/data/overleaf` під час використання Toolkit.
  {% endhint %}

{% code overflow="wrap" %}

```shell
aws s3 sync /srv/overleaf-s3-migration/user_files s3://overleaf-user-files
aws s3 sync /srv/overleaf-s3-migration/template_files s3://overleaf-template-files

aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3://overleaf-project-blobs
aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-chunks s3://overleaf-chunks
```

{% endcode %}

**minio mc**

Ми тут використовуємо псевдонім сервера "s3", але ви могли вибрати іншу назву.

{% code overflow="wrap" %}

```shell
mc mirror /srv/overleaf-s3-migration/user_files s3/overleaf-user-files
mc mirror /srv/overleaf-s3-migration/template_files s3/overleaf-template-files

mc mirror /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3/overleaf-project-blobs
mc mirror /srv/overleaf-bind-mount/data/history/overleaf-chunks s3/overleaf-chunks
```

{% endcode %}

#### Крок 3: запустіть інстанс, вказавши S3

Додайте всі змінні, пов'язані з S3, до вашої конфігурації, як описано в розділі [Огляд змінних](/on-premises/uk/konfiguraciya/overleaf-toolkit/s3.md#overview-of-variables) у посібнику з налаштування [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) .

Для розгортань Docker Compose ви також можете прибрати bind-mount для каталогу даних із розділу volumes.

{% hint style="success" %}
Будь ласка, залиште [bind-mount тимчасового диска для еферемерних файлів](/on-premises/uk/pidtrimka/troubleshooting.md#running-overleaf-with-an-nfs-filesystem) на місці.
{% endhint %}

Тепер ви можете запустити інстанс і перевірити міграцію:

* може переглядати бінарні файли в редакторі
* може зібрати PDF із зображеннями
* може завантажувати нові файли

### Відкат

Ви можете безпечно відкотити міграцію, виконавши кроки у зворотному порядку:

1. Зупиніть інстанс
2. Віддзеркальте файли назад, помінявши місцями джерело й призначення
3. Запишіть нові файли назад у локальний каталог, використовуючи обернене `перетворення`
4. Перезапустіть інстанс зі старою конфігурацією

{% code overflow="wrap" %}

```shell
# Під час використання aws cli
aws s3 sync s3://overleaf-user-files /srv/overleaf-s3-migration/user_files
aws s3 sync s3://overleaf-template-files /srv/overleaf-s3-migration/template_files
aws s3 sync s3://overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
aws s3 sync s3://overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks

# Під час використання minio mc
mc mirror s3/overleaf-user-files /srv/overleaf-s3-migration/user_files
mc mirror s3/overleaf-template-files /srv/overleaf-s3-migration/template_files
mc mirror s3/overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
mc mirror s3/overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks
```

{% endcode %}

```shell
# Запис файлів у локальний Server CE/Server Pro
tar --create --directory /srv/overleaf-s3-migration/user_files . \\
| docker exec --interactive sharelatex \\
    tar \\
      --extract \\
      --keep-old-files \\
      --directory /var/lib/overleaf/data/user_files \\
      --transform=sx./xx --transform=sx/x_x \\
      --wildcards '*/*/*'

tar --create --directory /srv/overleaf-s3-migration/template_files . \\
| docker exec --interactive sharelatex \\
    tar \\
      --extract \\
      --keep-old-files \\
      --directory /var/lib/overleaf/data/template_files \\
      --transform=sx./xx --transform=sx/x_xg \\
      --wildcards '*/*/*/*/pdf-converted-cache/*' \\
      --wildcards '*/*/*/*/pdf' \\
      --wildcards '*/*/*/*/zip'
```

{% hint style="info" %}
Перше transform видаляє папку верхнього рівня. Друге transform змінює структуру каталогів на плоску. Шаблони масок гарантують, що витягуються лише файли, а не їхні батьківські (проєктні) папки.
{% endhint %}


---

# 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/s3-migration.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.
