> 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/ru/obsluzhivanie/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/ru/konfiguraciya/overleaf-toolkit/s3.md).

### Требования

* Совместимое с S3 объектное хранилище, к которому можно подключиться, см. [S3](/on-premises/ru/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/ru/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/ru/podderzhka/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" %}
Первое преобразование удаляет папку верхнего уровня. Второе преобразование изменяет структуру каталогов на плоскую. Подстановочные шаблоны гарантируют, что будут извлечены только файлы, а не их родительские (проектные) папки.
{% 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/ru/obsluzhivanie/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.
