> 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/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" %}
Каталоги історії вже мають правильну структуру. Ви можете завантажувати безпосередньо з вихідної папки, змонтованої через 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: завантажте файли

Залежно від ваших уподобань, ви можете використати S3-клієнт minio mc або 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 змінює структуру каталогів на плоску. Шаблони wildcard забезпечують, що витягуються лише файли, а не їхні батьківські (проєктні) папки.
{% 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://ayakaleaf-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.
