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